Konvertierung von JavaScript-Zeichenfolgen und -Nummern


89

Wie kann ich in JavaScript Folgendes tun?

  1. Verketten Sie "1", "2", "3" zu "123".

  2. Konvertieren Sie "123" in 123

  3. Addiere 123 + 100 = 223

  4. Verdecken Sie 223 in "223"


42
Fast alle JavaScript-Bücher, die ich gelesen habe, befassen sich mit diesen Problemen. Aber das ist in Ordnung. Das Beantworten von Fragen ist das, worum es bei StackOverflow geht. @ Shadi Almosri - SO hat eine "Sei nicht gemein" -Regel. Ich sehe keinen Sinn darin, Leute herabzusetzen, die hier Fragen stellen, da das der Punkt des Ortes ist.
Nosredna

4
@Nosredna: Ich verstehe es vollkommen, Fragen zu stellen, ich liebe nichts weiter als sie zu beantworten, aber ich denke, die Tatsache zu zeigen, dass du es versucht hast, ist eine bessere Etikette als einfach eine Antwort zu erwarten und auch besser für eine persönliche Lernerfahrung. Nur meine Meinung, nicht gemein zu sein! :)
Shadi Almosri

1
@ Shadi, wie hätte die Frage gestellt werden sollen? Mit der Erklärung, schon nach der Antwort gesucht zu haben?
Nosredna

1
Als ich es zum ersten Mal sah, kam es mir wie eine Art Hausaufgabe vor, aber als ich es noch einmal las, dachte ich nicht, es schien, als würde jemand mit JavaScript experimentieren und unerwartete Ergebnisse erzielen und es festnageln wollen. Trotzdem frage ich mich, ob stackoverflow.com/faq so etwas wie einen Ehrenkodex für Studenten enthalten könnte. Wir sind hier eine Art globale Universität, und ich denke nicht, dass es verrückt ist, herauszufinden, was für eine Ethik dies für diesen Ort sein könnte. Oder vielleicht ist es verrückt. :-)
artlung

6
@Shadi, positiv, die Frage und Antwort sind in StackOverflow und werden hoffentlich anderen Menschen helfen. Ich sehe, dass die Leute die ganze Zeit an diesem Zeug hängen bleiben, besonders wenn sie aus Sprachen wie Java kommen. Es gibt einen Grund, warum die Leute dies immer wieder fragen - weil sie denken, sie wissen, wie Ausdrücke in JavaScript funktionieren, aber sie tun es nicht. Sie treffen Annahmen, die auf Erfahrungen außerhalb von JS beruhen. Aus diesem Grund ist es so nützlich, ein paar einfache Tests durchzuführen, indem Sie Zeichenfolgen und Zahlen hinzufügen und unäres Plus und Minus versuchen.
Nosredna

Antworten:


120

Sie möchten sich mit parseInt()und vertraut machen toString().

In Ihrem Toolkit können Sie anhand einer Variablen herausfinden, um welchen Typ es sich handelt typeof:

<script type="text/javascript">
    /**
     * print out the value and the type of the variable passed in
     */

    function printWithType(val) {
        document.write('<pre>');
        document.write(val);
        document.write(' ');
        document.writeln(typeof val);
        document.write('</pre>');
    }

    var a = "1", b = "2", c = "3", result;

    // Step (1) Concatenate "1", "2", "3" into "123"
    // - concatenation operator is just "+", as long
    //   as all the items are strings, this works
    result = a + b + c;
    printWithType(result); //123 string

    // - If they were not strings you could do
    result = a.toString() + b.toString() + c.toString();
    printWithType(result); // 123 string

    // Step (2) Convert "123" into 123
    result = parseInt(result,10);
    printWithType(result); // 123 number

    // Step (3) Add 123 + 100 = 223
    result = result + 100;
    printWithType(result); // 223 number

    // Step (4) Convert 223 into "223"
    result = result.toString(); //
    printWithType(result); // 223 string

    // If you concatenate a number with a 
    // blank string, you get a string    
    result = result + "";
    printWithType(result); //223 string
</script>

Gibt es einen bestimmten Grund, warum Sie dies in Skript-Tags einfügen?
Julix

@Julix Für Anfänger im Jahr 2009, die in eine HTML-Datei eintauchen, um ein grundlegendes Konzept zu erlernen. Wenn ich heute frisch antworten würde, könnte ich es anders machen, aber vielleicht auch nicht.
Artlung

53

Schritt (1) Verketten Sie "1", "2", "3" zu "123".

 "1" + "2" + "3"

oder

 ["1", "2", "3"].join("")

Die Join- Methode verkettet die Elemente eines Arrays zu einer Zeichenfolge und setzt das angegebene Trennzeichen zwischen die Elemente. In diesem Fall ist das "Trennzeichen" eine leere Zeichenfolge ( "").


Schritt (2) Konvertieren Sie "123" in 123

 parseInt("123")

Vor ECMAScript 5 musste der Radix für Basis 10 übergeben werden:parseInt("123", 10)


Schritt (3) Addiere 123 + 100 = 223

 123 + 100


Schritt (4) Verdecken Sie 223 in "223"

 (223).toString() 


Alles zusammen

 (parseInt("1" + "2" + "3") + 100).toString()

oder

 (parseInt(["1", "2", "3"].join("")) + 100).toString()

4
Schönes, klares Beispiel. Ein großes Lob für eine gute Form - Sie sollten immer den Radix für die parseIntFunktion angeben .
hotshot309

Das Einschließen des Radix verwirrte mich und ich blätterte zu einer anderen Antwort, wo es erklärt wurde. In einer kurzen Erklärung bearbeitet, um an der Stelle der Verwirrung zu sein.
ArtOfWarfare

@ArtOfWarfare Danke, gute Bearbeitung. Der Radix war zum Zeitpunkt dieser Antwort notwendig. In diesen Tagen kann ich ein Argument vorbringen, um es wegzulassen. Ab ES5, das von allen „modernen“ Browsern und Node.js unterstützt wird, verwendet parseInt (<a string with only 0-9>) immer die Basis 10.
Patrick McElhaney

Unterhaltsame Tatsache. In Netscape's ursprünglichem JavaScript (circa 1995) war der Standard-Radix für parseInt 8 (es sei denn, die Zeichenfolge enthielt 8 oder eine 9)
Justin Ohms

26
r = ("1"+"2"+"3")           // step1 | build string ==> "123"
r = +r                      // step2 | to number    ==> 123
r = r+100                   // step3 | +100         ==> 223
r = ""+r                    // step4 | to string    ==> "223"

//in one line
r = ""+(+("1"+"2"+"3")+100);

Vielen Dank für die schnelle Zeichenfolge ->
Zahlenkonvertierung

Wenn Sie überprüfen, ob es sich um eine Zahl handelt oder nicht, verwenden Sie parseInt (). Zum Beispiel ist parseInt ("") NaN, aber + "" ist 0!
Greene

15

Diese Fragen tauchen aufgrund des JavaScript-Typisierungssystems ständig auf. Die Leute denken, sie bekommen eine Nummer, wenn sie die Zeichenfolge einer Nummer bekommen.

Hier sind einige Dinge, die möglicherweise den Umgang von JavaScript mit Zeichenfolgen und Zahlen nutzen. Ich persönlich wünschte, JavaScript hätte ein anderes Symbol als + für die Verkettung von Zeichenfolgen verwendet.

Schritt (1) Verketten Sie "1", "2", "3" zu "123".

result = "1" + "2" + "3";

Schritt (2) Konvertieren Sie "123" in 123

result = +"123";

Schritt (3) Addiere 123 + 100 = 223

result = 123 + 100;

Schritt (4) Wandle 223 in "223" um

result = "" + 223;

Wenn Sie wissen, WARUM diese funktionieren, ist es weniger wahrscheinlich, dass Sie Probleme mit JavaScript-Ausdrücken bekommen.


3
Ich denke tatsächlich, dass dies eine extrem schlechte Praxis ist, weil es ziemlich undurchsichtig ist, was los ist. Zu wissen, dass bestimmte Operationen eine implizite Besetzung beeinflussen, ist ein Trick und gut zu wissen, aber überhaupt nicht lesbar. Kommunikation ist alles.
Annakata

1
Ich denke, es ist wichtig, diese Dinge genau zu kennen, damit Sie wissen, was passiert, wenn Sie Code lesen. Viel JavaScript ist knapp, weil es als Quelle übertragen wird und kleiner Code eine Reduzierung der Serverkosten bedeuten kann.
Nosredna

6
Sie sollten dies jedoch durch Komprimierungswerkzeuge erreichen. In dieser Form ist dies eine Optimierung zu sehr realen Wartungskosten.
Annakata

6
Das Wissen um diese Dinge würde jedoch in erster Linie dazu beitragen, die Frage zu vermeiden. Dies war ein Mangel an Wissen darüber, wie JavaScript mit Zeichenfolgen und Zahlen umgeht. Es ist eine Frage der intellektuellen Neugier. Was passiert, wenn ich einer Zeichenfolge eine Zahl hinzufüge? Wie funktioniert unary plus? Wenn Sie die Antworten nicht kennen, kennen Sie JavaScript nicht wirklich, und diese Art von Fragen wird auftauchen.
Nosredna

11

Sie können es so machen:

// step 1 
var one = "1" + "2" + "3"; // string value "123"

// step 2
var two = parseInt(one); // integer value 123

// step 3
var three = 123 + 100; // integer value 223

// step 4
var four = three.toString(); // string value "223"

16
Es wird empfohlen, den Radix-Parameter zur Funktion parseInt () hinzuzufügen. parseInt (eins, 10) stellt also sicher, dass alles, was Sie darauf werfen, nicht falsch umgesetzt wird.
Artlung

3
Einverstanden. Andernfalls werden Werte, die mit beginnen 0, als Oktalzahlen (Basis-8) angezeigt.
hotshot309

1
Noch unerwarteter ist, dass Werte, die mit beginnen 0und dann enthalten 8oder 9fehlschlagen, zu einer Rückgabe von 0 führen. ZB ,, parseInt('034') = 28und parseInt('09') = 0.
Robert Martin

9

Um eine Zeichenfolge in eine Zahl umzuwandeln, subtrahieren Sie 0. Um eine Zahl in eine Zeichenfolge umzuwandeln, fügen Sie "" (die leere Zeichenfolge) hinzu.

5 + 1 gibt Ihnen 6

(5 + "") + 1 gibt Ihnen "51"

("5" - 0) + 1 ergibt 6


1
Das Verlassen auf Tricks, die auf solchen Sprachfehlern basieren, kann zu echter Dunkelheit führen. zB "5" -0 ergibt zwar die Zahl 5, aber "5" +0 ergibt die Zeichenfolge "50". (Ja, ich weiß, es ist viele Jahre später und es ist wahrscheinlich ein bisschen traurig, dass ich das überhaupt gelesen habe.)
Nick Rice

6

parseInt ist wie scanf falsch:

parseInt ("12 Affen", 10) ist eine Zahl mit dem Wert '12'
+ "12 Affen" ist eine Zahl mit dem Wert 'NaN'
Zahl ("12 Affen") ist eine Zahl mit dem Wert 'NaN'


1

Im Folgenden finden Sie ein sehr irritierendes Beispiel dafür, wie JavaScript Sie in Schwierigkeiten bringen kann:

Wenn Sie nur versuchen, parseInt()eine Konvertierung in eine Zahl vorzunehmen und dann dem Ergebnis eine weitere Zahl hinzufügen, werden zwei Zeichenfolgen verkettet.

Sie können das Problem jedoch lösen, indem Sie den Summenausdruck wie im folgenden Beispiel in Klammern setzen .

Ergebnis: Ihre Alterssumme beträgt: 98; Ihre Alterssumme beträgt NICHT: 5048

<!DOCTYPE html>
<html>
<body>

<p id="demo"></p>

<script>
function Person(first, last, age, eye) {
    this.firstName = first;
    this.lastName = last;
    this.age = age;
    this.eyeColor = eye;
}

var myFather = new Person("John", "Doe", "50", "blue");
var myMother = new Person("Sally", "Rally", 48, "green");

document.getElementById("demo").innerHTML = "Their age sum is: "+
 (parseInt(myFather.age)+myMother.age)+"; Their age sum is NOT: " +
 parseInt(myFather.age)+myMother.age; 
</script>

</body>
</html>


0

Am einfachsten ist es, wenn Sie eine Ganzzahl zu einer Zeichenfolge machen möchten

var a,b, c;
a = 1;
b = a.toString(); // This will give you string

Aus der Variablen b vom Typ string können wir nun die Ganzzahl erhalten

c = b *1; //This will give you integer value of number :-)

Wenn Sie oben überprüfen möchten, ist eine Nummer. Wenn Sie nicht sicher sind, ob b eine Ganzzahl enthält, können Sie verwenden

if(isNaN(c*1)) {
  //NOt a number
}
else //number

0

Wir können dies tun, indem wir den unären Plus-Operator verwenden , um sie zuerst in Zahlen umzuwandeln und einfach hinzuzufügen. siehe unten:-

var a = "4";
var b = "7";
var sum = +a + +b; 
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.