关于js基本类型的容易混淆点,双等号和三等号的区别,基本数据类型和引用数据类型的辨析
javascript里面包含了七种数据类型,其中6种称为基本数据类型(Boolean, null, undefined, Number, String, Symbol),剩下的就是Object对象。
其中:
Boolean: 布尔值,true和false
null: 一个表明 null 值的特殊关键字。 JavaScript 是大小写敏感的,因此 null 与 Null、NULL或其他变量完全不同。
undefined: 变量未定义时的属性。
Number: 表示数字。
String: 表示字符串。
Symbol: ES6新增的数据类型,它的实例是唯一的且不可改变的。
接下来讨论几点比较容易迷惑的地方:
==与===的区别
==是比较值,而===是比较堆地址123456let a = "1";let b = new String("1");console.log(a == b);//trueconsole.log(a === b);//false,因为a和b指向的堆地址不同false的等效值:
- false
- undefined
- null
- 0
- NaN
- 空字符串””
请注意:不要混淆原始布尔值的true和false 与 布尔对象的true和falselet a = new Boolean(false) if(a){ ... //此时将执行代码 } if(a == true){ ... // 此时不会执行代码 }
- 有关于包装类型
ECMAScript还提供了三个特殊的引用类型Boolean,String,Number。我们称这三个特殊的引用类型为基本包装类型,也叫包装对象.也就是说当读取string,boolean和number这三个基本数据类型的时候,后台就会创建一个对应的基本包装类型对象,从而让我们能够调用一些方法来操作这些数据。let str = "12213" let strNum = str.substr(2) /* 当第二行代码访问str时后台有以下操作 1.创建String类型的一个实例 2.在实例上调用指定方法 3.销毁这个实例 */
正因为有第三步这个销毁的动作,所以你应该能够明白为什么基本数据类型不可以添加属性和方法,这也正是基本装包类型和引用类型主要区别:对象的生存期.使用new操作符创建的引用类型的实例,在执行流离开当前作用域之前都是一直保存在内存中.而自动创建的基本包装类型的对象,则只存在于一行代码的执行瞬间,然后立即被销毁
基本数据类型和引用类型的区别详解
js的数据类型|mdn