当前位置: 代码迷 >> Web前端 >> 犀牛书札记:(9)Objects and Arrays
  详细解决方案

犀牛书札记:(9)Objects and Arrays

热度:604   发布时间:2012-10-10 13:58:11.0
犀牛书笔记:(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);//1
delete 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;

?

对象通用属性和方法:

?

  1. constructor属性,该属性将指向到初始化该对象的构造函数
    var d = new Date9);
    alert(d.constructor);//returned Date.
    ?instanceof操作符就是检查constructor属性来实现的
  2. toString()方法。
    当用+号链接一个字符串或者使用alert,参数是对象时,toString()方法将会自动被调用
  3. toLocaleString()方法。
    ECMAScript v3和JS1.5中定义的,基本上和toString()返回的一样。
  4. valueOf()方法
    当需要将对象转换成一个元数据时使用
  5. hasOwnProperty()方法。
    参数是属性名,如果对象本地定义了一个以该参数命名的非继承属性,返回true。
  6. propertyIsEnumerable()方法
    如果该对象有以参数命名的非继承属性,返回true。
    var o = {x:3,y:4};
    alert(o.propertyIsEnumerable("x"));//true
    alert(o.propertyIsEnumerable("z"));//false
    ?
  7. 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改小,那么该数组就被截断,改大数组就被扩大

?

数组的通用方法:

?

  1. join()
    将数组的所有元素转换成字符串并连接起来.
    var o = [1,2,3];
    alert(o.join()); // returned: 1,2,3
    alert(o.join("/"));//1/2/3
    ?如果o的元素有未初始化的,则置为空
  2. reverse()
    将所有元素的顺序倒置
  3. sort()
    将数组按字母顺序排列.如果有未初始化的元素,则将它们排列在数组的最后
    sort()函数可以传入一个函数作为参数,该函数有两个参数,及连个需要比较的对象,如果第一个参数要在第二个之前,该函数必须返回小于0的值,否则返回大于零的值,如果返回0,则两个参数相等.
  4. concat()
    将参数加如到数组中.
    var a = [1,2,3];
    a.concat(4,5);//returns [1,2,3,4,5]
    ?
  5. slice()
    类似subString(),带两个参数,则从第一个参数的位置开始,到小于第二个参数1的位置截取数组。如果是一个参数,则返回该参数开始,直到数组结尾的子数组。如果参数为负数,则表示和最后一个元素开始相应的前几个位置
  6. splice()
    第一个参数决定开始删除/增加元素的起始位置,第二个元素表示删除起始位之后的几个元素
    splice()将会返回被删除的元素组成的数组
    如果不止两个参数,则第三个元素开始的元素将被加入到原数组中,位置在起始位置(第一个参数指定)。
    var a = [1,2,3];
    a.splice(2,0,'a','b');//returns []; a变成[1,2,'a','b' , 3]
    ?
  7. push() and pop()
    将数组当作栈来操作。push将参数依次加入到数组尾部,pop将尾部的参数去掉,并将去掉的元素作为返回值。
  8. unshift() and shift()
    类似于push()和pop(),只不过push,pop在数组尾部操作,unshift,shift在数组头部操作
    unshift将元素加入到数组头部,返回新数组的长度。shift将头部的对象删除,并作为返回值返回


  9. toString() and toLocaleString()
有一些对象,操作起来很像数组,但是其实不是数组,此时不能用数组的通用函数。

?

?

  相关解决方案