gpt4 book ai didi

javascript - JavaScript 中的 new Object() 时发生了什么

转载 作者:行者123 更新时间:2023-11-29 20:52:16 25 4
gpt4 key购买 nike

只显示代码:

const a = {
age: 1
};
const b = new Object(a);
console.log(a === b); //true

我很困惑为什么结果是 true 而不是 false

最佳答案

因为这就是 Object constructor 的方式被定义为。如果你传递给它的参数是一个对象,它只返回那个对象而不是一个新的对象。 (理论上,new 创建了一个新对象,但随后被丢弃了;实际上,可以对其进行优化——参见下面的“注意”。)

Object 构造函数中的逻辑,忽略一个小细节,是:如果没有给出参数或者参数是 nullundefined , 创建并返回一个新对象;否则,返回将参数转换为对象的结果。由于您传入的参数已经是一个对象,因此该转换不必执行任何操作。

只是为了完整性:构造函数通常可以通过返回一个非null 对象来使new 返回一个现有对象而不是一个新对象。 (如果构造函数不返回任何东西——正常情况——或返回一个非对象值,如 42,则返回由 new 创建的对象。)下面是一个例子:

"use strict";

class Example1 {
constructor(arg) {
if (arg && typeof arg === "object") {
return arg;
}
}
}
const a = {};
const e1 = new Example1(a);
console.log(a === e1); // true

class Example2 {
constructor(arg) {
if (arg && typeof arg === "object") {
return arg;
}
return 42; // 42 isn't an object
}
}
const e2 = new Example2();
console.log(e2); // [object Object], not 42


注意:理论上,使用new总是创建一个新对象,然后如果构造函数返回一个不同的对象,新对象就会被丢弃。实际上,如果构造函数不访问 this,JavaScript 引擎可以自由地优化新对象的创建。

注意 2: 也许值得注意的是,永远不需要将 newObject 构造函数一起使用。 Object 是一个有点奇怪的构造函数:按照规范的定义,它完全忽略 new 创建的对象。 new Object()Object() 做同样的事情,new Object(value)Object(value)。同样,这很不寻常。

关于javascript - JavaScript 中的 new Object() 时发生了什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51319284/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com