关于js对象的键

面试的时候,多次被问到Object和Map的区别,我都没答上,我以为可能问原理的可能多一些...

于是今天就仔细地看了一下Object和Map的区别。网上各文章都说Object的键只能是字符串或Symbol,那我怎么记得我之前可以使用数字作为键呢。于是我就打开控制台试了一下:

const objKey = {}
const funcKey = ()=>{}
const symbolKey = Symbol('key')

const o = {}
o['str'] = 1
o[1] = 2
o[true] = 3
o[undefined] = 4
o[null] = 5
o[NaN] = 6
o[objKey] = 7
o[funcKey] = 8
o[symbolKey] = 9

console.log(o['str'])     // 1
console.log(o[1])         // 2
console.log(o[true])      // 3
console.log(o[undefined]) // 4
console.log(o[null])      // 5
console.log(o[NaN])       // 6
console.log(o[objKey])    // 7
console.log(o[funcKey])   // 8
console.log(o[symbolKey]) // 9

console.log(Object.keys(o)) // ['1', 'str', 'true', 'undefined', 'null', 'NaN', '[object Object]', '()=>{}']

诶,这不可以用除字符串和Symbol之外的数据类型作为键的嘛。

正当我以为发现惊天秘密的时候,又看到一篇文章是这么说的:“键类型必须是String或者Symbol,如果是非String类型,会进行数据类型转换。

再看上面的Object.keys()输出,果然,键都被转为字符串了。

posted @ 2023-02-16 23:05  hdxg  阅读(123)  评论(0)    收藏  举报
// 侧边栏目录 // https://blog-static.cnblogs.com/files/douzujun/marvin.nav.my1502.css