2016-04-28 2 views
7

Angenommen, ich habe eine Zeichenfolge, deren Wert bereits eine Zahl ist, z. var str = "1234" Jetzt möchte ich es in Nummer konvertieren.Warum + str ist besser als str * 1 in JS, um eine Zeichenfolge in eine Zahl zu konvertieren?

ich zwei Tricks im Internet weit so gesehen haben,

  1. Verwenden Sie die einstellige +: var num = +str
  2. Verwenden Sie den mehrfach Operator *: var num = str*1

Ich möchte wissen, was man ist im Allgemeinen besser.

Wie ich aus dem Kommentar der akzeptierten Antwort hier sah: Converting Json Results to a Date, scheint es wie *1 ist am besten zu vermeiden. Ist das wahr und was ist der Grund dafür?

+5

Für integer, parseInt() wäre besser –

+2

unären und durch Definition soll einen Wert in eine Zahl umzuwandeln, so dass es mehr semantisch korrekt ist um 1 als multipliziert wird, ein anderer führt Operand. @EricSo - parseInt() ist nur dann besser, wenn Sie speziell alle nicht-numerischen Daten oder Dezimalstellen in der Zeichenkette ignorieren wollen - ansonsten ist es * schlechter * als das unäre Plus *, weil es dieses Zeug ignoriert. – nnnnnn

Antwort

10

Weniger Operationen, im Grunde genommen.

Das unäre Plus ruft die interne Methode toNumber auf, während der Multiplikationsoperator ebenfalls toNumber aufruft und dann eine mathematische Operation ausführt.

Warum die zusätzlichen Schritte?

http://www.ecma-international.org/ecma-262/6.0/#sec-unary-plus-operator

http://www.ecma-international.org/ecma-262/6.0/#sec-applying-the-mul-operator

+0

Danke. Klare und klare Antwort, und lassen Sie mich wissen, dass + ist überhaupt nicht hacky..it ist in der Tat die offizielle Absicht, die Arbeit zu tun – shole

+1

Ich würde nicht sagen, es ist die "offizielle Absicht", da es stark typisierte Sprachen, die das implementieren unäres '+'. Wenn Sie jedoch eine bestimmte JavaScript-Teilmenge namens "ASM" verwenden, wird das '+' offiziell zum Definieren einer Gleitkommazahl und ' | verwendet 0 'wird verwendet, um 32-Bit-Ganzzahlen zu definieren. –

Verwandte Themen