Number
åºçº¿
广æ³å¯ç¨
èª 2015å¹´7æ èµ·ï¼æ¤ç¹æ§å·²å¨ä¸»æµæµè§å¨ä¸å¾å°æ¯æï¼å¯å¨å¤§å¤æ°è®¾å¤åæµè§å¨çæ¬ä¸æ£å¸¸ä½¿ç¨ã
Number å¼è¡¨ç¤ºå 37 æ -9.25 è¿æ ·çæµ®ç¹æ°ã
Number æé 彿°å
å«å¸¸éåå¤çæ°å¼çæ¹æ³ãå
¶ä»ç±»åçå¼å¯ä»¥ä½¿ç¨ Number() 彿°è½¬æ¢ä¸ºæ°åã
æè¿°
æ°å¼é常以åé¢éå½¢å¼è¡¨ç¤ºãå¦ 255 æ 3.14159ãè¯æ³è¯æ³å
嫿´è¯¦ç»çåèã
255; // äºç¾äºåäº
255.0; // ç¸åçæ°å
255 === 255.0; // true
255 === 0xff; // trueï¼åå
è¿å¶è¡¨ç¤ºï¼
255 === 0b11111111; // trueï¼äºè¿å¶è¡¨ç¤ºï¼
255 === 0.255e3; // trueï¼åè¿å¶ææ°è®°æ°æ³ï¼
å¨ JavaScript 代ç ä¸ï¼å 37 è¿æ ·çæ°ååé¢éæ¯æµ®ç¹æ°å¼ï¼è䏿¯æ´æ°ãå¨å¸¸è§çæ¥å¸¸ä½¿ç¨ä¸ï¼JavaScript 没æåç¬çæ´æ°ç±»åãï¼JavaScript è¿æä¸ä¸ª BigInt ç±»åï¼ä½å®å¹¶ä¸æ¯ä¸ºäºå代 Number è设计çï¼37 ä»ç¶æ¯ä¸ä¸ªæ°åï¼è䏿¯ä¸ä¸ª BigIntãï¼
å½ä½ä¸ºä¸ä¸ªå½æ°ä½¿ç¨æ¶ï¼Number(value) å°å符串æè
å
¶ä»å¼è½¬æ¢å° Number ç±»åãå¦æè¯¥å¼ä¸è½è¢«è½¬æ¢ï¼å®ä¼è¿å NaNã
Number("123"); // è¿åæ°å 123
Number("123") === 123; // true
Number("unicorn"); // NaN
Number(undefined); // NaN
Number ç¼ç
JavaScript ç Number ç±»åæ¯ä¸ä¸ªå精度 64 ä½äºè¿å¶æ ¼å¼ IEEE 754 å¼ï¼ç±»ä¼¼äº Java æè
C# ä¸ç doubleãè¿æå³çå®å¯ä»¥è¡¨ç¤ºå°æ°å¼ï¼ä½æ¯åå¨çæ°åç大å°å精度æä¸äºéå¶ãç®èè¨ä¹ï¼IEEE 754 åç²¾åº¦æµ®ç¹æ°ä½¿ç¨ 64 使¥è¡¨ç¤º 3 个é¨åï¼
- 1 ä½ç¨äºè¡¨ç¤ºç¬¦å·ï¼signï¼ï¼æ£æ°æè è´æ°ï¼
- 11 ä½ç¨äºè¡¨ç¤ºææ°ï¼exponentï¼ï¼-1022 å° 1023ï¼
- 52 ä½ç¨äºè¡¨ç¤ºå°¾æ°ï¼mantissaï¼ï¼è¡¨ç¤º 0 å 1 ä¹é´çæ°å¼ï¼
å°¾æ°ï¼ä¹ç§°ä¸ºæææ°ï¼æ¯è¡¨ç¤ºå®é å¼ï¼æææ°åï¼çæ°å¼é¨åãææ°æ¯å°¾æ°åºä¹ä»¥ç 2 ç广¬¡ãå°å ¶è§ä¸ºç§å¦è®¡æ°æ³ï¼
å°¾æ°ä½¿ç¨ 52 æ¯ç¹åå¨ï¼å¨äºè¿å¶å°æ°ä¸è§£é为 1.⦠ä¹åçæ°åãå æ¤ï¼å°¾æ°çç²¾åº¦æ¯ 2-52ï¼å¯ä»¥éè¿ Number.EPSILON è·å¾ï¼ï¼æè
åè¿å¶æ°å°æ°ç¹å大约 15 å° 17 ä½ï¼è¶
è¿è¿ä¸ªç²¾åº¦çç®æ¯ä¼åå°èå
¥çå½±åã
ä¸ä¸ªæ°å¼å¯ä»¥å®¹çº³çæå¤§å¼æ¯ 21024 - 1ï¼ææ°ä¸º 1023ï¼å°¾æ°ä¸ºåºäºäºè¿å¶ç 0.1111â¦ï¼ï¼å¯ä»¥éè¿ Number.MAX_VALUE è·å¾ãè¶
è¿è¿ä¸ªå¼çæ°ä¼è¢«æ¿æ¢ä¸ºç¹æ®çæ°å¼å¸¸é Infinityã
åªæå¨ -253 + 1 å° 253 - 1 èå´å
ï¼éåºé´ï¼çæ´æ°æè½å¨ä¸ä¸¢å¤±ç²¾åº¦çæ
åµä¸è¢«è¡¨ç¤ºï¼å¯éè¿ Number.MIN_SAFE_INTEGER å Number.MAX_SAFE_INTEGER è·å¾ï¼ï¼å 为尾æ°åªè½å®¹çº³ 53 ä½ï¼å
æ¬å导 1ï¼ã
æå ³è¿é¨ä»½çæ´å¤è¯¦ç»ä¿¡æ¯ï¼è¯·åé ECMAScript æ åã
Number 强å¶è½¬æ¢
è®¸å¤æææ°å¼çå
ç½®æä½é¦å
å°å
¶åæ°è½¬æ¢ä¸ºæ°åï¼è¿å¨å¾å¤§ç¨åº¦ä¸è§£éäºä¸ºä»ä¹ Number 对象çè¡ä¸ºç±»ä¼¼äºæ°ååå§å¼ï¼ã该æä½å¯ä»¥æ»ç»å¦ä¸ï¼
- Number å°æåæ ·è¿å
undefined转æ¢ä¸ºNaNãnull转æ¢ä¸º0ãtrue转æ¢ä¸º1ï¼false转æ¢ä¸º0ã- å符串å°è¢«åå®ä¸ºå
嫿°ååé¢éï¼å¹¶éè¿è§£æå®ä»¬æ¥è½¬æ¢ãè§£æå¤±è´¥ä¼å¾å°
NaNãä¸å®é æ°ååé¢éç¸æ¯ï¼å®ä»¬æä¸äºç»å¾®çå·®å«ï¼- å导åå°¾éçç©ºæ ¼/æ¢è¡ç¬¦ä¼è¢«å¿½ç¥ã
- åå¯¼çæ°å
0ä¸ä¼å¯¼è´è¯¥æ°å¼æä¸ºå «è¿å¶åé¢éï¼æå¨ä¸¥æ ¼æ¨¡å¼ä¸è¢«æç»ï¼ã +å-å 许åºç°å¨å符串çå¼å¤´ä»¥æç¤ºå ¶ç¬¦å·ãï¼å¨å®é 代ç ä¸ï¼å®ä»¬âçèµ·æ¥åâæåçä¸é¨åï¼ä½å®é 䏿¯ç¬ç«çä¸å è¿ç®ç¬¦ãï¼ç¶èï¼è¯¥æ å¿åªè½åºç°ä¸æ¬¡ï¼å¹¶ä¸åé¢ä¸è½è·ç©ºæ ¼ãInfinityå-Infinity被å½ä½æ¯åé¢éãå¨å®é 代ç ä¸ï¼å®ä»¬æ¯å ¨å±åéã- 空å符串æä»
å
å«ç©ºæ ¼çå符串转æ¢ä¸º
0ã - ä¸å è®¸ä½¿ç¨æ°ååé符ã
- BigInt æåº
TypeErrorï¼ä»¥é²æ¢æå¤ç强å¶éå¼è½¬æ¢å¯¼è´ç²¾åº¦æå¤±ã - Symbol æåº
TypeErrorã - 对象é¦å
éè¿æé¡ºåºè°ç¨å®ä»¬ç
[Symbol.toPrimitive]()ï¼ä½¿ç¨"number"æç¤ºï¼ãvalueOf()åtoString()æ¹æ³å°å ¶è½¬æ¢ä¸ºåå§å¼ãç¶åå°å¾å°çåå§å¼è½¬æ¢ä¸ºæ°åã
æä¸¤ç§æ¹æ³å¯ä»¥å¨ JavaScript ä¸å®ç°å ä¹ç¸åçææã
- ä¸å
å ï¼
+xå®å ¨æç §ä¸é¢çæ°å¼å¼ºå¶è½¬æ¢æ¥éª¤æ¥è½¬æ¢xã Number()彿°ï¼Number(x)使ç¨ç¸åçç®æ³è½¬æ¢xï¼é¤äº BigInt ä¸ä¼æåºTypeErrorï¼èæ¯è¿åå ¶æ°åå¼ï¼å¹¶ä¸å¯è½å¯¼è´ç²¾åº¦æå¤±ã
Number.parseFloat() å Number.parseInt() ä¸ Number() ç¸ä¼¼ï¼ä½åªè½è½¬æ¢å符串ï¼å¹¶ä¸è§£æè§åç¥æä¸åãä¾å¦ï¼parseInt() æ æ³è¯å«å°æ°ç¹ï¼parseFloat() æ æ³è¯å« 0x åç¼ã
æ´æ°è½¬æ¢
æäºæä½éè¦æ´æ°ä½ä¸ºåæ°ï¼å°¤å
¶æ¯é£äºä¸æ°ç»/å符串索å¼ãæ¥æ/æ¶é´ç»ä»¶åæ°åè¿å¶ç¸å
³çæä½ã卿§è¡ä¸è¿°æ°å¼å¼ºå¶è½¬æ¢æ¥éª¤åï¼ç»æå°è¢«æªæä¸ºæ´æ°ï¼å³èå¼å°æ°é¨ä»½ï¼ã妿æ°å¼ä¸º ±Infinityï¼åæåæ ·è¿åã妿æ°å¼æ¯ NaN æ -0ï¼åè¿å为 0ãå æ¤ï¼ç»ææ»æ¯æ´æ°ï¼ä¸å
æ¬ -0ï¼æ ±Infinityã
å¼å¾æ³¨æçæ¯ï¼å½è½¬æ¢å°æ´æ°æ¶ï¼undefined å null é½ä¼åæ 0ï¼å 为 undefined 被转æ¢ä¸º NaNï¼NaN ä¹åæäº 0ã
åºå®å®½åº¦æ°å¼è½¬æ¢
JavaScript æä¸äºè¾ä½çº§å«ç彿°ï¼ç¨äºå¤çæ´æ°çäºè¿å¶ç¼ç ï¼æå¼å¾æ³¨æçæ¯æä½è¿ç®å TypedArray 对象ãæä½è¿ç®æ»æ¯å°æä½æ°è½¬æ¢ä¸º 32 使´æ°ãå¨è¿äºæ
åµä¸ï¼å°å¼è½¬æ¢ä¸ºæ°ååï¼æ°åå°é¦å
æªæå°æ°é¨åï¼ç¶åååæ´æ°çäºè¿å¶çè¡¥ç ç¼ç ä¸çæä½å 使¥å°æ°å¼æ åå为ç»å®ç宽度ã
new Int32Array([1.1, 1.9, -1.1, -1.9]); // Int32Array(4) [ 1, 1, -1, -1 ]
new Int8Array([257, -257]); // Int8Array(2) [ 1, -1 ]
// 257 = 0001 0000 0001
// = 0000 0001ï¼æ¨¡ 2^8ï¼
// = 1
// -257 = 1110 1111 1111
// = 1111 1111ï¼æ¨¡ 2^8ï¼
// = -1ï¼å¸¦ç¬¦å·æ´æ°ï¼
new Uint8Array([257, -257]); // Uint8Array(2) [ 1, 255 ]
// -257 = 1110 1111 1111
// = 1111 1111ï¼æ¨¡ 2^8ï¼
// = 255ï¼æ ç¬¦å·æ´æ°ï¼
æé 彿°
Number()-
å建ä¸ä¸ªæ°ç
Numberå¼ã
å½ Number ä½ä¸ºä¸ä¸ªæé 彿°ï¼ç¨ newï¼è¢«è°ç¨æ¶ï¼å®ä¼å建ä¸ä¸ª Number 对象ï¼è¯¥å¯¹è±¡ä¸æ¯ä¸ä¸ªåå§å¼ãä¾å¦ï¼typeof new Number(42) === "object"ï¼å¹¶ä¸ new Number(42) !== 42ï¼å°½ç®¡ new Number(42) == 42ï¼ã
è¦åï¼ä½ åºè¯¥å¾å°åç°èªå·±å° Number ä½ä¸ºæé 彿°ä½¿ç¨ã
éæå±æ§
Number.EPSILON-
两个å¯è¡¨ç¤ºæ°ä¹é´çæå°é´éã
Number.MAX_SAFE_INTEGER-
JavaScript 䏿大çå®å ¨æ´æ°ï¼253 - 1ï¼ã
Number.MAX_VALUE-
è½è¡¨ç¤ºçæå¤§æ£æ°ã
Number.MIN_SAFE_INTEGER-
JavaScript 䏿å°çå®å ¨æ´æ°ï¼-(253 - 1)ï¼ã
Number.MIN_VALUE-
è½è¡¨ç¤ºçæå°æ£æ°å³ææ¥è¿ 0 çæ£æ°ï¼å®é ä¸ä¸ä¼åæ 0ï¼ã
Number.NaN-
ç¹æ®çâNot a Numberâï¼éæ°åï¼å¼ã
Number.NEGATIVE_INFINITY-
ç¹æ®çè´æ 穷大å¼ï¼å¨æº¢åºæ¶è¿å该å¼ã
Number.POSITIVE_INFINITY-
ç¹æ®çæ£æ 穷大å¼ï¼å¨æº¢åºæ¶è¿å该å¼ã
éææ¹æ³
Number.isFinite()-
å¤æä¼ å ¥ç弿¯å¦æ¯æéæ°ã
Number.isInteger()-
å¤æä¼ å ¥ç弿¯å¦ä¸ºæ´æ°
Number.isNaN()-
å¤æä¼ å ¥ç弿¯å¦ä¸º
NaNã Number.isSafeInteger()-
å¤æä¼ å ¥ç弿¯å¦ä¸ºå®å ¨æ´æ°ï¼æ°å¼å¨ -(253 - 1) å° 253 - 1 ä¹é´ï¼ã
Number.parseFloat()-
åå ¨å±å½æ°
parseFloat()ç¸åã Number.parseInt()-
åå ¨å±å½æ°
parseInt()ç¸åã
å®ä¾å±æ§
è¿äºå±æ§æ¯å¨ Number.prototype ä¸å®ä¹çï¼å¹¶ç±ææ Number å®ä¾å
±äº«ã
Number.prototype.constructor-
å建å®ä¾å¯¹è±¡çæé 彿°ã对äº
Numberå®ä¾ï¼åå§å¼ä¸ºNumberæé 彿°ã
å®ä¾æ¹æ³
Number.prototype.toExponential()-
è¿åä½¿ç¨ææ°è¡¨ç¤ºæ³è¡¨ç¤ºæ°å¼çå符串ã
Number.prototype.toFixed()-
è¿å使ç¨å®ç¹è¡¨ç¤ºæ³è¡¨ç¤ºæ°å¼çå符串ã
Number.prototype.toLocaleString()-
è¿åæ°å¼å¨ç¹å®è¯è¨ç¯å¢ä¸è¡¨ç¤ºçå符串ãéåäº
Object.prototype.toLocaleString()æ¹æ³ã Number.prototype.toPrecision()-
è¿åæ°å¼ä½¿ç¨å®ç¹è¡¨ç¤ºæ³æææ°è¡¨ç¤ºæ³è³æå®ç²¾åº¦çå符串ã
Number.prototype.toString()-
è¿åä¸ä¸ªä»£è¡¨ç»å®å¯¹è±¡çå符串ï¼åºäºæå®çåºæ°ï¼radixï¼ãéåäº
Object.prototype.toString()æ¹æ³ã Number.prototype.valueOf()-
è¿åæå®å¯¹è±¡çåå§å¼ãéåäº
Object.prototype.valueOf()æ¹æ³ã
示ä¾
>ä½¿ç¨ Number å¯¹è±¡ç»æ°ååéèµå¼
ä¸ä¾ä½¿ç¨ Number 对象ç屿§ç»å 个æ°ååéèµå¼ï¼
const biggestNum = Number.MAX_VALUE;
const smallestNum = Number.MIN_VALUE;
const infiniteNum = Number.POSITIVE_INFINITY;
const negInfiniteNum = Number.NEGATIVE_INFINITY;
const notANum = Number.NaN;
æ´æ°ç±»åçèå´
以ä¸ç¤ºä¾æ¾ç¤ºäºå¯ä»¥è¡¨ç¤ºä¸º Number 对象çæå°åæå¤§æ´æ°å¼ã
const biggestInt = Number.MAX_SAFE_INTEGER; // (2**53 - 1) => 9007199254740991
const smallestInt = Number.MIN_SAFE_INTEGER; // -(2**53 - 1) => -9007199254740991
å½è§£æå·²åºåå为 JSON çæ°æ®æ¶ï¼å¦æ JSON è§£æå¨å°å®ä»¬å¼ºå¶ä¸º Number ç±»åï¼è¶
åºæ¤èå´çæ´æ°å¼å¯è½ä¼è¢«æåã
ä¸ä¸ªå¯è½çåéåæ³æ¯ä½¿ç¨ Stringã
è¾å¤§çæ°å¼å¯ä»¥ä½¿ç¨ BigInt ç±»å表示ã
ä½¿ç¨ Number() è½¬æ¢ Date 对象
以ä¸ç¤ºä¾ä½¿ç¨ Number ä½ä¸ºå½æ°å° Date 对象转æ¢ä¸ºæ°å¼ï¼
const d = new Date("December 17, 1995 03:24:00");
console.log(Number(d));
è¿å°è¾åº 819199440000ã
å°æ°åå符串å null 转æ¢ä¸ºæ°å¼
Number("123"); // 123
Number("123") === 123; // true
Number("12.3"); // 12.3
Number("12.00"); // 12
Number("123e-1"); // 12.3
Number(""); // 0
Number(null); // 0
Number("0x11"); // 17
Number("0b11"); // 3
Number("0o11"); // 9
Number("foo"); // NaN
Number("100a"); // NaN
Number("-Infinity"); // -Infinity
è§è
| è§è |
|---|
| ECMAScript® 2027 Language Specification> # sec-number-objects> |