parseInt
åºçº¿
广æ³å¯ç¨
èª 2015å¹´7æ èµ·ï¼æ¤ç¹æ§å·²å¨ä¸»æµæµè§å¨ä¸å¾å°æ¯æï¼å¯å¨å¤§å¤æ°è®¾å¤åæµè§å¨çæ¬ä¸æ£å¸¸ä½¿ç¨ã
parseInt(string, radix) è§£æä¸ä¸ªå符串并è¿åæå®åºæ°çåè¿å¶æ´æ°ï¼radix æ¯ 2-36 ä¹é´çæ´æ°ï¼è¡¨ç¤ºè¢«è§£æå符串çåºæ°ã
å°è¯ä¸ä¸
console.log(parseInt("123"));
// 123 (default base-10)
console.log(parseInt("123", 10));
// 123 (explicitly specify base-10)
console.log(parseInt(" 123 "));
// 123 (whitespace is ignored)
console.log(parseInt("077"));
// 77 (leading zeros are ignored)
console.log(parseInt("1.9"));
// 1 (decimal part is truncated)
console.log(parseInt("ff", 16));
// 255 (lower-case hexadecimal)
console.log(parseInt("0xFF", 16));
// 255 (upper-case hexadecimal with "0x" prefix)
console.log(parseInt("xyz"));
// NaN (input can't be converted to an integer)
è¯æ³
parseInt(string, radix);
åæ°
string-
è¦è¢«è§£æçå¼ã妿忰䏿¯ä¸ä¸ªå符串ï¼åå°å ¶è½¬æ¢ä¸ºå符串 (使ç¨
ToStringæ½è±¡æä½)ãå符串å¼å¤´ç空ç½ç¬¦å°ä¼è¢«å¿½ç¥ã radix_ å¯é_-
ä»
2å°36çæ´æ°ï¼è¡¨ç¤ºè¿å¶çåºæ°ãä¾å¦æå®16表示被解æå¼æ¯åå è¿å¶æ°ãå¦æè¶ åºè¿ä¸ªèå´ï¼å°è¿åNaNãå妿å®0ææªæå®ï¼åºæ°å°ä¼æ ¹æ®å符串çå¼è¿è¡æ¨ç®ã注æï¼æ¨ç®çç»æä¸ä¼æ°¸è¿æ¯é»è®¤å¼10ï¼æç« åé¢çæè¿°è§£éäºå½åæ°radixä¸ä¼ æ¶è¯¥å½æ°çå ·ä½è¡ä¸ºã
è¿åå¼
ä»ç»å®çå符串ä¸è§£æåºçä¸ä¸ªæ´æ°ã
æè
NaNï¼å½
radixå°äº2æå¤§äº36ï¼æ- 第ä¸ä¸ªéç©ºæ ¼å符ä¸è½è½¬æ¢ä¸ºæ°åã
parseInt('123', 5) // å°'123'çä½ 5 è¿å¶æ°ï¼è¿ååè¿å¶æ° 38 => 1*5^2 + 2*5^1 + 3*5^0 = 38
æè¿°
parseInt彿°å°å
¶ç¬¬ä¸ä¸ªåæ°è½¬æ¢ä¸ºä¸ä¸ªå符串ï¼å¯¹è¯¥å符串è¿è¡è§£æï¼ç¶åè¿åä¸ä¸ªæ´æ°æ NaNã
妿䏿¯ NaNï¼è¿åå¼å°æ¯ä»¥ç¬¬ä¸ä¸ªåæ°ä½ä¸ºæå®åºæ° radix ç转æ¢åçåè¿å¶æ´æ°ã(ä¾å¦ï¼radix 为 10ï¼å°±æ¯å¯ä»¥è½¬æ¢åè¿å¶æ°ï¼ä¸º 8 å¯ä»¥è½¬æ¢å
«è¿å¶æ° "07"ï¼16å¯ä»¥è½¬æ¢åå
è¿å¶æ°"0xff"ï¼ä»¥æ¤ç±»æ¨)ã
å¯¹äº radix 为 10 以ä¸çï¼è±æåæ¯è¡¨ç¤ºå¤§äº 9 çæ°åãä¾å¦ï¼å¯¹äºåå
è¿å¶æ°ï¼åºæ° 16ï¼ï¼åä½¿ç¨ A å° Fã
妿 parseInt éå°çåç¬¦ä¸æ¯æå® radix åæ°ä¸çæ°åï¼å®å°å¿½ç¥è¯¥åç¬¦ä»¥åææåç»å符ï¼å¹¶è¿åå°è¯¥ç¹ä¸ºæ¢å·²è§£æçæ´æ°å¼ãparseInt å°æ°åæªæä¸ºæ´æ°å¼ãå
许å导åå°¾éç©ºæ ¼ã
ç±äºæäºæ°åå¨å
¶å符串表示形å¼ä¸ä½¿ç¨ e å符ï¼ä¾å¦ 6.022Ã23 表示 6.022e23 ï¼ï¼å æ¤å½å¯¹é常大æé常å°çæ°åä½¿ç¨æ°åæ¶ï¼ä½¿ç¨ parseInt æªææ°åå°äº§çæå¤ç»æãparseIntä¸åºæ¿ä»£ Math.floor()ã
parseInt å¯ä»¥ç解两个符å·ã+ è¡¨ç¤ºæ£æ°ï¼- è¡¨ç¤ºè´æ°ï¼ä» ECMAScript 1 å¼å§ï¼ã宿¯å¨å»æç©ºæ ¼åä½ä¸ºè§£æçåå§æ¥éª¤è¿è¡çãå¦ææ²¡ææ¾å°ç¬¦å·ï¼ç®æ³å°è¿å
¥ä¸ä¸æ¥ï¼å¦åï¼å®å°å é¤ç¬¦å·ï¼å¹¶å¯¹å符串çå
¶ä½é¨åè¿è¡æ°åè§£æã
妿 radix æ¯ undefinedã0 ææªæå®çï¼JavaScript ä¼åå®ä»¥ä¸æ
åµï¼
- 妿è¾å
¥ç
string以0xæ0Xï¼ä¸ä¸ª 0ï¼å颿¯å°åæå¤§åç Xï¼å¼å¤´ï¼é£ä¹ radix 被åå®ä¸º 16ï¼å符串çå ¶ä½é¨å被å½ååå è¿å¶æ°å»è§£æã - 妿è¾å
¥ç
string以 "0"ï¼0ï¼å¼å¤´ï¼radix被åå®ä¸º8ï¼å «è¿å¶ï¼æ10ï¼åè¿å¶ï¼ãå ·ä½éæ©åªä¸ä¸ª radix åå³äºå®ç°ãECMAScript 5 æ¾æ¸ äºåºè¯¥ä½¿ç¨ 10 (åè¿å¶)ï¼ä½ä¸æ¯ææçæµè§å¨é½æ¯æãå æ¤ï¼å¨ä½¿ç¨parseIntæ¶ï¼ä¸å®è¦æå®ä¸ä¸ª radixã - 妿è¾å
¥ç
string以任ä½å ¶ä»å¼å¼å¤´ï¼radixæ¯10(åè¿å¶)ã
å¦æç¬¬ä¸ä¸ªå符ä¸è½è½¬æ¢ä¸ºæ°åï¼parseInt ä¼è¿å NaNã
为äºç®æ¯çç®çï¼NaN å¼ä¸è½ä½ä¸ºä»»ä½ radix çæ°åãä½ å¯ä»¥è°ç¨ isNaN 彿°æ¥ç¡®å® parseInt çç»ææ¯å¦ä¸º NaNãå¦æå° NaN ä¼ éç»ç®æ¯è¿ç®ï¼åè¿ç®ç»æä¹å°æ¯ NaNã
è¦å°ä¸ä¸ªæ°å转æ¢ä¸ºç¹å®ç radix ä¸çåç¬¦ä¸²åæ®µï¼è¯·ä½¿ç¨ thatNumber.toString(radix) 彿°ã
示ä¾
>示ä¾ï¼ä½¿ç¨ parseInt
以ä¸ä¾ååè¿å15:
parseInt("0xF", 16);
parseInt("F", 16);
parseInt("17", 8);
parseInt(021, 8);
parseInt("015", 10);
parseInt(15.99, 10);
parseInt("15,123", 10);
parseInt("FXX123", 16);
parseInt("1111", 2);
parseInt("15 * 3", 10);
parseInt("15e2", 10);
parseInt("15px", 10);
parseInt("12", 13);
以ä¸ä¾ååè¿å NaN:
parseInt("Hello", 8); // æ ¹æ¬å°±ä¸æ¯æ°å¼
parseInt("546", 2); // é¤äºâ0ã1âå¤ï¼å
¶ä»æ°åé½ä¸æ¯ææäºè¿å¶æ°å
以ä¸ä¾ååè¿å -15ï¼
parseInt("-F", 16);
parseInt("-0F", 16);
parseInt("-0XF", 16);
parseInt(-15.1, 10);
parseInt(" -17", 8);
parseInt(" -15", 10);
parseInt("-1111", 2);
parseInt("-15e1", 10);
parseInt("-12", 13);
ä¸ä¾ä¸å
¨é¨è¿å 4:
parseInt(4.7, 10);
parseInt(4.7 * 1e22, 10); // éå¸¸å¤§çæ°å¼åæ 4
parseInt(0.00000000000434, 10); // é常å°çæ°å¼åæ 4
ä¸é¢çä¾åè¿å 224
parseInt("0e0", 16);
没ææå® radix åæ°æ¶çå
«è¿å¶è§£æ
尽管 ECMAScript 3 å·²ç»ä¸èµæè¿ç§åæ³ï¼ä¸ ECMAScript 5 å·²ç»ç¦æ¢äºè¿ç§åæ³ï¼ä½æ¯ä»ç¶æå¾å¤å®ç°ç¯å¢ä»ç¶æä»¥ 0 å¼å¤´çæ°å¼å符串ï¼numeric stringï¼è§£é为ä¸ä¸ªå «è¿å¶æ°ãä¸é¢çä¾åå¯è½è¿åå «è¿å¶çç»æï¼ä¹å¯è½è¿ååè¿å¶çç»æãæ»æ¯æå®ä¸ä¸ªåºæ°ï¼radixï¼å¯ä»¥é¿å è¿ç§ä¸å¯é çè¡ä¸ºã
parseInt("0e0");
// 0
parseInt("08");
// 0, '8' 䏿¯å
«è¿å¶æ°åã
ECMAScript 5 ç§»é¤äºå «è¿å¶è§£æ
ECMAScript 5 è§èä¸åå
许 parseInt 彿°çå®ç°ç¯å¢æä»¥ 0 å符å¼å§çå符串ä½ä¸ºå
«è¿å¶æ°å¼ãECMAScript 5 éè¿°å¦ä¸ï¼
æ ¹æ®ç»å® radixï¼parseInt彿°äº§çä¸ä¸ªç±åç¬¦ä¸²åæ°å
容解æè¿æ¥çæ´æ°å¼ãå符串ä¸å¼å¤´ç空ç½ä¼è¢«å¿½ç¥ã妿 radix 没ææå®æè
为 0ï¼åæ°ä¼è¢«åå®ä»¥ 10 ä¸ºåºæ°æ¥è§£æï¼å¦ææ°å¼ä»¥å符对 0x æ 0X å¼å¤´ï¼ä¼åå®ä»¥ 16 ä¸ºåºæ°æ¥è§£æã
è¿ä¸ ECMAScript 3 ææä¸åï¼ECMAScript 3 ä» ä» æ¯ä¸æå¡è¿ç§åæ³ä½å¹¶æ²¡æç¦æ¢è¿ç§åæ³ã
ç´è³ 2013 å¹´ï¼å¾å¤å®ç°ç¯å¢å¹¶æ²¡æéåæ°çè§èæè§å®çåæ³ï¼èä¸ç±äºå¿ é¡»å ¼å®¹æ§ççæµè§å¨ï¼æä»¥æ°¸è¿é½è¦æç¡®ç»åº radix åæ°çå¼ã
ä¸ä¸ªæ´ä¸¥æ ¼çè§£æå½æ°
ææ¶éç¨ä¸ä¸ªæ´ä¸¥æ ¼çæ¹æ³æ¥è§£ææ´åå¼å¾æç¨ãæ¤æ¶å¯ä»¥ä½¿ç¨æ£å表达å¼ï¼
filterInt = function (value) {
if (/^(\-|\+)?([0-9]+|Infinity)$/.test(value)) return Number(value);
return NaN;
};
console.log(filterInt("421")); // 421
console.log(filterInt("-421")); // -421
console.log(filterInt("+421")); // 421
console.log(filterInt("Infinity")); // Infinity
console.log(filterInt("421e+0")); // NaN
console.log(filterInt("421hop")); // NaN
console.log(filterInt("hop1.61803398875")); // NaN
console.log(filterInt("1.61803398875")); // NaN
è§è
| è§è |
|---|
| ECMAScript® 2027 Language Specification> # sec-parseint-string-radix> |