面试的时候,多次被问到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()输出,果然,键都被转为字符串了。
标签:console,log,对象,Symbol,Object,js,symbolKey,关于,const From: https://www.cnblogs.com/hdxg/p/17128652.html