2013-06-14 16 views
8

Ich möchte ein Objekt, um einen Wert in einem numerischen Kontext und eine vollständig andere in einem Zeichenfolgekontext zurückzugeben. Folgendes funktioniert nicht.Make toPrimitive Konvertierung hängt vom Kontext ab

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

große Frage! – Alnitak

+1

eigentlich die Antworten auf die andere Frage ziemlich beides _why_ erklären, und auch, warum es keine _how_. die einzigen Arbeitsarounds zu sein scheinen zu schreiben 'console.log ("hi" + String (foo)) 'oder benutzen' foo.toString() ' – Alnitak

+0

Werfen Sie einen Blick auf [diese Frage auch] (http://stackoverflow.com/questions/14330084/javascript-variable-and-the-same-variable-also-be-an-object). In Bezug auf die Objektverweise verhält es sich ähnlich wie bei bestimmten Typen. –

Antwort

3

Für den Verkettungsoperator insbesondere gibt es keine Möglichkeit die Operanden zu zwingen, so behandelt, als Strings werden, erfordert die Sprache, die sie auf primitive Werte umgewandelt werden (dh .valueOf().

Der einzige Arbeitsarounds erscheinen um eine explizite Umwandlung mit String(foo) oder foo.toString()

Verwandte Themen