原始值被称为单例的现象是什么?
What is the phenomenon of primitive values being singletons called?
根据我对JavaScript(以及Ruby和Python)的理解,在任何给定时间,内存中都只存在给定原始值的单个实例。例如,如果实例化一个数字,则会在内存中创建该数字。重新实例化该数字的任何其他变量实际上都将引用内存中已创建的相同数字。这可以通过以下示例进行说明:
var x = 5;
var y = 5;
Object.is(x, y);
>>>true
原始值被单例的现象叫什么?
你的测试有缺陷。 当要Object.is()
的两个参数都是数字时,它将返回两个参数的值的比较。 这不是对两个变量是否由同一物理内存表示的测试。
您可以在 MDN 上阅读此处,了解当两个参数都是数字时比较的工作原理。 您还可以在同一页面上查看填充代码。
如果你想看到 Object.is()
的实际 ECMAScript 规范,你可以在这里阅读。
在该规范中,Object.is()
使用SameValue(x,y)
记录为以下步骤序列:
19.1.2.10 Object.is ( 值 1, 值 2 )
当使用参数值 1 和值 2 调用 is 函数时 将采取以下步骤:
返回 SameValue(值 1, 值 2)。
这是SameValue()
部分:
7.2.9 相同值(x, y)
内部比较抽象操作 SameValue(x, y),其中 x 和 y 是 ECMAScript 语言的值,产生真或假。这样的比较是 执行如下:
- ReturnIfAbrupt(x).
- ReturnIfAbrupt(y).
- 如果 Type(x) 与 Type(y) 不同,则返回 false。
- 如果 Type(x) 是"未定义",则返回 true。
- 如果 Type(x) 为 Null,则返回 true。
- 如果 Type(x) 是数字,则 一个。如果 x 是 NaN,y 是 NaN,则返回 true。 b.如果 x 为 +0,y 为 -0,则返回 false。 c.如果 x 为 -0,y 为 +0,则返回 false。 d.如果 x 与 y 的数值相同,则返回 true。 e. 返回假值。
- 如果 Type(x) 是字符串,则 一个。如果 x 和 y 是完全相同的代码单元序列(长度相同 和相应索引处的相同代码单元)返回 true; 否则,返回 false。
- 如果 Type(x) 是布尔值,则 一个。如果 x 和 y 都为真或均为假,则返回 true;否则 返回假。
- 如果 Type(x) 是符号,则 一个。如果 x 和 y 都是相同的符号值,则返回 true;否则 返回假。
- 如果 x 和 y 是相同的对象值,则返回 true。否则,返回 false。
您可以看到,步骤 6 是当 x 和 y 都是数字时发挥作用的步骤。 此外,您可以看到,对于字符串,比较是看到 x 和 y 包含相同的字符,而不是它们确实是相同的字符串对象。
好吧,基元值不是对象(根据定义)。因此,它们没有标识,并且不是单例对象。它们只是不可变的值。由于JavaScript不是一种以内存为中心的语言,并且不允许引用(指针?)原始值,因此无法区分它们。
- 这是什么 ==- javascript 运算符
- 我的单元测试选项是什么
- 打破承诺链的好方法是什么
- 当一个模型在骨干关系中被销毁时,销毁相关模型的最佳方法是什么?
- 根据DOM,HTML元素的开始和结束标记之间的内容被称为属性.这个房产的名字是什么
- 原始值被称为单例的现象是什么?
- 什么被认为是在节点模块中共享“全局”变量的好方法
- JQuery/Javascript - valueCommit 事件到底是什么,它在什么时候被调用
- 是什么导致整个脚本块被禁用
- RGB的范围被认为是“什么”;蓝色”;
- 当应用程序在firefox操作系统手机中从后台启动/打开时,javascript/window事件被称为什么
- 是什么决定了“;成功;或“;错误“;函数被调用
- 检查数据集是否被更改(添加/编辑,删除记录)的最佳解决方案是什么?
- 我被要求在没有用户名和密码的情况下执行身份验证,我的选择是什么?
- 在jQuery 1.7之后,live()和bind()被弃用的原因是什么?
- Facebook的Flux是用什么语言编写的,它是如何被翻译成JavaScript的?
- 如果试图退出,通知用户页面已被修改,这是什么技术?
- 如果被窗口打开,新窗口的属性是什么?打开功能
- JSON、HTML:称为2001-07-26T20:52:54Z的时间格式是什么?
- 我的页面加载被Chrome状态冻结“;正在等待api.mixpanel.com“-这是什么,我该如何避免