object property order

news2024/10/5 2:10:37

起因

使用 prosemirror 时,想要取 schema 实例设置的 nodes

const mySchema = new Schema({
  nodes: {
    doc: {},
    customBlock: {},
    text: {},
  },
  marks: {},
});

在浏览器控制台查看 mySchema,发现两个地方有nodes:

  • mySchema.nodes 是普通对象,有三个属性,就是我想要获取的 nodes。但是我设置时顺序是 doc - customBlock - text,而控制台显示的顺序是 customBlock - doc -text,不一致
  • mySchema.spec.nodes 是一个 OrderedMap 对象

好奇用意所以研究了一下

object property order

es5: 不规定属性顺序

es2015: 规定对象属性顺序,但不要求老操作符遵守

While ES6 / ES2015 adds property order, it does not require for-in, Object.keys, or JSON.stringify to follow that order, due to legacy compatibility concerns.

Other operations, like Object.getOwnPropertyNames, Object.getOwnPropertySymbols, Object.defineProperties, and Reflect.ownKeys do follow the following order for ordinary objects:

  • Integer indices (if applicable), in ascending order.
  • Other string keys (if applicable), in property creation order.
  • Symbol keys (if applicable), in property creation order.

es2020: 要求老操作符也要遵守这个顺序

As of ES2020, even older operations like for-in and Object.keys are required to follow property order. That doesn’t change the fact that using property order for fundamental program logic probably isn’t a good idea, since the order for non-integer-index properties depends on when the properties were created.

按照最新规定,对象属性是有顺序的,但并不保证是插入顺序!而且你无法得知用户使用的浏览器是否遵守最新规定。
所以当顺序很重要的时候,就不要用 object!可以用数组或者 Map(Map 会记住 key 的插入顺序)


在浏览器控制台中查看对象

var obj = {
    b:'',
    a:''
}

打印obj,显示的顺序正确:

在这里插入图片描述

但是点击箭头查看详情时,会看到详情里展示顺序变了:

在这里插入图片描述
应该是浏览器为了开发者查看详情方便,展示的时候重新排序了。

多加几个属性测试一下,也是如此:

在这里插入图片描述

结论:在浏览器控制台中,点击按钮查看对象详情时,显示的并不是对象属性的真正顺序!
(以前没想过这个问题,觉得控制台里展现的就是数据最真实的、原始的样子。发现了个盲区,好玩,但也要警惕)


说回 prosemirror

在 prosemirror scheam 中,nodes 的先后顺序很重要(顺序控制节点的优先级)

不知道出于什么原因,没有用 array 或者 Map 存储数据,而用了 object。这时为了保证顺序,就用 orderedMap了


参考:stackoverflow - Does ES6 introduce a well-defined order of enumeration for object properties?

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

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

相关文章

某医疗机构:建立S-SDLC安全开发流程,保障医疗前沿科技应用高质量发展

某医疗机构是头部资本集团旗下专注大健康领域战略性投资与运营的实业公司,市场规模超300亿。该医疗机构已完成数字赋能,形成了标准化、专业化、数字化的疾病和健康管理体系,将进一步规划战略方向,为人工智能纳米技术、高温超导、生…

【分享】小红书采集图片下载到本地

前面我们把图片链接都存到了excel里,现在想要把图片都下载到本地文件夹 下面是实现的python代码 图片链接存在第三列单元格,并且是多个图片\n分割的,现在把他们全部下载到本地 import pandas as pd import requestsdf pd.read_excel(&quo…

关于scanf和printf的格式控制修饰符

关于scanf和printf的格式控制修饰符

input时间控件选择时禁用某个日期之前或之后

【版权所有,文章允许转载,但须以链接方式注明源地址,否则追究法律责任】【创作不易,点个赞就是对我最大的支持】 前言 仅作为学习笔记,供大家参考 总结的不错的话,记得点赞收藏关注哦! 目录 …

应届生写简历不如AI?HR招人到底看什么

又双叒创新高! 据悉,2024届高校毕业生人数预计有 1187 万人,比2023届将近多30万人!相当于冰岛一个国家的人口啊! 毋庸置疑,大学生的就业压力只增无减。也因此,2024届的应届生们为了博HR关注&…

2023年中国艺人管理行业发展历程及趋势分析:未来市场规模还会不断增加[图]

艺人管理行业是指一系列涉及艺人职业发展、形象管理、工作安排、合同管理、媒体宣传策划、财务管理等方面的专业服务和活动。它旨在协助艺人实现个人职业目标,提升艺人在娱乐行业中的知名度、影响力和经济效益,维持艺人形象的稳定和提高其工作的效率和质…

公众号营业执照注销被冻结了,怎么迁移?

公众号迁移后原来内容还在么?通过公众号迁移,可以实现这些目的:主体变更、开通留言功能、多号合并、订阅号升级为服务号、服务号转为订阅号。公众号迁移流程:①办理公证;②提交迁移申请;③第三方审核&#…

json库的基本使用

目录 1 将python变量转变为json变量 dumps() 2 将json变量转换为python变量 loads() 3 将键值对存储为json文件 dump() 4 读取json文件 前后端常用json进行信息的交互,不转json会有收不到的情况 我们先看一下转换成json的服务 发现该有的信息都有&#x…

实战指南:使用 kube-prometheus-stack 监控 K3s 集群

作者简介 王海龙,Rancher 中国社区技术经理,Linux Foundation APAC Evangelist,负责 Rancher 中国技术社区的维护和运营。拥有 9 年的云计算领域经验,经历了 OpenStack 到 Kubernetes 的技术变革,无论底层操作系统 Lin…

【JavaEE初阶】 死锁详解

文章目录 🎋死锁的概念🌳死锁的三个典型情况🚩一个线程一把锁🚩两个线程两把锁🚩n个线程m把锁(哲学家就餐问题) 🎄如何破除死锁🚩破坏循环等待 本文重点: 死锁咋回事 死锁的三个典型…

2023年中国石油催化裂化剂行业供需、竞争格局及市场规模分析[图]

催化裂化是石油炼制过程之一,是在热和催化剂的作用下使重质油发生裂化反应,转变为裂化气、汽油和柴油等的过程。中国原油加工量在这一阶段逐年提升,2022年国内原油加工量67589.7万吨。 2016-2022年中国原油加工量情况 资料来源:国…

learn编码器

目录 1、编码器的作用 2、编码器的结构图 3、代码实现如下 1、编码器的作用 编码器用于对输入进行指定的特征提取的过程,也称为编码,由 N 个编码器层堆叠而成 2、编码器的结构图 3、代码实现如下 import numpy as np from torch.autograd import Vari…

RabbitMQ开启消息跟踪日志(trace)

Trace 是Rabbitmq用于记录每一次发送的消息,方便使用Rabbitmq的开发者调试、排错。 1、启动Tracing插件 在RabbitMQ中默认是关闭的,需手动开启。此处rabbitMQ是使用docker部署的 ## 进入rabbitMq中 docker exec -it rabbitmq1 bash ## 启动日志插件 r…

基于图像的照明(IBL)简明教程

基于图像的照明基本上将图像中的所有像素视为光源。 通常,从全景高动态范围 (HDR) 图像创建的环境贴图(通常是立方体贴图)将用作纹理获取的源。 推荐:用 NSDT编辑器 快速搭建可编程3D场景 假设阴影物体是不透明的,我们…

lazada商品评论数据接口,lazada商品评论API接口,lazadaAPI接口

lazada商品评论数据接口可以按照以下步骤获取: 注册Lazada开发者账号,创建API密钥和访问令牌。调用Lazada Open API中的Product Review API,提供商品的SKU或Seller SKU参数,即可获取该商品的所有评论。 Lazada商品评论数据接口封…

【Spring Boot从入门到实战】RabbitMQ消息队列 —— RabbitMQ入门

💠一名热衷于分享知识的程序员 💠乐于在CSDN上与广大开发者交流学习。 💠希望通过每一次学习,让更多读者了解我 💠也希望能结识更多志同道合的朋友。 💠将继续努力,不断提升自己的专业技能,创造更多价值。🌿欢迎来到@"衍生星球"的CSDN博文🌿 🍁本…

Web安全教程(超详细!从入门到精通!零基础可学!)

Web简介: Web 即全球广域网,也称为万维网,它是一种基于超文本和HTTP的、全球性的、动态交互和浏览信息提供了图形化的、易于访问的直观界面,其中的文档及超级链接将Internet上的信息节点组织成一个互为关联的网状结构。 万维网常…

2023年中国数控系统市场发展历程及趋势分析:数控系统市场规模将持续扩大[图]

数控系统是根据计算机存储器中存储的控制程序,执行部分或全部数值控制功能,并配有接口电路和伺服驱动装置的专用计算机系统。通过利用数字、文字和符号组成的数字指令来实现一台或多台机械设备动作控制,它所控制的通常是位置、角度、速度等机…

了解5个区别,FPmarkets用烛台和Renko图实现交易翻倍

很多投资者不知道日本烛台图表和Renko图表的区别,在交易中出现好的机会而把握不住,今天FPmarkets就和投资者一起了解烛台图表和Renko图表的区别,在今后的交易中能第一时间抓住机会,从而盈利。 首先,Renko图表是平滑的…

Linux系统卡顿处理记录(Debian)

问题现象描述 现象linux操作系统卡顿(就是很慢),但是系统任然能够使用。 文章一步步的排查并且定位问题。 排查步骤 1. 使用top命令查看CPU是否占用过高。(未发现)排除问题 2. 使用df -h查看硬盘是否被占满。&#…