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[""]);