镇楼图
![](https://img2022.cnblogs.com/blog/2146310/202204/2146310-20220422024929370-1979469318.jpg)
Pixiv:DSマイル
一、值属性、函数
globalThis
JS有全局对象,但是在不同环境中全局对象均不同。在Web环境中,window、self、frames取得全局对象,在Web Workers环境中self为全局对象,在Node环境中global为全局对象。这样子并不统一,于是globalThis成了任意环境下统一的一个全局对象
console.log(globalThis);
//在浏览器环境中会显示Window
NaN
NaN表示非数字,在Number中也有,它代表了不可运算,任何与NaN的运算都会返回NaN
但是如果要判断值是否为NaN,则需要使用isNaN方法来判断,NaN与任何值包括自身逻辑运算都是false
isNaN和Number.isNaN的区别是isNaN会先尝试将类型转换成NaN才判断值是否为NaN,而Number.isNaN不会进行类型转换
console.log(NaN === NaN);//false
console.log(isNaN("hello"));//true
console.log(Number.isNaN("hello"));//false
isFinite()
Number类型大致分为有限值、NaN、正无穷、负无穷。isFinite用来判断值是否为有限值
console.log(isFinite(0/0));//false
console.log(isFinite(3.1415926));//true
parseFloat(str)
console.log(parseFloat("3.1415926"));
//将输入转换为浮点数
//若转换失败则返回NaN
parseInt(str, radix)
console.log(parseInt("3.14"));//3
console.log(parseInt("15", 8));//13
//将输入根据radix进制转换为十进制整数
//radix最多36,默认为10
//若转换失败则返回NaN
二、Boolean
Boolean是boolean原始类型的包装类,除了转换原始值的方法外没有任何属性、方法
转换原始值 | 返回 |
---|---|
Boolean.prototype.toString() | "true"或"false" |
Boolean.prototype.valueOf() | Boolean类型原始值 |
三、Math
Math可提供常用的数学方法,但仅用于Number类型,不支持BigInt类型
常用属性
常用属性 | 说明 |
---|---|
Math.E | \(e\) |
Math.LN2 | \(ln~2\) |
Math.LN10 | \(ln~10\) |
Math.LOG2E | \(log_2e\) |
Math.LOG10E | \(lg~e\) |
Math.PI | \(π\) |
Math.SQRT1_2 | \(\frac{1}{\sqrt{2}}\) |
Math.SQRT2 | \(\sqrt{2}\) |
三角函数
对于三角函数而言,返回的是弧度制而非角度制
三角函数 | 说明 |
---|---|
Math.sin(x) | \(sin(x)\) |
Math.sinh(x) | \(sinh(x)\) |
Math.asin(x) | \(arcsin(x)\) |
Math.asinh(x) | \(arcsinh(x)\) |
Math.cos(x) | \(cos(x)\) |
Math.cosh(x) | \(cosh(x)\) |
Math.acos(x) | \(arccos(x)\) |
Math.acosh(x) | \(arccosh(x)\) |
Math.tan(x) | \(tan(x)\) |
Math.tanh(x) | \(tanh(x)\) |
Math.atan(x) | \(arctan(x)\) |
Math.atanh(x) | \(arctanh(x)\) |
Math.atan2(y,x) | \((x,y)\)与\((0,0)\)构成的直线与x轴正方向间的弧度 |
指数、对数方法
指数、对数方法 | 说明 |
---|---|
Math.sqrt(x) | \(\sqrt{x}\) |
Math.cbrt(x) | \(x^3\) |
Math.exp(x) | \(e^x\) |
Math.expm1(x) | \(e^x-1\) |
Math.log2(x) | \(log_2(x)\) |
Math.log10(x) | \(lg(x)\) |
Math.log(x) | \(ln(x)\) |
Math.log1p(x) | \(ln(x+1)\) |
数论方法
数论方法 | 说明 |
---|---|
Math.sign(x) | 根据正负性、0以及特殊情况返回1,-1,0,-0,NaN 1代表正数,-1代表负数 |
Math.abs(x) | \(|x|\) |
Math.ceil(x) | \(⌈x⌉\) |
Math.floor(x) | \(⌊x⌋\) |
Math.round(x) | 返回四舍五入后的整数 |
Math.trunc(x) | 返回数的整数部分 |
Math.hypot(x,[y,...]) | \(\sqrt{∑i^2}\) 返回所有参数平方和之和的平方根 |
Math.max([x,y,...]) | 返回所有参数中的最大值 若没有参数返回Infinity |
Math.min([x,y,...]) | 返回所有参数中的最小值 若没有参数返回Infinity |
Math.random()可以返回0~1均匀分布的随机数,这个函数虽然非常简单,但若读者有概率统计的基础,这个方法将会变得非常复杂且有用。
二进制相关方法
二进制相关方法 | 说明 |
---|---|
Math.clz32(x) | 将数转成32位无符号二进制数后 返回开头0的个数 如\(Math.clz32(2)=30\) |
Math.fround(x) | JS内置使用64位双浮点数 此方法可以转成最接近32位单浮点数的数 但本质依然是64位双浮点数 |
Math.imul(a,b) | 先将参数转换位32位整数再相乘(一般没什么用) |
■fround方法使用中如果超出了32位单浮点数的范围,则会返回无穷大
console.log(2 ** 150);//某个非常大的数
console.log(Math.fround(2 ** 150));//Infinity
四、Number
特殊值
属性 | 说明 |
---|---|
Number.NaN | 同NaN |
Number.NEGATIVE_INFINITY | 负无穷 |
Number.POSITIVE_INFINITY | 正无穷 |
关于无穷大的运算比较特殊
■0与无穷相乘为NaN
■无穷与无穷相除为NaN
■无穷相加减任何有限值都是本身
■正无穷乘正值(包括正无穷)为正无穷
■正无穷乘负值(包括负无穷)为负无穷
■负无穷乘正值(包括正无穷)为负无穷
■负无穷乘负值(包括负无穷)为正无穷
■除法在被除数是无穷除数是有限值的情况下与乘法相同
■任意数除以无穷为0
转换原始值
转换原始值 | 说明 |
---|---|
Number.prototype.toString([radix]) | radix默认为10 根据进制来转成String值 |
Number.prototype.valueOf() | 返回原始值 |
String转Number
String转Number | 说明 |
---|---|
Number.parseFloat(str) | 参考parseFloat方法 |
Number.parseInt(str,[radix]) | 参考parseInt方法 |
Number转String
Number转String | 说明 |
---|---|
Number.prototype.toLocaleString(locales, options) | 详细见MDN,根据应用来输出不同格式的字符串 |
Number.prototype.toExponential([fracDigits]) | 按科学计数法来输出字符串 fracDigits指定小数位,默认用尽可能多的小数位 |
Number.prototype.toFixed([digits]) | 按digits即保留小数位位数的多少来输出 digits默认为0 |
Number.prototype..toPrecision([precision]) | 按precision即有效数字个数来输出 忽略pricision行为类似于toString方法 |
双浮点数的内部属性
内部属性 | 说明 |
---|---|
Number.MAX_VALUE | 最大正值,接近1.79E+308 |
Number.MIN_VALUE | 最小正值,接近5e-324 |
Number.MAX_SAFE_INTEGER | 最大安全整数,9007199254740991 |
Number.MIN_SAFE_INTEGER | 最小安全整数,-9007199254740991 |
Number.EPSILON | 1与超过1的最小浮点数的差值 |
MAX_VALUE是64位双浮点数的最大表示范围,如果超出则会按Infinty即无穷来处理。而MIN_VALUE则是代表精度的极限范围,如果超出精度范围直接当0处理。由于浮点数的特性,小数有偏差已经是默认情况了,但是整数如果出现偏差则是不被允许的情况(如果你想表达1结果输出2,这肯定是不被允许的),因此另外一个范围是整数的安全范围,在此安全范围内整数一定不会出现偏差。
EPSILON可用于比较浮点数,因为浮点数的偏差一般是不能直接用相等来比较的。而是采用\(|实际值-期望值|<最小精度\)来判断,而最小精度就是EPSILON
console.log(0.1 + 0.2 === 0.3);//false
console.log(Math.abs(0.1 + 0.2 - 0.3) < Number.EPSILON);//true
function EqualFloat(a, b){
//抽象成函数
//a是实际值,b是期望值
//判断a是否等于b
return (Math.abs(a-b) < Number.EPSILON);
}
判断类型方法
判断类型方法 | 说明 |
---|---|
Number.isNaN(x) | 判断是否为NaN |
Number.isFinite(x) | 判断是否为有限值,即不是NaN、Infinity |
Number.isInteger(x) | 判断是否为整数 |
Number.isSafeInteger(x) | 判断是否为安全整数 |
五、BigInt
运算符支持情况
基本的运算符大部分都能支持,>>>
因为要兼容asm.js不能使用也不能使用单目运算符+
。
由于是整数,对于除法来说就变成了整除
就比较运算符而言,它可以和Number无缝连接,但不能使用严格比较符,两者的类型并不相同
转换原始值
转换原始值 | 说明 |
---|---|
BigInt.prototype.toString([radix]) | 详细参考Number,但BigInt后的n并不会算在内 |
BigInt.prototype.valueOf() | 返回BigInt的原始值 |
BigInt转String
BigInt转String | 说明 |
---|---|
BigInt.prototype.toLocaleString(locales,options) | 详细参考Number |
二进制相关方法
二进制相关方法 | 说明 |
---|---|
BigInt.asIntN(width,bigint) | 返回\(bigint\%2^{width}\)的有符号整数 |
BigInt.asUintN(width,bigint) | 返回\(bigint\%2^{width}\)的无符号整数 |
因为BigInt没有上限值,这两种方法可以有效地设定上限
其中asIntN限制于\((-2^{width},2^{width})\),asUintN限制于\((0,2^{width})\)
const max = 2n ** 64n;//最大值设定在2^64内
function CheckRange(bigint){
//如果相等说明数据在范围内
//否则超出范围,返回异常值undefined
return (BigasUintN(64,bigint) === bigint) ? bigint : undefined;
}
参考资料
[1] 《JavaScrpit DOM 编程艺术》
[2] MDN
[3] 现代JS教程
[4] 黑马程序员 JS pink