gpt4 book ai didi

javascript - 如何确定对象是使用对象字面量还是对象构造函数调用创建的?

转载 作者:行者123 更新时间:2023-11-30 09:05:07 26 4
gpt4 key购买 nike

更具体地说,您将如何确定某个对象是否是使用文字创建的?

var s1 = new String();
var s2 = ""; // Literal

var o1 = new Object();
var o2 = {}; // Literal

var f1 = new Function();
var f2 = function(){}; // Literal

显然,如果你比较上面的任何两个,例如:

var o1 = new Object();
var o2 = {};

alert(o1 == o2);
alert(o1 === o2);

alert(typeof o1);
alert(typeof o2);

...前两个警报将显示 false 而后两个警报将显示 [Object object]

例如,如果我想这样做:

function isLiteral(obj, type) {
// ...
}

...人们会怎么做呢?

已经看了How to determine if an object is an object literal in Javascript? ,但它没有回答我的问题。

最佳答案

首先,这两行的区别:

var s1 = new String();
var s2 = ""; // Literal

...以及这两行之间的区别:

var o1 = new Object();
var o2 = {}; // Literal

...是两个不同的概念。

第一个是原始值对象之间的区别,而第二个是...同一事物的不同语法。


字符串、数字和 bool 值是原始值,不是对象,但可以使用new String() 包装为对象,new Number()new Boolean()。所以对于这些,typeof 将返回不同的值:

var s1 = new String();
typeof s1; // "object"
var s2 = "";
typeof s2; // "string"

但是,对于 Object 和 Function,它们之间的区别:

var o1 = new Object();
var o2 = {};

...仅在语法上。

o1o2 都有相同的prototype 和相同的constructor,使得它们在运行时无法区分.

关于javascript - 如何确定对象是使用对象字面量还是对象构造函数调用创建的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5737726/

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