1

より具体的には、特定のオブジェクトがリテラルを使用して作成されたかどうかをどのように判断しますか?

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

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

var f1 = new Function();
var f2 = function(){}; // Literal

明らかに、上記の 2 つを比較すると、たとえば次のようになります。

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

alert(o1 == o2);
alert(o1 === o2);

alert(typeof o1);
alert(typeof o2);

... 最初の 2 つのアラートが表示さfalseれ、最後の 2 つのアラートが表示されます[Object object]

たとえば、これをやりたい場合は次のようにします。

function isLiteral(obj, type) {
    // ...
}

...これを行うにはどうすればよいですか?

オブジェクトがJavascriptのオブジェクトリテラルであるかどうかを判断する方法を調べましたか? 、しかし、それは私の質問には答えません。

4

1 に答える 1

5

まず、これらの 2 つの行の違い:

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

...そして、これら2行の違い:

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

...2 つの異なる概念です。

1 つ目はプリミティブ値objectの違いですが、2 つ目は同じものに対する異なる構文です。


文字列、数値、ブール値はプリミティブ値であり、オブジェクトではありませんが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、実行時にそれらを区別できません。

于 2011-04-20T23:27:23.630 に答える