2013-06-14 5 views
8

オブジェクトが数値コンテキストでは1つの値を返し、文字列コンテキストでは全く異なるものを返すようにします。以下は動作しません。特に、連結演算子の文字列として処理されるオペランドを強制する方法がないためtoPrimitive変換はコンテキストに依存します

foo = { 
    toString: function() { return "string" }, 
    valueOf: function() { return 123 } 
} 

console.log(foo * 2)  // got 246, fine 
console.log("hi " + foo) // got "hi 123", want "hi string" 
+2

偉大な質問を使用して明示的にキャストする! – Alnitak

+1

は実際にはかなり多くの他の質問への答えは、両方の_why_を説明しませんし、また、なぜ何の_how_はありません。唯一の回避策は 'にconsole.logを書くことのように見えます( "hi" + String(foo)) 'を使うか、または' foo.toString() ' – Alnitak

+0

[この質問もあります](http://stackoverflow.com/questions/14330084/javascript-variable-and-the-same-variable-also-be-an-object)これは、特定のタイプとしてオブジェクト参照の観点から同じ行に沿っています。 –

答えて

3

、言語は、それらがプリミティブ値(すなわち.valueOf()に変換されることを必要とする。

のみ回避策が表示されString(foo)またはfoo.toString()

関連する問題