Heim  >  Fragen und Antworten  >  Hauptteil

javascript – Fragen zu Objekten in JS

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]等价于{}吗?
漂亮男人漂亮男人2711 Tage vor423

Antworte allen(5)Ich werde antworten

  • PHP中文网

    PHP中文网2017-05-18 10:53:26


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

    Antwort
    0
  • PHP中文网

    PHP中文网2017-05-18 10:53:26

    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]""

    Antwort
    0
  • 世界只因有你

    世界只因有你2017-05-18 10:53:26

    myObject[myObject]这里发生隐型转换,{}转换为字符串,调用toString()方法
    ({}).toString()//"[object Object]"

    Antwort
    0
  • ringa_lee

    ringa_lee2017-05-18 10:53:26

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

    有一个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()方法后返回的字符串

    Antwort
    0
  • 大家讲道理

    大家讲道理2017-05-18 10:53:26

    key值会自动转成string的

    Antwort
    0
  • StornierenAntwort