如何确定是否使用对象文字或对象构造函数调用创建了对象?

| 更具体地说,您如何确定某个对象是否使用文字创建?
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中的对象文字,但是它不能回答我的问题。     
已邀请:
首先,这两行之间的区别:
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\"
但是,对于对象和功能,两者之间的区别是:
var o1 = new Object();
var o2 = {};
...仅在语法上。
o1
o2
具有相同的
prototype
和相同的
constructor
,使它们在运行时无法区分。     

要回复问题请先登录注册