# 值
各种数据类型对应的值的特点
# Number
JS
只有一种数值类型,包含"整数"
、带小数的十进制数
(JS
没有严格意义上的整数)。
JS
中的数字类型
是基于IEEE 754
标准实现,该标准被称为"浮点数"
,JS使用"双精度"
格式。
# 数字的语法
- 小数点前后如果只有0,可省略0(例:
.3
/3.
但不建议这么写) - 特大和特小数默认用指数格式(
50000000000
===5E10
) - 数字支持
二进制
、八进制
、十六进制
(ES6严格模式
不在支持0363八进制
)
# 数字中需要注意的地方
# 0.1 + 0.2 竟然不等于 0.3 ???
原因:
二进制浮点数
精度不准确。0.1 + 0.2
接近0.30000000000000004
如何才能判断0.1 + 0.2 === 0.3
呢?
这里要引进一个概念
Number.EPSILON
(机器精度
),es6新增,值为2^-52
使用下面方法来比较是否相等:
Math.abs(0.1 + 0.2 -0.3 ) < Number.EPSILON; // true
# 整数的安全范围
目前
JS
中很大的数字
的计算有很多的问题,一般也很少需要使用JS
来处理很大数字的计算,如果有处理很大数字的需求,可以使用比较成熟的第三方的工具库。可以期待以后JS
底层解决此问题。
Number.MAX_SAFE_INTEGER
:9007199254740991(2^53 - 12^53 - 1)
Number.MIN_SAFE_INTEGER
:-9007199254740991
# 特殊数值
# NaN
not a number
可理解为:无效数字
需要注意的点:
NaN != NaN;
// true,JS中唯一一个自己不等于自己isNaN()
和Number.isNaN()
isNaN()
:判断!NaN
,并且不是数字
。isNaN('sss');
的结果为true
。这个方法有bug,所以不要使用isNaN()
去判断是不是NaN
Number.isNaN(...)
:es6新增,判断!NaN
,并且是数字
。能准确判断是否是NaN
# Infinity 无穷数
Number.POSITIVE_INfiNITY
正无穷Number.NEGATIVE_INfiNITY
负无穷
1 / 0; // infinity
-1 / 0; // -infinity
Infinity / Infinity; // NaN
# String
低版本
JS
不允许字符串用[]
取值(用a.charAt(idx)
),能取的也不能通过[]
赋值字符串的函数
不修改原值
,创建并返回一个新字符串
字符串也能通过
.length
获取长度,因为他有构造类型String
(所以像有构造类型的基本类型number
、string
、boolean
又被称为包装类型
)var str = 'hello'; console.log(str.length); // 5 /** * str明明是一个简单类型,为什么会有属性? * 还能通过.length取值? * * 因为string有构造类型String * 当我们str.length的时候,引擎会自动转成String类型,获取length值 * * 我们称有这种行为的数据为 包装类型数据 **/
# Array
数组的函数
大多数都是直接修改原数组
JS
中数组
可以存放任何类型的值
JS
中数组
不用预先设定大小delete arr[index]
可删除数组元素,length
不变(删除后的位置变为了empty
)稀疏数组
:含有empty
的数组(empty的值打印出来显示为undefined)// 如何产生稀疏数组 // 方法1 通过delete var arr = [0, 1, 2, 3]; delete arr[1]; console.log(arr); // [0, empty, 2, 3]
// 如何产生稀疏数组 // 方法2 通过赋值 var arr = [0, 1]; arr[3] = 3; console.log(arr); // [0, 1, empty, 3]
# Object
单开一章写...
如果觉得内容对你有帮助,请点个赞和关注,你们的鼓励是我持续更新下去的动力,比心。
如需转载请注明出处,感恩。
更多内容可先关注GitHub (opens new window)