Object对象键值的输出循序到底如何排列的?

news2024/11/28 16:46:27

1.日常摸鱼看八股

今天又是复习八股文的一天,发现还是彻底懂得原理才好和面试官吹牛批呀。
接着来看看我chat大宝贝的回答:
在现代浏览器中,Object 对象的键值输出循序是比较稳定的,通常是按照如下顺序输出:

  1. 所有的数字键按照升序排列,例如:“1”、“2”、“10”;
  2. 所有的字符串键按照添加顺序排列,例如:“foo”、“bar”、“baz”;
  3. 所有的 Symbol 类型键按照添加顺序排列。

需要注意的是,上述顺序是比较稳定的,但并不能保证在所有浏览器和所有情况下都是如此。因此,在实际开发中,不要依赖于对象的键值输出顺序,以免出现意料之外的错误。如果需要保证键值对的顺序,建议使用 ES6 中引入的 Map 对象或者使用数组来保存键值对,然后按照需求进行排序。
这个措辞我给9分,因为6翻了!

2.实践才是检验真理的唯一标准

//因为symbol特性是唯一的,所以不能直接在对象内添加,必须通过方括号语法
const sym1 = Symbol(6);

const myObj = {
    key2: "value1",
    key1: "value2",
    2:"222",
    1:"111",
    [sym1] : "第一个6", //或者 [Symbol(6)] : "第一个6"
    key3: "value3",
};

myObj.sym1 = "第一个6"; //点语法会把symbol类型当作字符串处理,有帮你们复习了一个小🐥巧,感动不?

const sym2 = Symbol(66);
myObj[sym2] = "第二个6";


Object.defineProperty(myObj, 'not-enum', { //添加一个键名为not-enum的不可枚举类型
    value: 'value',
    enumerable: false
});
myObj.key4 = "value4" // 添加一个字符串类型的键值看其和不可枚举的字符串键值的排列排序


const sym3 = Symbol(666);
Object.defineProperty(myObj, sym3, {
    value: '第三个6-不可枚举',
    enumerable: false
});
const names = Object.getOwnPropertyNames(myObj); //  JavaScript 内置函数,用于获取一个对象的所有属性名(包括不可枚举属性)
const symbols = Object.getOwnPropertySymbols(myObj); // 返回对象自身的所有 Symbol 属性的方法
const properties = [...names, ...symbols];
console.log(properties);

node环境

image.png

谷歌浏览器环境:

image.png

Edge浏览器

image.png

3.个人补充

大家有没有注意到其实Object是优先输出键值是数字的,然后到字符串键,最后到symbol类型的键。
关于属性是不可枚举的数据: 尽管它不可枚举,但是它属于数字,字符串、symbol其中一种的。因此会根据他们的类型来排序。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/402208.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

打怪升级之如何发送HEX进制的数据出去

Hex数据老大难 不少人都困扰于如何将电脑中读取到的string类型的数据变成整形发送出去。一半来说,不论你调用的通信方式是串口的还是网络的,亦或是PCIE的,其在电脑端的实际情况都是以系统API的形式呈现的。而系统API函数提供的接口&#xff…

项目实战典型案例23——-注册上nacos上的部分服务总是出现频繁掉线的情况

注册上nacos上的部分服务总是出现频繁掉线的情况一:背景介绍二:思路&方案解决问题过程涉及到的知识nacos服务注册和服务发现一:背景介绍 spring cloud项目通过nacos作为服务中心和配置中心,出现的问题是其中几个服务总是出现…

【电子通识】案例:从YS-CH341T USB转IIC和UART模块使用学习如何找资料

最近在调一个充电芯片,要用到IIC与充电芯片通信来读取和写入充电芯片寄存器,控制充电芯片的各种参数。从以前老员工那里捡到一个这样的模块,模块背面写了YS-CH341T。看着有IIC通信的样子,所以先在网上找一下资料。首先先在网上找到…

npm安装依赖包:405 Method Not Allowed...

运用npm安装依赖包时报错,错误如下。 解决思路: 关注到错误信息上写明了 Method Not Allowed,其后注明了 GET请求以及一个url,说明极有可能是不允许向这个路由发送GET请求; 在浏览器中尝试打开这个地址,结…

在分析了共50亿美元的加密融资之后,我们发现了这些

对加密市场嗅觉敏锐的玩家来说,市场中项目融资是不得不关注的选项,不少优质项目拿到了巨额融资之后,被大家所关注,在20-21年期间,行业内也出现了不少一级机构,布局早期项目,获取时代红利已经成为…

圆桌(满足客人空座需求,合理安排客人入座圆桌,准备最少的椅子)

CSDN周赛第30期第四题算法解析。 (本文获得CSDN质量评分【91】)【学习的细节是欢悦的历程】Python 官网:https://www.python.org/ Free:大咖免费“圣经”教程《 python 完全自学教程》,不仅仅是基础那么简单…… 地址:https://lq…

什么是业务运营?关键组成部分有哪些?

企业领导者使用收入运营和智能软件等技术来分析买家的不同接触点。这些见解决定了客户互动的成败,从而改善了业务运营,从而带来了成功。 什么是业务运营? 业务运营包括企业为保持盈利而执行的一系列日常任务。虽然这些任务可能因业务类型或行…

主辅助服务市场出清模型研究【旋转备用】(Matlab代码实现)

👨‍🎓个人主页:研学社的博客💥💥💞💞欢迎来到本博客❤️❤️💥💥🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密…

【已解决】Python的坑:os.system()运行带有空格的长路径和双引号参数有bug

在Python代码里运行DOS命令,可以使用os库的os.system()函数。其用法很简单,需要注意的是os.system不会返回输出的结果赋予一个变量。今天我发现了一个bug:当DOS命令行带有双引号路径、双引号参数时,os.system()运行的结果总是显示…

带你认识什么是485通信

在现代工业控制系统中,常常需要实现分布式控制,而分布式控制需要实现不同设备之间的通信。其中,485通信协议是一种被广泛使用的通信协议之一。1. 介绍A. 485通信的定义485通信协议是一种串行通信协议,也被称为RS-485。它是由美国电…

300. 最长递增子序列——【Leetcode每日刷题】

300. 最长递增子序列 给你一个整数数组 nums ,找到其中最长严格递增子序列的长度。 子序列 是由数组派生而来的序列,删除(或不删除)数组中的元素而不改变其余元素的顺序。例如,[3,6,2,7] 是数组 [0,3,1,6,2,2,7] 的子…

leetcode 1648. 销售价值减少的颜色球

1648. 销售价值减少的颜色球这道题不知为何总想记录下来,思路很简单,但是实现总是出错,这也许就是要记录的原因。再一个觉得题解写的比较难以理解,所以再细致一些解析。希望可以帮到实在搞不懂的同学 思路: 目的:我们…

聚观早报|谷歌发布最大视觉语言模型;王兴投资王慧文ChatGPT项目

今日要闻:谷歌发布全球最大视觉语言模型;马斯克预计Twitter下季度现金流转正;王兴投资王慧文ChatGPT项目;美国拟明年 11 月开展载人绕月飞行;慧与科技宣布收购Athonet谷歌发布全球最大视觉语言模型 近日,来…

RocketMQ重复消费的症状以及解决方案

RocketMQ重复消费的症状以及解决方案 生产消息时重复 症状 当一条消息已被成功发送到 消费者 并完成持久化,此时出现了网络闪断或者客户端宕机,导致服务端对客户端应答失败。 如果此时 生产者 意识到消息发送失败并尝试再次发送消息,消费者…

学习 Python 之 Pygame 开发魂斗罗(十一)

学习 Python 之 Pygame 开发魂斗罗(十一)继续编写魂斗罗1. 改写主类函数中的代码顺序2. 修改玩家初始化3. 显示玩家生命值4. 设置玩家碰到敌人死亡5. 设置敌人子弹击中玩家6. 修改updatePlayerPosition()函数逻辑继续编写魂斗罗 在上次的博客学习 Pytho…

【Flutter从入门到入坑】Flutter 知识体系

学习 Flutter 需要掌握哪些知识? 终端设备越来越碎片化,需要支持的操作系统越来越多,从研发效率和维护成本综合考虑,跨平台开发一定是未来大前端的趋势,我们应该拥抱变化。而 Flutter 提供了一套彻底的移动跨平台方案…

【AlgorithmTraining】06:STL容器使用与练习(上)

STL容器的使用与练习(上) OVERVIEWSTL容器的使用与练习(上)string类1.vector动态数组:(1)vector动态一维数组:(2)vector动态二维数组:2.deque双端…

VR全景旅游,成为数字文旅破局关键!

导语:VR全景技术是一种基于虚拟现实技术的全景图像显示技术,已经在各个领域得到广泛应用。在旅游业中,VR全景技术也越来越受到重视,并逐渐成为旅游业发展的重要趋势。本文将介绍VR全景技术在旅游业中的应用场景和价值,…

【嵌入式Linux内核驱动】02_字符设备驱动

字符设备驱动 〇、基本知识 设备驱动分类 (按共性分类方便管理) 1.字符设备驱动 字符设备指那些必须按字节流传输,以串行顺序依次进行访问的设备。它们是我们日常最常见的驱动了,像鼠标、键盘、打印机、触摸屏,还有…

MATLAB——信号的采样与恢复

**题目:**已知一个连续时间信号 其中:f01HZ,取最高有限带宽频率fm5f0。分别显示原连续时间信号波形和 3种情况下抽样信号的波形。并画出它们的幅频特性曲线,并对采样后的信号进行恢复。 step1.绘制出采样信号 这部分相对简单…