今天看到书上讲到JS的对象,有个示例不是很明白
var myObject = {}; myObject[myObject] = "foo"; myObject["[object Object]"];//foo,这里的[object Object]等价于{}吗?
这里的[object Object]是在myObject[myObject] = "foo";这一步的时候由于myObject的隐式类型转换得来的,所以这里的[object Object]只是转换来的一个字符串而已,只是在对象中以‘[object Object]’为键存放了‘foo’这个值!
myObject[myObject] = "foo";
雷雷
这是对象键名的隐式转换问题。就拿这个例子来说,用大白话解释就是:
有一个A对象,想将B对象作为A对象的一个键名传递进来,但是因为对象的所有键名都是字符串,所以B对象就会调用toString()方法,转换为一个字符串"[object Object]",来作为一个A对象的一个键名存放数据,实例中的数据就是这个"foo"字符串。
另外特别需要注意的一点是:你的问题中的A对象和B对象是同一个,这点很迷惑人,所以我新声明了一个mykey来区分。
var myObject = {}; var myKey={}; myObject[myKey]="foo"; console.log("[object Object]"===myKey.toString());//true
打印结果为true,证明"[object Object]"等于的不是{},而是等于对象经过toString()方法后返回的字符串
console.log(myObject[myKey.toString()]);//foo console.log(myObject["[object Object]"]);//foo console.log(myObject[myKey.toString()]===myObject["[object Object]"]);//true
上述代码三行代码再证明:"[object Object]"等于对象经过toString()方法后返回的字符串
key值会自动转成string的
这里的[object Object]是在
myObject[myObject] = "foo";
这一步的时候由于myObject的隐式类型转换得来的,所以这里的[object Object]只是转换来的一个字符串而已,只是在对象中以‘[object Object]’为键存放了‘foo’这个值!雷雷
雷雷
这是对象键名的隐式转换问题。
就拿这个例子来说,用大白话解释就是:
有一个A对象,想将B对象作为A对象的一个键名传递进来,但是因为对象的所有键名都是字符串,所以B对象就会调用toString()方法,转换为一个字符串"[object Object]",来作为一个A对象的一个键名存放数据,实例中的数据就是这个"foo"字符串。
另外特别需要注意的一点是:
你的问题中的A对象和B对象是同一个,这点很迷惑人,所以我新声明了一个mykey来区分。
key值会自动转成string的