2

次のコードの出力は次のようになります。

console.log({}.valueOf()+15);//Output:[object Object]15

.valueOf()メソッドからの戻り値は上記のコードの文字列になりますか、それとも.toString()の結果が同じになるため、単にオブジェクトになりますが、このメソッドでは戻り値はとにかく文字列になります.どうなるか知りたかっただけです上記のコードで.valueOf()が返す値の型。戻り値が文字列の場合、他のオブジェクトの場合、 valueOf()メソッドは[new String("abc")]を除く文字列値を返します。

4

3 に答える 3

3

valueOfプリミティブ値を返します。プリミティブ値の正確なタイプは、オブジェクトによって異なります。

デモンストレーションするには:

typeof Number(0).valueOf(); // number
typeof Boolean(0).valueOf(); // boolean

ポイントは、それが返すものは何でもプリミティブな値だということです。toString一方、常に文字列を返します。

の場合、ルート以外にメソッド{}はなく、これは と同じで、形式の文字列を返します。文字列であると、 と連結されます。valueOfObject.prototype.valueOfObject.prototype.toString[object Constructor]15

于 2013-04-21T17:16:55.567 に答える
3

プレーン オブジェクトの.valueOf()は同じオブジェクトになります。(これはその方法と同じではありません.toString()。)

var o = {};

typeof o.valueOf(); // "object"

o === o.valueOf(); // true

+演算子は、最初のオペランドに数値が使用されていないことを認識するため、加算の代わりに文字列連結を行い、両方のオペランドの値を呼び出します.toString()

それがあなたが得る理由です[object Object]15


これは、出力を変更することでテストできtoString()ます。

var o = {};
o.toString = function() { return "foobar" }

o.toString(); // "foobar"

o + 15;           // "foobar15"
o.valueOf() + 15; // "foobar15"
于 2013-04-21T17:18:33.127 に答える
0

JS でオブジェクトの型を取得するには、typeof関数を使用できます。

typeof({}) // outputs 'object'
typeof({}.valueOf()) // outputs 'object'
typeof({}.valueOf()+15) // outputs 'string'

これは、15 を「追加」しようとしたときに値の強制が行われていることを示しており、代わりに文字列の連結として解釈されます。

于 2013-04-21T17:18:07.427 に答える