[iOS 从零单排] js基础系列-数值JavaScript主要看阮一峰老师的JavaScript 教程,这一阶段打算快
JavaScript主要看阮一峰老师的JavaScript 教程,这一阶段打算快速过一遍,主要是记录一些js与oc和swift不同的关键点
整数和浮点数
JavaScript 内部,所有数字都是以64位浮点数形式储存,即使整数也是如此。所以,1与1.0是相同的,是同一个数。
由于浮点数不是精确的值,所以涉及小数的比较和运算要特别小心。
0.1 + 0.2 === 0.3
// false
0.3 / 0.1
// 2.9999999999999996
(0.3 - 0.2) === (0.2 - 0.1)
// false
数值范围
如果一个数大于等于2的1024次方,那么就会发生“正向溢出”,即 JavaScript 无法表示这么大的数,这时就会返回Infinity。
Math.pow(2, 1024) // Infinity
如果一个数小于等于2的-1075次方(指数部分最小值-1023,再加上小数部分的52位),那么就会发生为“负向溢出”,即 JavaScript 无法表示这么小的数,这时会直接返回0。
Math.pow(2, -1075) // 0
NaN
NaN是 JavaScript 的特殊值,表示“非数字”(Not a Number),主要出现在将字符串解析成数字出错的场合。
NaN不是独立的数据类型,而是一个特殊数值,它的数据类型依然属于Number,它参与的任何计算结果都是NaN,例:
5 - 'x' // NaN
Math.acos(2) // NaN
Math.log(-1) // NaN
Math.sqrt(-1) // NaN
0 / 0 // NaN
运算规则也类似
NaN === NaN // false
[NaN].indexOf(NaN) // -1
Boolean(NaN) // false
NaN + 32 // NaN
NaN - 32 // NaN
NaN * 32 // NaN
NaN / 32 // NaN
parseInt()
用于将字符串转为整数,如果不是字符串,则会先转换成字符串再转换为整数,可传两个参数,第二个参数表示进制(2到36之间)
parseFloat()
用于将一个字符串转为浮点数。用法大体与parseInt相近,主要说下与Number函数不同的点:
parseFloat(true) // NaN
Number(true) // 1
parseFloat(null) // NaN
Number(null) // 0
parseFloat('') // NaN
Number('') // 0
parseFloat('123.45#') // 123.45
Number('123.45#') // NaN
isNaN()
用来判断一个值是否为NaN,只对数值有效,如果传入其他值,会被先转成数值。
- 传入字符串
isNaN('Hello') // true
// 相当于
isNaN(Number('Hello')) // true
- 传入对象和数组
isNaN({}) // true
// 等同于
isNaN(Number({})) // true
isNaN(['xzy']) // true
// 等同于
isNaN(Number(['xzy'])) // true
isNaN([]) // false
isNaN([123]) // false
isNaN(['123']) // false
可以注意到当传入空数组和仅有一个数值元素的数组时会被判断为false,因为这些数组能被Number函数转成数值。 这里可以用利用NaN不等于自身的值的这个特点,进行判断:
function myIsNaN(value) {
return value !== value;
}
isFinite()
方法返回一个布尔值,表示某个值是否为正常的数值,除了Infinity、-Infinity、NaN和undefined这几个值会返回false,isFinite对于其他的数值都会返回true
isFinite(Infinity) // false
isFinite(-Infinity) // false
isFinite(NaN) // false
isFinite(undefined) // false
isFinite(null) // true
isFinite(-1) // true
转载自:https://juejin.cn/post/6984973885498212360