zoukankan      html  css  js  c++  java
  • 杂症4-Symbol,键名转换

    题目:

    // 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';
    
    // c 的键名会被转换成字符串'123',这里会把 b 覆盖掉。
    a[c]='c';  
    
    // 输出 c
    console.log(a[b]);
    // example 2
    var a={}, b=Symbol('123'), c=Symbol('123');  
    
    // b 是 Symbol 类型,不需要转换。
    a[b]='b';
    
    // c 是 Symbol 类型,不需要转换。任何一个 Symbol 类型的值都是不相等的,所以不会覆盖掉 b。
    a[c]='c';
    
    // 输出 b
    console.log(a[b]);
    // example 3
    var a={}, b={key:'123'}, c={key:'456'};  
    
    // b 不是字符串也不是 Symbol 类型,需要转换成字符串。
    // 对象类型会调用 toString 方法转换成字符串 [object Object]。
    a[b]='b';
    
    // c 不是字符串也不是 Symbol 类型,需要转换成字符串。
    // 对象类型会调用 toString 方法转换成字符串 [object Object]。这里会把 b 覆盖掉。
    a[c]='c';  
    
    // 输出 c
    console.log(a[b]);
  • 相关阅读:
    ASP.NET 分页数据源:: PagedDataSource //可分页数据源
    strtok
    FloydWarshall算法详解(转)
    Tom Clancy's Splinter Cell: Double Agent
    暴雪COO确认:星际争霸2.0要来了
    wxWidgets 2.8.0 released
    如饥似渴
    大乘法器遇见小乘法器
    GLEW 1.3.5 adds OpenGL 2.1 and NVIDIA G80 extensions
    DevIL真是好用得想哭
  • 原文地址:https://www.cnblogs.com/anbozhu7/p/11277557.html
Copyright © 2011-2022 走看看