javascript获取属性的两种方法及区别

javascript获取属性有两种方式,点或者中括号:

var obj={}
obj.x=1
console.log(obj.x)//1  第一种方式,x是字面量
try{
    console.log(obj[x])//ReferenceError: x is not defined  相当于调用obj."undefined"
}catch(e){
    console.log("err:"+e)
}
x="str"
console.log(obj[x])
x="x"
console.log(obj[x])//x是一个变量,先计算出值并转换为字符串,在获取相应的属性名

 当你用第一种方式的时候,属性必须是一个合法的变量名,如果属性名字是 2 或者 “john smith”就行不通了,这时你只能用中括号 obj[2]或者obj["john smith"].所以你会联想的数组,有人说javascript里面甚至没有数组,只有属性,因为你可以这样定义:

arr=[]
arr[0]=1
arr[2]=2

中间跳过了arr[1],如果你要取arr[1]也可以,只是会得到undefined

为什么不像

console.log(obj[x])//ReferenceError: x is not defined 相当于调用obj."undefined"  

这样抛异常呢,因为1不是undefined,是字面量

中括号还有个好处,就是属性的名字可以动态的计算,比如用循环语句去遍历一个对象的属性

 

posted @ 2018-09-23 18:43  龚zz2018a  阅读(688)  评论(1编辑  收藏  举报