发布作者: JavaScript大王
百度收录: 正在检测是否收录...
最后更新: 2022年 12月 23日 13:04
作品采用: 《 署名-非商业性使用-相同方式共享 4.0 国际 (CC BY-NC-SA 4.0) 》许可协议授权
ES6提供二进制和八进制的新写法:
// 二进制:0b/0B
let res1 = (0b111110111 === 503);
console.log(res1); // true
// 八进制:0o/0O
let res2 = (0o767 === 503);
console.log(res2); // true
// 严格模式下,不允许使用0前缀表示八进制数,需要用0o形式的前缀
// 非严格模式
(function () {
console.log(0o11 === 011); // true
})()
// 严格模式下
(function () {
"use strict"
console.log(0o11 === 011); // Octal literals are not allowed in strict mode.
})()
// 转换为十进制数:使用number()方法
console.log(Number(0b111)); // 7
console.log(Number(0o111)); // 73
console.log(Number(0x111)); // 23
Number.isFinite(1); // true
// ES5中部署Number.isFinite()方法的代码
(function (global) {
// 这里没太看懂
var global_isFinite = global.isFinite;
// 自定义Number对象的isFinite属性
Object.defineProperty(Number,'isFinite',{
value : function (value) {
return typeof value === 'number' && global_isFinite(value);
},
configurable : true,
enumerable :false,
writable : true
})
})(this);
Number.isNaN(NaN); // true
// ES5中部署Number.isNaN()方法的代码
(function (global) {
// 这里没太看懂
var global_isNaN = global.isNaN;
// 自定义Number对象的isFinite属性
Object.defineProperty(Number,'isNaN',{
value : function (value) {
return typeof value === 'number' && global_isNaN(value);
},
configurable : true,
enumerable :false,
writable : true
})
})(this);
// ES6将这两个全局方法移植到了Number对象上
// ES5的写法
let res1 = parseInt("1.11"); // 1
let res2 = parseFloat("123.886#"); // 123.886
// ES6的写法
let res3 = Number.parseInt("1.111111"); // 1
let res4 = Number.parseFloat("12.12#@$"); // 12.12
// 该方法用于判断一个数是否是整数
let res1 = Number.isInteger(12.0); // true
let res2 = Number.isInteger(12); // true
// Number.EPSILON 一个常量 用于设置误差范围
const res1 = Number.EPSILON;
console.log(res1.toFixed(30)); // 0.000000000000000222044604925031
// 例子 误差检查函数
function withinErrorMargin(left,right){
return Math.abs(right - left) < Number.EPSILON; // 计算结果与计算结果的目标值之差的绝对值与该常量
比较
}
console.log(withinErrorMargin(0.1 + 0.2 , 0.3)); // true
console.log(withinErrorMargin(0.1 + 0.3 , 0.3)); // false
// Number.MAX_SAFE_INTEGER 和 Number.MIN_SAFE_INTEGER 表示安全整数范围的上下限
let res1 = Number.MAX_SAFE_INTEGER; // 9007199254740991
let res2 = Number.MIN_SAFE_INTEGER; // -9007199254740991
// Number.isSafeInteger() 用于检测整数是否在安全整数的范围内
let res3 = Number.isSafeInteger(Number.MAX_SAFE_INTEGER); // true
let res4 = Number.isSafeInteger(Number.MAX_SAFE_INTEGER + 1); // false
// Number.isSafeInteger()方法原理
function isSafeInteger(num) {
return (typeof num === "number" && Math.round(num) === num && Number.MAX_SAFE_INTEGER >= num &&
Number.MIN_SAFE_INTEGER <= num);
}
console.log(isSafeInteger(1)); // true
console.log(isSafeInteger(Number.MAX_SAFE_INTEGER + 1)); // false
function trusty(left,right,result){
/*
left:参与运算的第一个整数
right:参与运算的第二个整数
result:运算结果
*/
if(Number.isSafeInteger(left) && Number.isSafeInteger(right) && Number.isSafeInteger(result)){
return result;
}
throw new RangeError("某一数值不在安全范围内!");
}
console.log(trusty(1,2,3)); // 3
关于参数:
// 1. Math.trunc() 去掉小数,返回一个整数
let res1 = Math.trunc(12.1212); // 12
let res2 = Math.trunc("123.321"); // 123 字符串先转换为Number
let res3 = Math.trunc(); // NaN
// 兼容不支持ES6语法的浏览器
Math.trunc = Math.trunc || function(x){
// < 0 : 向上取整 > 0 向下取整
return x < 0 ? Math.ceil(x) : Math.floor(x);
}
返回值为以下有4种类型中的一个:
// 2.Math.sign 方法:判断一个数是正数、负数、还是0
// 正数
let res4 = Math.sign(12); // 1
// 负数
let res5 = Math.sign(-12); // -1
// 0
let res6 = Math.sign(0); // 0
// -0
let res7 = Math.sign(-0); // 0
// NaN
let res8 = Math.sign(NaN); // NaN
// ES5语法模拟Math.sign()方法
Math.sign = Math.sign || function (x) {
x = +x; // 转换为数值
if(x === 0 || Math.isNaN(X)){
return x;
}
return x > 0 ? 1 : -1;
}
// Math.cbrt() 计算立方根
let re1 = Math.cbrt(8); // 2
let re2 = Math.cbrt("test"); //NaN
// ES5模拟Math.cbrt()方法
Math.cbrt = Math.cbrt || function (x) {
return Math.pow(Math.abs(x),1/3); // Math.pow(a,b):返回a的b次幂结果
}
// 4.Math.clz32() 将参数转换为32位二进制,并返回前补0的个数
let re3 = Math.clz32(1); // 31
// 对于小数 只考虑整数部分
let re4 = Math.clz32(1.22); // 31
// 左移运算符与该方法的关系
let re5 = Math.clz32(1 << 1); // 30
该方法等同于a*b的形式,但是为什么还需要Math.imul()方法?
// Math.imul() 求两个数32位无符号整数形式之积 并返回32位无符号整数形式的结果
let re1 = Math.imul(0x7fffffff, 0x7fffffff); // 1
a **= a;//等于 a=a*a
a ***= a;//等于 a=a*a*a
// BigInt 用来表示整数,没有位数限制,因此能精确表示任何位数
const a = 2172141653n;
const b = 15346349309n;
// BigInt 可以保持精度
a * b // 33334444555566667777n
// 普通整数无法保持精度
Number(a) * Number(b) // 33334444555566670000
// BigInt类型需要加后缀n
// 普通数字
1n + 2n; // 3n
// 各种进制表示
0b1101n // 二进制
0o777n // 八进制
0xFFn // 十六进制
// BigInt类型与普通整数是两种值,两者并不相等
(1n === 1); // false
// typeof对BingInt返回bigint
(typeof 1n); // bigint
-42n // 正确
+42n // 报错
BigInt(123);// 123n
BigInt("123"); // 123n
BigInt(true); // 1n
BigInt(false); // 0n
继承了Object对象的两个方法:
继承了Number对象的一个实例方法:
自身提供三个静态方法:
数学运算:
—— 评论区 ——