忽略的知识点-Object key
起因:
const obj = {1: "a", 2: "b"}console.log(obj["1"]) // a
console.log(obj[1]) // a
根据MDN中关于object构造器的描述
// 对象初始化器(Object initialiser)或对象字面量(literal) { [ nameValuePair1[, nameValuePair2[, ...nameValuePairN] ] ] }
nameValuePair1, nameValuePair2, ... nameValuePairN
成对的名称(字符串)与值(任何值),其中名称通过冒号与值分隔。
键值会被存放为字符串类型(除symbol外)
范例:
var b = {} b[1] = 1; b["2"] = 2; b[{c:3}] = 3 b[{e:4}] = 4 b[Symbol("f")] = 5for(var i in b){
console.log(Object.prototype.toString.call(i))// [object String] * 3
}
Q1: 为什么结果只输出了三个
A1: Symbol作为键时,无法被遍历器遍历, 只能通过特定函数获取 Object.getOwnPropertySymbols(b)
同时因为{c:3}、{e:4}同时被转换成String -> '[object String]'存储, 所以只有三个输出
标题:忽略的知识点-Object key
作者:hugh0524
地址:https://blog.uproject.cn/articles/2019/07/04/1562205712090.html
0 0