犀牛书笔记:(9)Objects and Arrays
object literal
用{}包围的一组name/value对。name/value用冒号分隔。每一对之间用逗号分隔。
要创建一个新的属性,只需要给要创建的属性赋值。
?
in操作符可以用来检验某个对象是否含有某个属性
in操作符左边是属性名的字符串,右边是对象
?
if( "x" in obj) obj.x = 3;
由于访问不存在的属性将会返回undefined,因此也可以用这种方式来判断属性的存在性
?
if( obj.x !== undefined) obj.x = 4;
?
delete 删除属性
?
var o = {x:1,y:2,z:3};alert(o.x);//1delete o.x;alert(o.x);//undefined?访问对象属性有两种方法,[]和.号,它们最重要的区别在于,[]中跟的是字符串,因为是字符串,就可以任意装配,比如以下代码:
?
for(var i=0; i < 10; i++){ alert(obj["x" + i]);}?
另外一种不同在于,[]访问对象其实类似于JAVA的反射方式,如:
?
var stockName = getStockName();var shares = getShares();portfolio[stockName] = shares;
?
对象通用属性和方法:
?
var d = new Date9);alert(d.constructor);//returned Date.?instanceof操作符就是检查constructor属性来实现的。toString()方法。
var o = {x:3,y:4};alert(o.propertyIsEnumerable("x"));//truealert(o.propertyIsEnumerable("z"));//false?isPrototypeOf()方法?
声明array:
var a = [1,2,3];
var a = new Array(5,4,3,2,1);
var a = new Array(10);
?
?
如果用一个非法的索引访问数组(非数字,不是大于等于零小于最大范围的整数),该数组将被转换为一个对象
这种情况下,o.length还是不变的。
?
增加数组对象,使用一个没有索引到的索引值,并赋值即可
?
?
如果使用DELETE删除数组对象,实际上该对象依然存在,数组大小也没有改变,只是将被删除元素的值改成了undefined.要真正删除一个数组元素,需要使用Array.shift()来删除数组的第一个元素,使用Array.pop()删除最后一个元素, Array.splice()删除一段连续的元素。
?
?
var temp = new Array(1,2,3);temp[30] = 4;alert(temp.length);// return 31;?
Array的length属性是可以修改的,如果将length改小,那么该数组就被截断,改大数组就被扩大
?
数组的通用方法:
?
var o = [1,2,3];alert(o.join()); // returned: 1,2,3alert(o.join("/"));//1/2/3?如果o的元素有未初始化的,则置为空reverse()var a = [1,2,3];a.concat(4,5);//returns [1,2,3,4,5]?slice()
var a = [1,2,3];a.splice(2,0,'a','b');//returns []; a变成[1,2,'a','b' , 3]?push() and pop()
?
?