1

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

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) {
    // ...
}

......如何去做呢?

已经查看了如何确定对象是否是 Javascript 中的对象文字?,但它没有回答我的问题。

4

1 回答 1

5

首先,这两行之间的区别:

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

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

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

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

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


字符串、数字和布尔值是原始值,而不是对象,但可以使用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,使它们在运行时无法区分。

于 2011-04-20T23:27:23.630 回答