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

时间:2011-04-20 23:17:02

标签: javascript string-literals object-literal function-literal

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

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?,但它没有回答我的问题。

1 个答案:

答案 0 :(得分:5)

首先,这两行之间存在差异:

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

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

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

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

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


字符串,数字和布尔值是原始值,而不是对象,但可以使用new String()new Number()或{{包装为对象1}}。因此,对于这些,new Boolean()将返回不同的值:

typeof

但是,对于Object和Function,区别在于:

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

...仅限语法。

var o1 = new Object(); var o2 = {}; o1都具有相同的o2和相同的prototype,这使得它们在运行时无法区分。