Qual è la differenza tra parseInt (stringa) e numero (stringa) in JavaScript? [duplicare]

StackOverflow https://stackoverflow.com/questions/4564158

  •  14-10-2019
  •  | 
  •  

Domanda

Questa domanda ha già una risposta qui:

Qual è la differenza tra parseInt(string) e Number(string) in JavaScript?

È stato utile?

Soluzione

parseInt("123hui")

restituisce 123

Number("123hui")

ritorna NaN

In altre parole parseInt() analizza fino al primo non cifre e restituisce tutto ciò che aveva analizzato. Number() vuole convertire l'intera stringa in un numero, che può anche essere un float BTW.


Modifica # 1: Lucero ha commentato la radice che può essere utilizzato insieme a parseInt(). Per quanto riguarda che si occupa, si prega di consultare di IL MEDICO risposta di seguito (non ho intenzione di copiare che qui, il doc deve avere una congrua parte della fama ...).


EDIT # 2: Per quanto riguarda i casi d'uso: Questo è un po 'scritto tra le righe già. Usa Number() nei casi in cui si desidera controllare indirettamente se la stringa data rappresenta completamente un valore numerico, float o un numero intero. parseInt()/parseFloat() non sono così severe come hanno appena analizzare insieme e fermarsi quando il valore numerico si ferma (Radix!), che lo rende utile quando è necessario un valore numerico al fronte "nel caso in cui v'è uno" (nota che parseInt("hui") restituisce anche NaN ). E la più grande differenza è l'uso di radix che Number() non sa di e parseInt() possono indirettamente intuire dal stringa data (che può causare risultati strani a volte).

Altri suggerimenti

Il primo prende due parametri:

parseInt(string, radix)

Il parametro radicato viene utilizzato per specificare quale sistema numerico da utilizzare, ad esempio, una radice di 16 (esadecimale) indica che il numero nella stringa deve essere analizzato da un numero esadecimale in un numero decimale.

Se il parametro radix viene omesso, JavaScript assume il seguente:

  • Se la stringa inizia con "0x", il
    radix è 16 (esadecimale)
  • Se la stringa inizia con "0", il radice è 8 (ottale). Questa caratteristica
    è deprecato
  • Se la stringa inizia con qualsiasi altro il valore, la radice è 10 (decimale)

L'altra funzione che hai menzionato accetta un solo parametro:

Number(object)

Il Numero () converte funzione l'argomento oggetto a un numero che rappresenta il valore dell'oggetto.

Se il valore non può essere convertito in un numero legale, viene restituito NaN.

parseInt (stringa) convertirà una stringa contenente caratteri non numerici ad un numero, fino a quando la stringa inizia con caratteri numerici

'10px' => 10

Number (stringa) restituirà NaN se la stringa contiene caratteri non numerici

'10px' => NaN

La funzione parseInt permette di specificare una radice per la stringa di input ed è limitata a valori interi.

parseInt('Z', 36) === 35

Il costruttore Number chiamato come una funzione analizzare la stringa con una grammatica ed è limitata alla base 10 e base 16.

StringNumericLiteral :::
    StrWhiteSpaceopt 
    StrWhiteSpaceopt StrNumericLiteral StrWhiteSpaceopt

StrWhiteSpace :::
    StrWhiteSpaceChar StrWhiteSpaceopt

StrWhiteSpaceChar :::
    WhiteSpace 
    LineTerminator

StrNumericLiteral :::
    StrDecimalLiteral 
    HexIntegerLiteral

StrDecimalLiteral :::
    StrUnsignedDecimalLiteral 
    + StrUnsignedDecimalLiteral 
    - StrUnsignedDecimalLiteral

StrUnsignedDecimalLiteral :::
    Infinity 
    DecimalDigits . DecimalDigitsopt ExponentPartopt 
    . DecimalDigits ExponentPartopt     
    DecimalDigits ExponentPartopt

DecimalDigits :::
    DecimalDigit 
    DecimalDigits DecimalDigit

DecimalDigit ::: one of
    0 1 2 3 4 5 6 7 8 9

ExponentPart :::
    ExponentIndicator SignedInteger

ExponentIndicator ::: one of
    e E

SignedInteger :::
    DecimalDigits 
    + DecimalDigits 
    - DecimalDigits

HexIntegerLiteral :::
    0x HexDigit 
    0X HexDigit 
    HexIntegerLiteral HexDigit

HexDigit ::: one of
    0 1 2 3 4 5 6 7 8 9 a b c d e f A B C D E F

Addendum al @ risposta di sjngm:

Entrambi ignorano anche spazi bianchi:

var foo = "3"; console.log (parseInt (foo)); // 3 console.log (Number (foo)); // 3

Non è esattamente corretto. Come sjngm ha scritto parseInt analizza stringa primo numero. È vero. Ma il problema è quando si vuole analizzare il numero separato con spazi bianchi per esempio. "12 345". In tal caso
parseInt("12 345") tornerà 12 invece di 12345. Quindi, per evitare che la situazione si deve spazi bianchi di assetto prima di parsing al numero di . La mia soluzione potrebbe essere:

     var number=parseInt("12 345".replace(/\s+/g, ''),10);

Avviso una cosa in più che ho usato in parseInt () la funzione. parseInt("string",10) imposterà il numero di formato decimale . Se si desidera analizzare la stringa come "08" si otterrebbe 0 perché 8 non è un numero ottale .Explanation è qui

Addendum al @ risposta di sjngm:

Entrambi ignorano anche spazi bianchi:

var foo = "    3     ";
console.log(parseInt(foo)); // 3
console.log(Number(foo)); // 3
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top