js类型


关于js基本类型的容易混淆点,双等号和三等号的区别,基本数据类型和引用数据类型的辨析


javascript里面包含了七种数据类型,其中6种称为基本数据类型(Boolean, null, undefined, Number, String, Symbol),剩下的就是Object对象。

其中:
Boolean: 布尔值,true和false
null: 一个表明 null 值的特殊关键字。 JavaScript 是大小写敏感的,因此 null 与 Null、NULL或其他变量完全不同
undefined: 变量未定义时的属性。
Number: 表示数字。
String: 表示字符串。
Symbol: ES6新增的数据类型,它的实例是唯一的且不可改变的。

接下来讨论几点比较容易迷惑的地方:

  1. ==与===的区别
    ==是比较值,而===是比较堆地址

    1
    2
    3
    4
    5
    6
    let a = "1";
    let b = new String("1");
    console.log(a == b);
    //true
    console.log(a === b);
    //false,因为a和b指向的堆地址不同
  2. false的等效值:

  • false
  • undefined
  • null
  • 0
  • NaN
  • 空字符串””
    请注意:不要混淆原始布尔值的true和false 与 布尔对象的true和false
    let a = new Boolean(false)  
    if(a){
      ...
    //此时将执行代码
    }  
    if(a == true){  
      ...
    //  此时不会执行代码
    }
    
  1. 有关于包装类型
    ECMAScript还提供了三个特殊的引用类型Boolean,String,Number。我们称这三个特殊的引用类型为基本包装类型,也叫包装对象.也就是说当读取string,boolean和number这三个基本数据类型的时候,后台就会创建一个对应的基本包装类型对象,从而让我们能够调用一些方法来操作这些数据。
    let str = "12213"
    let strNum = str.substr(2)
    /*
    当第二行代码访问str时后台有以下操作  
    1.创建String类型的一个实例  
    2.在实例上调用指定方法    
    3.销毁这个实例  
    */
    

正因为有第三步这个销毁的动作,所以你应该能够明白为什么基本数据类型不可以添加属性和方法,这也正是基本装包类型和引用类型主要区别:对象的生存期.使用new操作符创建的引用类型的实例,在执行流离开当前作用域之前都是一直保存在内存中.而自动创建的基本包装类型的对象,则只存在于一行代码的执行瞬间,然后立即被销毁
基本数据类型和引用类型的区别详解
js的数据类型|mdn