启动node.js命令行,创建一个最简单的对象,然后遍历其属性:
$ node
> var myobj = {k1: "p1", k2: 'p2'}
> for (var key in myobj) {
... console.log(key);
... console.log(myobj.key);
... console.log(myobj[key]);
... }
k1
undefined
p1
k2
undefined
p2
> myobj.k1
'p1'
> var ak = 'k4'
undefined
> myobj.ak = 'p4'
'p4'
> myobj
{ k1: 'p1',
k2: 'p2',
ak: 'p4' }
> myobj[ak] = 'p4'
'p4'
> myobj
{ k1: 'p1',
k2: 'p2',
ak: 'p4',
k4: 'p4' }
> myobj[nk] = 'p5'
ReferenceError: nk is not defined
at repl:1:8
at REPLServer.self.eval (repl.js:110:21)
...
> myobj['nk'] = 'p5'
'p5'
> myobj
{ k1: 'p1',
k2: 'p2',
ak: 'p4',
k4: 'p4',
nk: 'p5' }
点操作符 (myobj.key) 和中括号 (myobj[key]) 都能用于获取和添加对象属性, 二者的区别在于,点操作符后面的属性名称按照字面量处理, 中括号中的属性名称按照变量名处理。
如果想通过变量名读写对象属性,必须用中括号操作符, 如果想不写引号直接引用属性名称,必须用点操作符。
搜索"javascript object dot square bracket"查找相关文章。