likes
comments
collection
share

[iOS 从零单排] js基础系列-数值JavaScript主要看阮一峰老师的JavaScript 教程,这一阶段打算快

作者站长头像
站长
· 阅读数 40

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

NaNJavaScript 的特殊值,表示“非数字”(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,只对数值有效,如果传入其他值,会被先转成数值。

  1. 传入字符串
isNaN('Hello') // true
// 相当于
isNaN(Number('Hello')) // true
  1. 传入对象和数组
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
评论
请登录