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

Javascript 如何确定对象是使用对象文本还是对象构造函数调用创建的?,javascript,string-literals,object-literal,function-literal,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

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

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]

比如说,如果我想这样做:

function isLiteral(obj, type) {
    // ...
}
。。。一个人怎么做呢


我看了一下,但它没有回答我的问题。

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

var s1 = new String();
var s2 = ""; // Literal
var o1 = new Object();
var o2 = {}; // Literal
…以及这两条线之间的区别:

var s1 = new String();
var s2 = ""; // Literal
var o1 = new Object();
var o2 = {}; // Literal
…是两个不同的概念

第一个是基本值和对象之间的差异,而第二个是。。。同一事物的不同语法

字符串、数字和布尔值是基本值,不是对象,但可以使用新字符串、新数字或新布尔值包装为对象。因此,对于这些,typeof将返回不同的值:

var s1 = new String();
typeof s1; // "object"
var s2 = "";
typeof s2; // "string"
但是,对于对象和功能,以下两者之间的区别:

var o1 = new Object();
var o2 = {};
。。。仅在语法中


o1和o2都有相同的原型和相同的构造函数,这使得它们在运行时无法区分。

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

var s1 = new String();
var s2 = ""; // Literal
var o1 = new Object();
var o2 = {}; // Literal
…以及这两条线之间的区别:

var s1 = new String();
var s2 = ""; // Literal
var o1 = new Object();
var o2 = {}; // Literal
…是两个不同的概念

第一个是基本值和对象之间的差异,而第二个是。。。同一事物的不同语法

字符串、数字和布尔值是基本值,不是对象,但可以使用新字符串、新数字或新布尔值包装为对象。因此,对于这些,typeof将返回不同的值:

var s1 = new String();
typeof s1; // "object"
var s2 = "";
typeof s2; // "string"
但是,对于对象和功能,以下两者之间的区别:

var o1 = new Object();
var o2 = {};
。。。仅在语法中


o1和o2都有相同的原型和相同的构造函数,这使得它们在运行时无法区分。

您是否尝试了这个答案-如果o1={}和o2={},或者如果o1=新对象和o2=新对象,您也会得到false。Javascript检查引用是否相等。好吧,对象和对象文字之间没有区别。@Elianebing:我重新表述了我的问题,希望能有帮助。最后一件事,没有函数文字这样的东西。var f2=函数{}的RHS;是一个函数表达式,非常类似于函数声明。您是否尝试过此方法?答案-如果o1={}和o2={},或者如果o1=new Object和o2=new Object,您也会得到false。Javascript检查引用是否相等。好吧,对象和对象文字之间没有区别。@Elianebing:我重新表述了我的问题,希望能有帮助。最后一件事,没有函数文字这样的东西。var f2=函数{}的RHS;是一个函数表达式,与函数声明非常相似。此答案缺少结论。很可能,对不起,但没有区别;有没有办法判断o3是否确实是o2的新对象?@Shaz,没有,因为o2==o3@Shaz,澄清一下,o3根本不是o2的新对象。这是新游戏中棘手的一面。。。这并不一定意味着创建了一个新对象。最好解释一下,根据ECMA-262,如果o2引用了一个对象,那么new Objecto2只返回对该对象的引用。将结果指定给o3意味着o2和o3引用同一个对象。这个答案缺少一个结论。很可能,对不起,但没有区别;有没有办法判断o3是否确实是o2的新对象?@Shaz,没有,因为o2==o3@Shaz,澄清一下,o3根本不是o2的新对象。这是新游戏中棘手的一面。。。这并不一定意味着创建了一个新对象。最好解释一下,根据ECMA-262,如果o2引用了一个对象,那么new Objecto2只返回对该对象的引用。将结果指定给o3意味着o2和o3引用同一对象。