数据类型

原始类型

网上很多说JavaScript的原始(基本)数据类型答案都是错的。

正确的是这样:

原始(基本)数据类型6种:String,Number,Boolean,Null,Undefined,Symbol

最新的 stage 3,有一个新的原始类型 BigInt,等到 stage 4 的时候,就正式成为 Symbol 之后的又一个原始类型。 

ES6的官方文档是这么写的:

对象类型

除了原始类型都是对象类型

知识点

1. 原始数据类型存的是值,对象类型存的是地址

2. typeof

  对于基本类型,typeof可以准确判断

  对于对象类型,typeof只能区分function和非function

3. intanceof

  对于基本类型,intanceof无法做出判断(除非写成形如这样:new String('') instanceof String)

  对于对象类型,一般情况下能够准确区分,但是如果class的static function Symbol.hasInstance 被改写了,那这个class的instanceof就不一定是想要的结果了

class Person {
    static [Symbol.hasInstance](val) {
        return typeof val === 'number'
    }
}

123 instanceof Person; // true

4. 对象类型转原始类型

  如果有Symbol.toPrimitive,则用这个,否则依次尝试valueOf toString,如果3个方法都不能把对象转成基本类型,就报错

5. 四则运算

  加法:如果其中一方是字符串,都转成字符串;如果其中一方,非数字、非字符串,转数字或者字符串

  加法以外:都转成数字

6. 比较运算

  对象:通过Symbol.toPrimitive来转换

  字符串:转化为第一个字符的 unicode 索引

原文地址:https://www.cnblogs.com/amiezhang/p/11298363.html