#

各种数据类型对应的值的特点

# 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(所以像有构造类型的基本类型numberstringboolean又被称为包装类型

    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)