Fly*_*ura 0 javascript dictionary ecmascript-6
以下代码:
let user1={name: "Sam"};
let user2={name:"Tyler"};
let totalReplies={};
totalReplies[user1]=5;
totalReplies[user2]=42;
console.log(totalReplies[user1]);
console.log(totalReplies[user2]);
Run Code Online (Sandbox Code Playgroud)
生成输出:
42
42
Run Code Online (Sandbox Code Playgroud)
我期望输出为:
5
42
Run Code Online (Sandbox Code Playgroud)
阅读,我得到了' 当使用对象作为地图时,它的键总是转换为字符串 '.我不确定我是否理解这意味着什么或为什么对象键被转换为字符串.无论哪种方式,理解输出为42 42的原因应该有助于实施这一概念.
JavaScript对象仅支持字符串和符号作为键.
在这种情况下,JS将对象强制转换为字符串值(类似于[object Object]).
所以基本上你的代码就相当于:
let user1={name: "Sam"};
let user2={name:"Tyler"};
let totalReplies={};
totalReplies['[object Object]']=5;
totalReplies['[object Object]']=42;
console.log(totalReplies['[object Object]']);
console.log(totalReplies['[object Object]']);
Run Code Online (Sandbox Code Playgroud)
你可以在这里了解更多关于强制的信息:http: //webreflection.blogspot.ch/2010/10/javascript-coercion-demystified.html
解
如果需要在ES6 +中使用对象作为键,则可以使用Maps对象代替对象作为数据存储:
let user1={name: "Sam"};
let user2={name:"Tyler"};
let totalReplies = new Map();
totalReplies.set(user1, 5);
totalReplies.set(user2, 42);
console.log(totalReplies.get(user1));
console.log(totalReplies.get(user2));
Run Code Online (Sandbox Code Playgroud)