JS高程学习笔记:ECMAScript引用类型之Array类型【皇

来源:http://www.prospettivedarte.com 作者:计算机教程 人气:160 发布时间:2019-05-11
摘要:ECMAScript数组与其他语言的数组一样都是有序列表,ECMAScript数组的每一项可以保存任何类型的数据,也就是说,每一项都可以包含不同的对象、字符串、数组等。而且,ECMAScript数组的大

  ECMAScript数组与其他语言的数组一样都是有序列表,ECMAScript数组的每一项可以保存任何类型的数据,也就是说,每一项都可以包含不同的对象、字符串、数组等。而且,ECMAScript数组的大小可以动态地调整的,即可以随着数据添加自动增长容纳新增数据。

JavaScript实现

 


创建数组的基本方式

一个完整的JavaScript实现应该由下列三个不同的部分组成:

  第一种是使用Array构造函数:

  • 核心(ECMAScript):提供核心语言功能。
  • 文档对象模型(DOM):提供访问和操作网页内容的方法和接口。
  • 浏览器对象模型(BOM):提供与浏览器交互的方法和接口。

打开谷歌浏览器 Developer Tools快捷键(ctrl

JavaScript的这三个组成部分,在当前五个主要浏览器(IE、Firefox、Chrome、Safari和Opera)中都得到了不同程度的支持。其中,所有浏览器对ECMAScript第3版的支持大体上都还不错,而对ECMAScript5的支持程度越来越高,但对DOM的支持则彼此相差比较多。对已经正式纳入HTML5标准的BOM来说,尽管各浏览器都实现了某些众所周知的共同特性,但其他特性还是会因浏览器而异。

  • shift J)拷贝以下代码就可以调试了

    var num = new Array();//创建一个空的数组 var num = new Array(20);//创建一个length值为20的数组 var num = new Array("1","2","3");//创建一个包含三个字符的数组

在HTML中使用JavaScript

 


可以通过构造函数传递一个值来创建数组,如果传递其他类型的参数,则会创建包含那个值的只有一项的数组。

按照惯例,外部JavaScript文件带有.js扩展名。但这个扩展名不是必须的,因为浏览器不会检查包含JavaScript的文件的扩展名。这样一来,使用JSP、PHP或其他服务器端语言动态生成JavaScript代码也就成为了可能。但是,服务器通常还是需要看扩展名决定为响应应用哪种MIME类型。如果不使用.js扩展名,请确保服务器能返回正确的MIME类型。
通过<script>元素的src属性还可以包含来自外部域的JavaScript文件。这一点既让<script>元素倍显强大,又让它备受争议。在这一点上,<script>与<img>元素非常相似,即它的src属性可以是指向当前HTML页面所在域之前的某个域中的完整URL。
无论如何包含代码,只要不存在defer和async属性,浏览器都会按照<script>元素在页面中出现的先后顺序对它们依次进行解析。

var num = new Array(3); //创建一个包含3个项的数组,可省略new
var num1 = new Array("yellwo");//创建包含一项的数组,可省略new

文档模式

  第二种是使用数组字面量表示法:


var num = ["1", "2", "3"];//["1", "2", "3"]
var num1 = [];//[]
var num2 = [1,2,];//[1,2,undefined]
var num3 = [,,];//[undefined,undefined,undefined]
console.log(num);

IE5.5引入了文档模式的概念,而这个概念是通过使用文档类型(doctype)切换实现的。最初的两种文档模式是:混杂模式和标准模式。
对于标准模式,可以使用下面任何一种文档类型来开启:

在IE中,num2与num3都会有三项值(IE8及更早的版本中),在空的数组内会创建创建一个undefined的值;而在其他浏览器中num2会有两项分别是1,2;而num3会有两个undefined,这种方法一般不推荐使用,因为IE的实现与其他浏览器不一致,会有浏览器兼容性问题。、

皇牌天下投注网 1

 

而对于准标准模式,则可以通过使用过渡性(transitional)或框架集型(frameset)文档类型来触发:

 读取与设置

皇牌天下投注网 2

在读取和设置数组的值时,要使用方括号并提供相应值的基于0开始索引:

使用defer属性可以让脚本在文档完全呈现之后再执行。延迟脚本总是按照指定它们的顺序执行。
使用async属性可以表示当前脚本不必等待其他脚本,也不必阻塞文档呈现。不能保证异步脚本按照它们在页面中出现的顺序执行。

var num = ['1', '2', '3'];//定义一个字符串数组
console.log(num[0]);//索引第一项
num[2] = "4";//修改数组中的第三项
num[3] = "5";//新值第五项
console.log(num);

语句

皇牌天下投注网 3


皇牌天下投注网 4

for-in语句

 

for (var propName in window) {
    document.write(propName);
}

 

使用for-in循环来显示了BOM中window对象的所有属性。每次执行循环时,都会将window对象中存在的一个属性名赋值给变量propName。
ECMAScript对象的属性没有顺序。因此,通过for-in循环输出的属性名的顺序是不可预测的。具体来讲,如果属性都会被返回一次,但返回的先后次序可能会因浏览器而异。
但是,如果表示要迭代的对象的变量值为null或undefined,for-in语句会抛出错误。ECMAScript5更正了这一行为;对这种情况不在抛出错误,而只是不执行循环体。为了保证最大限度的兼容性,建议在使用for-in循环之前,先检测确认该对象的值不是null或undefined。

 

label语句
使用label语句可以在代码中添加标签,以便将来使用。

 

start: for (var i=0; i < count; i  ) {
    alert(i);
}

 

这个例子中定义的start标签可以在将来由break或continue语句引用。加标签的语句一般都要与for语句等循环语句配合使用。

 

基本类型和引用类型的值

 


 

ECMAScript变量可能包含两种不同数据类型的值:基本类型值和引用类型值。基本类型值指的是简单的数据段,而引用类型值指那些可能由多个值构成的对象。
引用类型的值是保存在内存中的对象。与其他语言不同,JavaScript不允许直接访问内存中的位置,也就是说不能直接操作对象的内存空间。在操作对象时,实际上是在操作对象的引用而不是实际的对象。为此,引用类型的值是按引用访问的。

 

复制变量值

获取数组长度

var num1 = 5;
var num2 = num1;

 数组的项数保存在length属性中,这个属性始终会返回0或更大的值:

num1中保存的值是5,。当使用num1的值来初始化num2时,num2中也保存了值5。但num2中的5与num1中的5是完全独立的,该值只是num1中5的一个副本。此后,这两个变量可以参与任何操作而不会相互影响。

var str = ["one", "two", "three"];
var num = [];

console.log(str.length);//3
console.log(num.length);//0
var obj1 = new Object();
var obj2 = obj1;
obj1.name = "Nicholas";
alert(obj2.name); //"Nicholas"

皇牌天下投注网 5

当从一个变量向另一个变量复制引用类型的值时,同样也会将存储在变量对象中的值复制一份放到新变量分配的空间中。不同的而是,这个值的副本实际上是一个指针,而这个指针指向存储在堆中的一个对象。复制操作结束后,两个变量实际上将引用同一个对象。因此,改变其中一个变量,就会影响另一个变量。

 

传递参数
在向参数传递基本类型的值时,被传递的值会被复制给一个局部变量(即命名参数,或者用ECMAScript的概念来说,就是arguments对象中的一个元素)。在向参数传递引用类型的值时,会把这个值在内存中的地址复制给一个局部变量,因此这个局部变量的变化会反应在函数的外部:

设置这个属性可以向属性添加项或在末尾移除项:

function addTen(num) {
    num  = 10;
    return num;
}
var count = 20;
var result = addTen(count);
alert(count); //20
	 

本文由皇牌天下投注网发布于计算机教程,转载请注明出处:JS高程学习笔记:ECMAScript引用类型之Array类型【皇

关键词:

最火资讯