更具体地说,您如何确定某个对象是否是使用文字创建的?
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?,但它没有回答我的问题。
答案 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
,这使得它们在运行时无法区分。