Das ist ziemlich seltsam, nicht wahr? Wenn ich mich nur an 0-9 erinnere, stellen die Buchstaben A, B, C, D, E, F einen hexadezimalen Wert dar. Wie kommt es, dass ABCDEFGHAIJ eine hexadezimale Darstellung hat?Parsing Zeichenfolge Wert in JavaScript
1
A
Antwort
1
Wie in den Kommentaren von epascarello erwähnt, hier ist der relevante Teil der MDN documentation dieses Verhalten zu erklären:
Wenn ParseInt ein Zeichen trifft, die nicht eine Zahl im ist spezifizierte Radix, ignoriert es und alle nachfolgenden Zeichen und gibt den Ganzzahlwert zurück, der bis zu diesem Punkt analysiert wurde. parseInt schneidet Zahlen zu ganzzahligen Werten ab. Führende und nachfolgende Leerzeichen sind zulässig.
Folglich parseInt("abcdefghij", 16)
wird analysieren tatsächlich "abcdef"
und dort anhalten. Daher ist das Ergebnis:
0xABCDEF = 11259375
Mit diesem Wissen, können Sie eine benutzerdefinierte Funktion verwenden, anstatt NaN
zurückkehren, wenn sie mit einem nicht-Hexadezimalstring aufgerufen:
function parseTrueHexa(str) {
return str.match(/^ *[a-f0-9]+ *$/i) ? parseInt(str, 16) : NaN;
}
console.log("parseInt() says:");
console.log(parseInt("aBcD", 16));
console.log(parseInt("abcdz", 16));
console.log("parseTrueHexa() says:");
console.log(parseTrueHexa("aBcD"));
console.log(parseTrueHexa("abcdz"));
'parseInt ("abcdefghi", 16) bricht bei dem ersten Nicht-Hexa-Zeichen, auf das es trifft, auf. Also, was Sie bekommen, ist '0xABCDEF' – Arnauld
Wenn nur [einige Doco für' parseInt() '] (https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/parseInt). .. – nnnnnn
Beispiel [fiddle] (https://jsfiddle.net/RajeshDixit/y8ayx3w8/) für @ Arnaulds Kommentar – Rajesh