wake-up-neo.com

Javascript String in int-Konvertierung

Ich habe folgende JS auf einer Seite eingebunden:

var round = Math.round;
var id = $(this).attr("id");

var len = id.length;
var indexPos = len -1; // index of the number so that we can split this up and used it as a title

var pasType = id.substring(0, indexPos); // adult, child or infant
var ind = round(id.substring(indexPos)); // converts the string index to an integer
var number = (id.substring(indexPos) + 1); // creates the number that will go in the title
window.alert(number);

id wird so etwas wie adult0 sein, und ich muss diese Zeichenfolge nehmen und sie in adult und 0 aufteilen - dieser Teil funktioniert gut.

Das Problem tritt auf, wenn ich versuche, die 0 zu erhöhen. Wie Sie sehen, verwende ich Math.round, um es in eine Ganzzahl zu konvertieren, und füge dann 1 hinzu - ich erwarte, dass 0 danach 1 ist. Es scheint jedoch nicht in Integer zu konvertieren, da ich 01 und nicht 1 bekomme. Beim Testen mit adult1 erhalte ich die Warnung 11.

Ich verwende this als Referenz und habe auch var number += id.substring(indexPos); ausprobiert, was die JS bricht (unexpected identifier '+=')

Weiß jemand, was ich falsch mache? Gibt es einen besseren Weg, dies zu tun?

18
Skytiger

Die Funktion parseInt() analysiert eine string und gibt eine integer zurück. 10 ist die Basis oder Basis [DOC]

var number = parseInt(id.substring(indexPos) , 10 ) + 1;
30
Charaf JRA

Dies hat mit JavaScripts + im Operator zu tun - wenn eine Zahl und eine Zeichenfolge "addiert" werden, wird die Zahl in eine Zeichenfolge umgewandelt:

0 + 1; //1
'0' + 1; // '01'

Um dies zu lösen, verwenden Sie den unären Operator + oder verwenden Sie parseInt():

+'0' + 1; // 1
parseInt('0', 10) + 1; // 1

Der unäre +-Operator konvertiert ihn in eine Zahl (wenn es jedoch eine Dezimalzahl ist, behält er die Dezimalstellen bei) und parseInt() ist selbsterklärend (konvertiert in eine Zahl, ignoriert die Dezimalstellen).

Das zweite Argument ist notwendig, damit parseInt() die richtige Basis verwendet, wenn führende 0s platziert werden:

parseInt('010'); // 8 in older browsers, 10 in newer browsers
parseInt('010', 10); // always 10 no matter what

Es gibt auch parseFloat(), wenn Sie Dezimalzahlen in Strings in ihren numerischen Wert konvertieren müssen - + kann das auch, aber es verhält sich etwas anders: Dies ist jedoch eine andere Geschichte.

6
Qantas 94 Heavy

JS wird denken, dass die 0 eine Zeichenfolge ist, die es tatsächlich ist. Um sie in ein int zu konvertieren, verwenden Sie die: parseInt () - Funktion wie:

var numberAsInt = parseInt(number, 10);  
// Second arg is radix, 10 is decimal.

Wenn die Zahl nicht in ein int konvertiert werden kann, wird NaN zurückgegeben. Daher würde ich eine Überprüfung des Codes in der Produktion oder zumindest wenn Sie sich nicht 100% ig der Eingabe bewusst sind, empfehlen.

3
Jite

Verwenden Sie parseInt ():

var number = (parseInt(id.substring(indexPos)) + 1);` // creates the number that will go in the title
2
juju

Obwohl parseInt die offizielle Funktion dafür ist, können Sie dasselbe mit diesem Code erreichen:

number*1

Der Vorteil ist, dass Sie einige Zeichen speichern, wodurch sich Bandbreite einsparen lässt, wenn Ihr Code viele solcher Unterhaltungen enthält.

2
Alexander Jank

Wenn Sie sich sicher sind, ob der Index eine Zahl ist, können Sie dies wie folgt tun:

var number = Number(id.substring(indexPos)) + 1;

Ansonsten schlage ich vor zu prüfen, ob die Number-Funktion korrekt ausgewertet wird.

2
user1203684

Konvertieren nach Number Class: -

Z.B: 

var n = Number("103");
console.log(n+1)

Ausgabe: 104

Hinweis: - Number ist Klasse. Wenn wir string übergeben, konvertiert er den Konstruktor von Number class

2
Arshid KV