Number.js (1752B)
1 /* This Source Code Form is subject to the terms of the Mozilla Public 2 * License, v. 2.0. If a copy of the MPL was not distributed with this 3 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ 4 5 // ES6 draft ES6 20.1.2.4 6 function Number_isFinite(num) { 7 if (typeof num !== "number") { 8 return false; 9 } 10 return num - num === 0; 11 } 12 13 // ES6 draft ES6 20.1.2.2 14 function Number_isNaN(num) { 15 if (typeof num !== "number") { 16 return false; 17 } 18 return num !== num; 19 } 20 21 // ES2021 draft rev 889f2f30cf554b7ed812c0984626db1c8a4997c7 22 // 20.1.2.3 Number.isInteger ( number ) 23 function Number_isInteger(number) { 24 // Step 1. (Inlined call to IsIntegralNumber) 25 26 // 7.2.6 IsIntegralNumber, step 1. 27 if (typeof number !== "number") { 28 return false; 29 } 30 31 var integer = std_Math_trunc(number); 32 33 // 7.2.6 IsIntegralNumber, steps 2-4. 34 // |number - integer| ensures Infinity correctly returns false, because 35 // |Infinity - Infinity| yields NaN. 36 return number - integer === 0; 37 } 38 39 // ES2021 draft rev 889f2f30cf554b7ed812c0984626db1c8a4997c7 40 // 20.1.2.5 Number.isSafeInteger ( number ) 41 function Number_isSafeInteger(number) { 42 // Step 1. (Inlined call to IsIntegralNumber) 43 44 // 7.2.6 IsIntegralNumber, step 1. 45 if (typeof number !== "number") { 46 return false; 47 } 48 49 var integer = std_Math_trunc(number); 50 51 // 7.2.6 IsIntegralNumber, steps 2-4. 52 // |number - integer| to handle the Infinity case correctly. 53 if (number - integer !== 0) { 54 return false; 55 } 56 57 // Steps 1.a, 2. 58 // prettier-ignore 59 return -((2 ** 53) - 1) <= integer && integer <= (2 ** 53) - 1; 60 } 61 62 function Global_isNaN(number) { 63 return Number_isNaN(TO_NUMBER(number)); 64 } 65 66 function Global_isFinite(number) { 67 return Number_isFinite(TO_NUMBER(number)); 68 }