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,是字面量
中括号还有个好处,就是属性的名字可以动态的计算,比如用循环语句去遍历一个对象的属性
转载于:https://www.cnblogs.com/gzz2018/p/9693384.html