parseInt("")
è NaN
perché lo standard dice così, anche se è +""
0
invece (anche semplicemente perché la norma dice così, il che implica per esempio che "" == 0
).
Non cercare la logica in questo perché non c'è una logica profonda profonda, solo la cronologia .
Sei a mio parere facendo un GRANDE errore ... prima lo correggi meglio sarà per la tua programmazione con Javascript. L'errore è che si presume che ogni scelta fatta nei linguaggi di programmazione e ogni dettaglio tecnico su di essi sia logica. Questo semplicemente non è vero.
Soprattutto per Javascript.
Si prega di ricordare che Javascript è stato "progettato" in fretta e, solo a causa del destino, è diventato estremamente popolare durante la notte. Ciò ha costretto la comunità a standardizzarlo prima di qualsiasi seria riflessione sui dettagli e quindi è stato sostanzialmente "congelato" nel suo attuale stato triste prima di qualsiasi serio test sul campo.
Ci sono parti che sono così male che non sono nemmeno divertente (ad es with
dichiarazione o l'operatore di uguaglianza ==
che è così rotto che gravi js IDE mettono in guardia contro qualsiasi uso di esso: si ottiene cose come A==B
, B==C
e A!=C
anche utilizzando solo valori normali e senza alcun valore "speciale" come null
, undefined
, NaN
o stringhe vuote ""
e non a causa di problemi di precisione).
I casi speciali non necessari sono ovunque in Javascript e provare a metterli in una cornice logica è, sfortunatamente, uno sforzo inutile. Imparate le sue stranezze leggendo molto e godetevi il fantastico ambiente di runtime che fornisce (è qui che JavaScript brilla davvero ... i browser e le loro JIT sono una tecnologia davvero impressionante: potete scrivere poche righe e ottenere un software veramente utile in esecuzione su un gajillion di diversi dispositivi informatici).
Lo standard ufficiale in cui sono enumerate tutte le stranezze è piuttosto difficile da leggere perché mira ad essere molto preciso e purtroppo le regole che deve specificare sono davvero complesse.
Inoltre, come i guadagni linguaggio più caratteristiche le regole otterrà ancora di più e più complessa: per esempio ciò che è per ES5 solo un altro caso strano "speciale" (ad esempio ToPrimitive
comportamento operazione per Date
oggetti) diventa un caso "normale" in ES6 (dove ToPrimitive
può essere personalizzato).
Non sono sicuro che questa "normalizzazione" sia qualcosa di cui essere contento ... il vero problema è il punto di partenza congelato e non ci sono soluzioni facili ora (se non si vuole buttare via tutto il codice javascript esistente, questo è).
Il percorso normale per una lingua inizia pulito, semplice, simmetrico e piccolo. Quindi quando si affrontano problemi del mondo reale, il linguaggio guadagna (è infetto da) alcune parti brutte (perché il mondo è brutto e asimmetrico).
Javascript è così. Tranne che non è iniziato bello e pulito e inoltre non c'è stato tempo per lucidarlo prima di lanciarlo nel gioco.
Bene, è proprio come è stato progettato per funzionare. O forse si è evoluto per lavorare in questo modo. In ogni caso, troppo tardi per cambiarlo. E ci sono buoni casi d'uso per entrambi i metodi. Hai solo bisogno di scegliere quello che è appropriato. – Thilo
Si noti inoltre che 'Numero' supporta anche numeri in virgola mobile, non solo numeri interi. – Thilo
Idealmente o no, non è così che funziona. Potresti apprezzare https://www.youtube.com/watch?v=FqhZZNUyVFM anche se – pvg