javascript – Fragen zu Objekten in JS
漂亮男人
漂亮男人 2017-05-18 10:51:26
0
5
507

Ich habe heute ein Buch gesehen, in dem es um JS-Objekte ging, und es gab ein Beispiel, das ich nicht ganz verstand

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

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

Antworte allen(5)
Ty80


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

Ty80
var myObject = {};
console.log(myObject.toString());//[object Object]

myObject[myObject] = "foo";

console.log(myObject["[object Object]"]);//foo,这里的[object Object]等价于{}吗?

console.log(myObject.toString());//[object Object]

for(var i in myObject){
    console.log(i);//[object Object]
}

//从以上结果可以看出:不管这个对象是什么,转成字符串后都是"[object Object]""
世界只因有你
myObject[myObject]这里发生隐型转换,{}转换为字符串,调用toString()方法
({}).toString()//"[object Object]"
左手右手慢动作

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

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

Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage