美文网首页让前端飞Web前端之路
这道笔试题你会吗(11)

这道笔试题你会吗(11)

作者: Vicky丶Amor | 来源:发表于2019-05-20 10:46 被阅读8次

    输出以下代码运行结果

    // example 1
    var a={}, b='123', c=123;  
    a[b]='b';
    a[c]='c';  
    console.log(a[b]);
    

    // example 2
    var a={}, b=Symbol('123'), c=Symbol('123');  
    a[b]='b';
    a[c]='c';  
    console.log(a[b]);
    

    // example 3
    var a={}, b={key:'123'}, c={key:'456'};  
    a[b]='b';
    a[c]='c';  
    console.log(a[b]);
    

    解答:

    这题考察的是对象的键名的转换。

    对象的键名只能是字符串和 Symbol 类型。
    其他类型的键名会被转换成字符串类型。
    对象转字符串默认会调用 toString 方法。

    // example 1
    var a={}, b='123', c=123;
    a[b]='b';
    a[c]='c';  
    
    // 输出 c
    console.log(a[b]);
    

    c 的键名会被转换成字符串'123',这里会把 b 覆盖掉。

    // example 2
    var a={}, b=Symbol('123'), c=Symbol('123');  
    a[b]='b';
    a[c]='c';
    
    // 输出 b
    console.log(a[b]);
    

    b 是 Symbol 类型,不需要转换。
    c 是 Symbol 类型,不需要转换。任何一个 Symbol 类型的值都是不相等的,所以不会覆盖掉 b。

    // example 3
    var a={}, b={key:'123'}, c={key:'456'};  
    a[b]='b';
    a[c]='c';  
    
    // 输出 c
    console.log(a[b]);
    

    b 不是字符串也不是 Symbol 类型,需要转换成字符串。
    对象类型会调用 toString 方法转换成字符串 [object Object]。
    c 不是字符串也不是 Symbol 类型,需要转换成字符串。
    对象类型会调用 toString 方法转换成字符串 [object Object]。这里会把 b 覆盖掉。

    作者:木易杨
    博客:https://github.com/yygmind/blog

    求点赞 求关注~

    相关文章

      网友评论

        本文标题:这道笔试题你会吗(11)

        本文链接:https://www.haomeiwen.com/subject/htmhzqtx.html