Open
Description
1. 基本数据类型
- null
- undefined
- boolean
- string
- number
- symbol(es6)
2. 引用类型
- Object
- Array
- Function
- RegExp
- Date
- 单体内置对象:Global,Math
- 基本包装类型:Boolean,Number,String
3.应用场景
- 基本包装类型
var s1 = "some text";
var s2 = s1.substring(2);
第2行代码访问s1时,访问过程处于一种读取模式,也就是要从内存中读取这个字符串的值,而在读取模式中访问字符串时,后台都会自动完成下列处理:(1)创建String类型的一个实例;(2)在实例上调用指定的方法;(3)销毁这个实例;
可以想象成执行了以下代码
var s1 = new String("some text");
var s2 = s1.substring(2)
s1 = null
注:引用类型和基本包装类型的主要区别在于对象的生存期,使用new操作符创建的引用类型的实例,在执行流离开当前作用域之前都一直保存在内存中;而自动创建的基本包装类型的对象,只存在于一行代码执行瞬间,然后立即被销毁;
- null不是对象
虽然 typeof null 会输出 object,但是这只是 JS 存在的一个悠久 Bug。在 JS 的最初版本中使用的是 32 位系统,为了性能考虑使用低位存储变量的类型信息,000 开头代表是对象然而 null 表示为全零,所以将它错误的判断为 object
- 0.1+0.2为什么不等于0.3?
0.1和0.2在转换成二进制后会无限循环,由于标准位数的限制后面多余的位数会被截掉,此时就已经出现了精度的损失
- 函数参数
函数传参的时候传递的是对象在堆中的内存地址值
参考
- 红宝石书
- JS数据类型之问——概念篇