魏长东

weichangdong

js 温习2

/* 
1、js数组跟其他语言的数组一样,都是数据的有序列表,但不同的是,js数组的每一项可以保存任何类型的数据。 
并且js数组的大小是可以动态调整的。 
 
2、创建数组方式: 
*/  
  
(1)使用Array构造函数创建数组:  
var names = new Array();  
  
创建length=30的数组  
var names = new Array(30); 如果预先知道数组长度,可直接传入数值   
alert(names.length);  30  
  
也可以像Array构造函数传递数组应该包含的项:  
var names2 = new Array("zhangsan","lisi","wangwu");  
alert(names2); zhangsan,lisi,wangwu  
  
给Array构造函数传递一个值也可以创建数组  
var ages = new Array(2);  创建包含两项的数组  
var ages = new Array("11"); 创建包含1项,即字符串“11”的数组  
  
可以省略new操作符  
var books = Array(2);创建包含两项的数组  
var books = Array("books1");创建包含1项,即字符串“books”的数组  
  
  
(2) 使用数组字面量表示法创建数组:数组字面量由一对包含数组项的方括号表示,多个数组项之间用逗号隔开  
var names = ["zhangsan","lisi","wangwu"];  创建一个包含3个字符串的数组  
var names = [];  创建一个空数组  
  
在数组最后一项添加逗号的结果:  
  
在其他浏览器中会创建包含2项且值分别为"zhangsan","lisi"的数组  
在IE中,names会创建包含3项,值分别为“zhangsan","lisi",undefined的数组,  
原因在于IE8及之前版本的ECMAScript实现在数组字面量方面存在BUG  
var names = ["zhangsan","lisi",];  
alert(names); IE9下报错,IE8及以下:zhangsan,lisi,  
alert(names.length);  
  
  
像这种省略值情况下,每一项都是undefined值。  
var names = [,,,,,];  
alert(names.length); 5:在及其他浏览器中创建包含5项的数组  
alert(names.length);   6:  在IE版本中创建包含6项的数组  
alert(names[5]); undefined  
  
  
读取设置数组值  
var colors = ["red","green","blue"];  
alert(colors[0]);  显示第一项  
colors[2] = "pink";  修改第三项  
alert(colors);  red,green,pink  
  
colors[3] = "black"; 增加第四项,设置某个值的索引超过了数组长度,则数组长度自动加1  
alert(colors); red,green,pink,black  
  
  
3、length属性:>=0  ,length属性不是只读的,可以通过设置length属性来从数组末尾移除项或向数组中添加项  
var colors = ["red","green","blue"];  
colors.length = 2;    
alert(colors[2]);  undefined  
  
var colors = ["red","green","blue"];  
colors.length = 4;    
alert(colors[3]);  undefined  
  
var colors = ["red","green","blue"];  
colors[colors.length] = "black";  
colors[colors.length] = "pink";  
alert(colors);  red,green,blue,black,pink  
  
var colors = ["red","green","blue"]  
colors[99] = "black";  
alert(colors.length);  100  ,colors[3]到color[98]都是undefined  
  
4、数组类型判断   
  
对于一个网页或一个全局作用域,instanceof假定单一的全局执行环境  
var colors = ["red","green","blue"];  
var obj = {};  
alert(colors instanceof Array); true  
alert(obj instanceof Array);  false  
  
对于网页中包含多个框架,则就存在多个不同的全局执行环境,从而存在多个不同版本的Array构造函数,  
那么从一个框架向另一个框架传入一个数组,则传入的数组与第二个框架中的数组则分别具有不同构造  
为了解决这个问题,则须采用Array.isArray()方法  
  
var colors = ["red", "green", "blue"];  
var obj = {};  
alert(Array.isArray(colors)); true  
alert(Array.isArray(obj)); false  
  
兼容性:支持isArray方法的浏览器有: IE9+,其他浏览器  
  
  
5、toString(): 返回数组每一项用逗号分隔的字符串,调用数组每一项的toString()方法  
valueOf(): 返回数组  
var colors = ["red", "green", "blue"];  
alert("toString="+colors.toString()); red,green,blue  
alert(colors); alert接收字符串参数,传递给它的是数组,因此在后头会调用Array的toString()方法  
alert("valueOf="+colors.valueOf());   
alert(Array.isArray(colors.valueOf())); true  
  
toLocaleString():  返回数组每一项用逗号分隔的字符串,调用每一项的toLocaleString()方法,而不是toString()方法  
/* 
var book1 = { 
    toString : function(){ 
        return "book1.toString()"; 
    }, 
 
    toLocaleString : function(){ 
        return "book1.toLocaleString()"; 
    } 
 
}; 
var book2 = { 
    toString : function(){ 
        return "book2.toString()"; 
    }, 
 
    toLocaleString : function(){ 
        return "book2.toLocaleString()"; 
    } 
 
}; 
var book = [book1,book2]; 
alert(book); book1.toString(),book2.toString() 
alert(book.toString); function toString(){[natice code]} 
alert(book.toString());book1.toString(),book2.toString() 
alert(book.toLocaleString());book1.toLocaleString(),book2.toLocaleString() 
*/  
  
join(): 接收一个作为分隔符的参数, 返回由分隔符分隔的字符串,  
var colors = ["red^", "green^", "blue^"];  
alert(colors.join(','));red^,green^,blue^  
alert(colors.join('|'));red^|green^|blue^  
alert(colors.join()); 默认以逗号分隔: red^,green^,blue^  
alert(colors.join(undefined));在IE8+及其他浏览器中显示:red^,green^,blue^  
alert(colors.join(undefined)); 在IE7及以下版本显示:red^undefinedgreen^undefinedblue^  
  
如果数组中的某一项值为null或undefined,则该值在join()\valueOf()\toString()\toLocaleString()都返回空字符串  
var names = ["zhangsan",null,undefined,"lisi"];  
alert(names); zhangsan,,,lisi  
  
  
push():  接收任意数量参数,添加到数组末尾,返回修改后数组长度  
var names = new Array();  
var num = names.push("zhangsan","lisi");  
alert(num); 2  
num = names.push("wangwu");  
alert(num); 3  
var item = names.pop();  
alert(item); wangwu  
  
shift() : 移除数组第一项并返回  
var colors = ["red","green","blue"];  
var item = colors.shift();  移除第一项并返回  
alert(item);  
alert(colors.length); 2  
  
unshift() : 在数组前端添加任意个项并返回数组新长度,对于IE7及更早版本,unshift返回undefined而不是数组长度  
var colors = ["red","green","blue"];  
var count = colors.unshift("aaa","bbb");  
alert(colors);"aaa","bbb","red","green","blue"  
alert(count);5