首页 > 其他分享 >关于js对象的键

关于js对象的键

时间:2023-02-16 23:11:54浏览次数:24  
标签:console log 对象 Symbol Object js symbolKey 关于 const

面试的时候,多次被问到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

相关文章

  • day11-JSON处理和HttpMessageConverter<T>
    JOSN处理和HttpMessageConverter1.JSON处理-@ResponseBody说明:在实际开发中,我们往往需要服务器返回的数据都是JSON格式。SpringMVC提供了@ResponseBody注解,用来标......
  • 如何优化 Vue.js 应用程序
    单页面应用(SPAs)当处理实时、异步数据时,可以提供丰富的、可交互的用户体验。但它们也可能很重,很臃肿,而且性能很差。在这篇文章中,我们将介绍一些前端优化技巧,以保持我们的Vue......
  • 使用 html2Canvas 与 JsPDF 生成海报和pdf文件下载等业务,解决pdf分页样式问题
    需求场景吧页面元素内容转成图片,生成一个海报保存或者上传服务器当前元素内容生成一个pdf文件完成下载到客户端,并且上传到服务器1.开发前的准备//元素转图片npm......
  • 异常对象的常用方法
    一:获取异常简单的描述信息Stringmsg=exception.getMessage();NullPointerExceptione=newNullPointerException("空指针异常");Stringmsg=e.getMessage();Sy......
  • 【技术分享】面向对象开发系列之【封装】
    封装理解封装是面向对象程序开发的基石。程序开发,最核心价值,是数据。程序其实是读取数据,操作数据,保存数据等一系列操作。那么经过良好组织过的数据,将使编程事半功倍。......
  • 关于LSI 3908卡系统盘不是sda的问题
    问题现象:3908阵列卡做RAID安装系统之后,系统盘符不为sda.问题原因:3908阵列卡VD的逻辑顺序采用倒序的规则定义VD号,因此导致先组的RAID的VD号最大,安装系统时会把VD号最大的R......
  • 与ChatGPT关于测试问题的对话
    1测试人员创造什么价值?测试人员在软件开发生命周期中扮演着非常重要的角色,他们的主要职责是确保软件在发布前达到高质量标准。以下是测试人员为软件开发和业务提供的价值......
  • C# dynamic动态对象赋值
    dynamic如果接收的是匿名对象,是无法为属性赋值的,而如果是接收的定义对象,又无法扩展字段。解决办法序列化为json字符串,然后用Dictionary反序列化,就能赋值了。也能扩展新的......
  • 002.初始话Ioc容器——基于构造方法实例化对象(Bean)
    1.三种XML实例化Bean的配置方式  1.基于构造方法实例化对象  2.基于静态工厂实例化对象  3.基于工厂实例方法实例化对象2.详细讲解  2.1  基于构造方......
  • [js函数] shallowEqual
    constisBasicType=(t:any)=>{returnt==="number"||t==="string"||t==="boolean"||t==='undefined';}/***数组和对象都能比较*@parama*@pa......