这段代码怎麽运行的啊?

来源:4-1 [JavaScript]对象概述

今世缘0

2017-05-28 17:20

var obj;
obj[{}]=true;
obj[{x:1}]=true;
obj;


写回答 关注

8回答

  • 慕粉1417128872
    2017-05-29 14:47:32
    已采纳

    var obj={};

    obj[{}]=true;

    console.log(obj);//输出Object {[object Object]: true}


    var p;

    for(p in keys){

        console.log("======="+p);//输出=======0,应该证明里面有一个属性

        console.log("======="+obj[p])//=======undefined 不知道为什么会这样

        console.log("======="+obj[p.toString()])//=======undefined 不知道为什么会这样

    }



    obj[{x:1}]=false;

    console.log(obj);//输出Object {[object Object]: false}


    var p;

    for(p in keys){

        console.log("--------"+p);//输出------0 证明里面有一个属性

    }



    var o={};

    for(p in o){

        console.log("++++++++++++++++++++"+p);//无输出,里面没属性

    }

    console.log(o.toString());

    //输出结果[object Object]与输出的Object {[object Object]: false}很相似

    o={x:1};

    console.log(o)//输出Object {x: 1}和Object {[object Object]: false}也很相似

    console.log(o.toString())//同样也是输出[object Object]  注意这里用的是toString(),转成字符串

    //把它们两个结合就变成Object {[object Object]: false}了


    //然后推测一种可能

    //obj[{}]=true;   {}不是字符串,js自动调用o.toString()方法,将其转成字符串,因为key只能是字符串

    //由上面知道o{} 的 toString()方法输出的是[object Object],所以obj中的[object Object]指向true

    //obj[{x:1}]=false; {x:1}不是字符串,js自动调用o.toString()方法,将其转成字符串

    //同样的由上面o{x:1} 的toString得到的字符串也是[object Object],

    //所以obj中的[object Object](key)被改变为指向false(value);

    //有一个问题就是o{x:1}   o.toString()为什么输出的不是[String,Number],这个就不是很懂

    //最后,我不知道这是对还是错,只是结合上面的输出结果推出来的

    //所以如果错了,不干我事


  • 慕粉1417128872
    2017-05-29 15:17:45

    应该是,obj[{}]=true    可能隐式的将{}变成字符串,也就是调用了  {}.toString()方法

    但是还是说一遍,我不敢保证这是对的

  • 今世缘0
    2017-05-29 15:11:25

    写这麽多,真是辛苦了。


  • 今世缘0
    2017-05-29 15:10:06

    这麽说的话,就是obj[{}]=true;调用了toString方法,然后输出object,赋值为true,然后下一句就相当于覆盖了上一句?

  • 慕粉1417128872
    2017-05-29 14:52:46

    最后要是有可以肯定的正确答案@我

  • 慕粉1417128872
    2017-05-29 14:49:24

    最后可以肯定的正确答案@我

  • 今世缘0
    2017-05-29 12:30:25
    var obj={};
    obj[{}]=true;
    obj[{x:1}]=true;
    obj;

    呵呵,应该是这样的,大神,帮忙解答疑惑啊。

  • 慕粉1417128872
    2017-05-29 11:59:30

    好像报错了啊

JavaScript深入浅出

由浅入深学习JS语言特性,且解析JS常见误区,从入门到掌握

281112 学习 · 1020 问题

查看课程

相似问题