javascript对象访问

javascript中创建对象可以这样:

var obj = {
        name : "sam",
        age : 27,
        sex : "boy"
    }

也可以这样:

var obj = {
        "name" : "sam",
        "age" : 27,
        "sex" : "boy"
    }

不加引号是简化写法,加引号的是标准写法,当字段名包含某些特殊符号如 - 时,不能使用简化写法。

{
        z-index: 10 //
}
{
        'z-index':10//正确
}

综上,规范起见,最好都按照标准写法来编写代码。
    另外,在访问对象属性时出现这个情况
    document.write(obj[name]);页面输出undefined
    document.write(obj[age]);firebug监控报错:age is not defined
    需要说明的是,这种访问对象属性的方法是错误的,正常的方法是obj.name或者obj["name"],这里拿出来是为了阐述上面提到的这个一个报错一个不报错的问题
    javascript中,如果一个变量未定义就直接使用,如以下代码:
    alert(age);
    页面不会输出任何信息,firebug监控报错:age is not defined
    如果定义了但未初始化,如以下代码:
    var age;
    alert(age);
    页面输出:undefined
    再回到上面的问题
    document.write(obj[age]);firebug监控报错:age is not defined,这段代码是没问题的,obj[age]是错误的访问对象方法,age没有被定义过,所以报错信息:age is not defined
    但是document.write(obj[name]);这段代码为什么就输出了undefined呢,name同样是未被定义过的,只有在被定义过且没有被初始化才会输出undefined,这是为什么?
    原来name这个属性是window对象自身就拥有的,我又没有在代码中重新定义覆盖掉,所以在document.write(obj[name])被自动识别为window的name属性,因为未被初始化,所以输出undefined            



    然后为了进一步验证以上的结论,脱离这个环境继续做测试,有以下代码:
    document.write(age);
    firebug监控报错:age is not defined 页面未输出任何信息,OK正常
    document.write(name);
    运行后发现预想的undefined值并未出现,页面是空白的,没有输出任何信息,于是推测name的默认值为一个空的字符串,测试代码如下:
    document.write(name + 123 + 456);
    页面输出123456,推断正确


    所以上面:document.write(obj[name]);输出undefined背后其实发生了这些事:
    name = "";
    document.write(obj[name])等价于document.write(obj[""]);

posted on 2015-01-28 17:24  real秦川  阅读(182)  评论(0编辑  收藏  举报