各种数据类型对应的值的特点
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()去判断是不是NaNNumber.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