- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我已经使用以下代码检查了包装的符号对象。
const symObj = Object(sym);
const symObjNew = new Object(sym);
// I can see no difference between symObj and symObjNew
console.log(`typeof symObj === 'object' is ${typeof symObj === 'object'}`); // true
console.log(`typeof symObjNew === 'object' is ${typeof symObjNew === 'object'}`); // true
symObj
和
symObjNew
在开发工具中使用
node --inspect-brk
.我看不出它们之间有什么区别。 BigInt 也是如此。
最佳答案
TL;博士new Object(realthing)
之间没有区别和 Object(realthing)
.他们做同样的事情。
更长的答案
对于 JS,阅读规范总是一个好主意,尽管很难弄清楚其中的含义。所以,让我们深入研究一下:在这种情况下,我们想要 the rules for how Object() works :
19.1.1The Object Constructor
The Object constructor:
- is the intrinsic object %Object%.
- is the initial value of the Object property of the global object.
- creates a new ordinary object when called as a constructor.
- performs a type conversion when called as a function rather than as a constructor.
- is designed to be subclassable. It may be used as the value of an extends clause of a class definition.
Object(sym)
, 和
new Object(sym)
.
Object(sym)
会发生什么?
19.1.1.1 Object([ value ])
When the Object function is called with optional argument value, the following steps are taken:
- If NewTarget is neither undefined nor the active function, then Return ? OrdinaryCreateFromConstructor(NewTarget, "%ObjectPrototype%").
- If value is null, undefined or not supplied, return ObjectCreate(%ObjectPrototype%).
- Return ! ToObject(value).
?
和
!
这里不是“代码”,它们是规范语法。
!
表示“此操作将始终返回
a normal value 而
?
可能返回异常值)
new
,所以步骤 1 不适用。该值不是空值,因此第 2 步不适用,我们最终执行第 3 步:我们执行类型转换,因此我们最终得到一个新对象,
typeof
现在会说
"object"
,不管以前是什么,但将原始数据保留为值。
new Object(sym)
会发生什么?
new
这一次,所以我们可能期望第 1 步开始:毕竟,有一个
NewTarget
(根据定义:我们使用了
new
所以有一个
NewTarget
),但结果是
NewTarget
是
Object
函数本身,使
NewTarget
事件功能,因此步骤 1a 不会启动。
Object(sym)
和
new Object(sym)
做完全相同的事情,只是出于微妙的不同原因。
7.1.13ToObject ( argument )
The abstract operation ToObject converts argument to a value of type Object according to Table 12:
Undefined
Throw a TypeError exception.Null
Throw a TypeError exception.Boolean
Return a new Boolean object whose [[BooleanData]] internal slot is set to argument. See 19.3 for a description of Boolean objects.Number
Return a new Number object whose [[NumberData]] internal slot is set to argument. See 20.1 for a description of Number objects.String
Return a new String object whose [[StringData]] internal slot is set to argument. See 21.1 for a description of String objects.Symbol
Return a new Symbol object whose [[SymbolData]] internal slot is set to argument. See 19.4 for a description of Symbol objects.Object
Return argument.
Object(sym)
当然不是这样。 ,那么它会发生什么?
type
设置为
object
(不管输入值的类型是什么),并且这个新对象的原型(prototype)将被设置为匹配输入值的原型(prototype)。然后新对象的内部值从被转换的输入值中复制过来。
typeof
对于测试“事物是什么”毫无用处。
typeof
只会告诉你
the basic type of something .因此,它只能给你六个答案:
typeof
运算符不会告诉您最具体的类型是什么,而是告诉您最通用的类型是什么。
thing.constructor.name
找出实际用于构建您正在检查的东西的构造函数,或使用
thing.__proto__
获取对该类型的引用。或者,如果您已经拥有该类型,并且只需要测试“事物是否为 ...”,请使用
instanceof运算符(operator):
> typeof 3
"number"
> typeof Object(3)
"object"
> Object(3).constructor.name
"Number"
> Object(3).__proto__
Number { 0 }
> Object(3) instanceof Number
true
关于javascript - 在 JavaScript 中使用 "new"关键字创建包装的 BigInt 或 Symbol 有区别吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62155111/
正在尝试创建一个 python 包。似乎有效,但我收到警告。我的 setup.py 是: #! /usr/bin/env python from distutils.core import setup
我导入了一个数据类型 X ,定义为 data X a = X a 在本地,我定义了一个通用量化的数据类型,Y type Y = forall a. X a 现在我需要定义两个函数, toY 和 fro
我似乎无法让编译器让我包装 Tokio AsyncRead: use std::io::Result; use core::pin::Pin; use core::task::{Context, Po
我有两个函数“a”和“b”。当用户上传文件时,“b”被调用。 “b”重命名文件并返回新文件名。之后应该编辑该文件。像这样: def a(): edits file def b(): r
我使用 Entity Framework 作为我的 ORM,我的每个类都实现了一个接口(interface),该接口(interface)基本上表示表结构(每个字段一个只读属性)。这些接口(inter
有没有办法打开一个程序,通常会打开一个新的jframe,进入一个现有的jframe? 这里是解释,我下载了一个java游戏,其中一个是反射游戏,它在一个jframe中打开,框架内有一堆子面板,我想要做
我想要下面的布局 | AA BBBBBBB | 除非没有足够的空间,在这种情况下 | AA | | BBBBBBB | 在这种情况下,A 是复选框,B 是复选框旁边的 Text
我正在尝试以不同的方式包装我的网站,以便将背景分为 2 部分。灰色部分是主要背景,还有白色部分,它较小并包装主要内容。 基本上我想要this看起来像this . 我不太确定如何添加图像来创建阴影效果,
我正在使用 : 读取整数文件 int len = (int)(new File(file).length()); FileInputStream fis = new FileInputStream(f
我使用 maven 和 OpenJDK 1.8 打包了一个 JavaFX 应用程序我的 pom.xml 中的相关部分: maven-assembly-plugin
我正在使用两个不同的 ItemsControl 来生成一个按钮列表。
我有一个情况,有一个变量会很方便,to , 可以是 TimerOutput或 nothing .我有兴趣提供一个采用与 @timeit 相同参数的宏来自 TimerOutputs(例如 @timeit
我正在尝试包装一个名为 content 的 div与另一个具有不同背景的 div。 但是,当将“margin-top”与 content 一起使用时div,似乎包装 DIV 获得了边距顶部而不是 co
文档不清楚,它似乎允许包装 dll 和 csproj 以在 Asp.Net Core 5 应用程序中使用。它是否允许您在 .Net Core 5 网站中使用针对 .Net Framework 4.6
我被要求开发一个层,该层将充当通用总线,而不直接引用 NServiceBus。到目前为止,由于支持不引人注目的消息,这并不太难。除了现在,我被要求为 IHandleMessages 提供我们自己的定义
我正在尝试包装 getServersideProps使用身份验证处理程序函数,但不断收到此错误:TypeError: getServerSideProps is not a function我的包装看
我有一个项目,它在特定位置(不是/src/resources)包含资源(模板文件)。我希望在运行 package-bin 时将这些资源打包。 我看到了 package-options 和 packag
我正在寻找打印从一系列对象中绘制的 div。我可以通过使用下面的管道语法来实现这一点。 each i, key in faq if (key == 0) |
我在 Meteor.js“main.js - Server”中有这个方法。 Meteor.methods({ messageSent: function (message) { var a
我注意到,如果我的自定义Polymer 1.x元素的宽度比纸张输入元素上的验证错误消息的宽度窄,那么错误将超出自定义元素的右边界。参见下图: 有没有一种机制可以防止溢出,例如在到达自定义元素的边界时自
我是一名优秀的程序员,十分优秀!