javascript - 关于JS中的对象问题
漂亮男人
漂亮男人 2017-05-18 10:51:26
0
5
470

今天看到书上讲到JS的对象,有个示例不是很明白

var myObject = {};
myObject[myObject] = "foo";

myObject["[object Object]"];//foo,这里的[object Object]等价于{}吗?
漂亮男人
漂亮男人

全部回复(5)
Ty80


这里的[object Object]是在myObject[myObject] = "foo";这一步的时候由于myObject的隐式类型转换得来的,所以这里的[object Object]只是转换来的一个字符串而已,只是在对象中以‘[object Object]’为键存放了‘foo’这个值!

Ty80

雷雷

世界只因有你

雷雷

左手右手慢动作

这是对象键名的隐式转换问题。
就拿这个例子来说,用大白话解释就是:

有一个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的

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板