1. 基本类型
string/number/boolean/null/undefined
2. 引用数据类型
Object(object/array/function)
两者区别:
- 存储位置:
- 基本数据类型存储在栈中,占据固定大小的空间
- 引用数据类型存储在堆中,动态分配内存空间
- 访问机制:
- 因为存储机制不同导致访问机制不一样,堆内存不能直接进行操作,只能通过堆内存在栈内存中对应的引用地址。
- 基本数据类型可以直接操作。
- 引用数据类型通过引用地址找到对应堆内的实体。
- 复制不同:
- 基本数据类型复制的是原始值,
- 引用数据类型复制的是引用地址
- 3. null和undefined的区别及应用
- 1)都是代表没有值
- 2)null表示“没有该对象”,该处不应该有值,undefined表示"缺少值",该处应该有值,但是还没有定义
- 3)转为数值不同:null转为数值为0, undefined转为数值为NaN
- 4)null
- (1)作为函数参数,表示该函数的参数不是对象;
- (2)作为原型链的终点
- (3)typeof null输出是object:计算机只识别0和1,对象为000xxx...开头的(前三位都是0),null代表空指针即000000...前三位也是0所以会被识别为object
- 5)undefined
- (1)变量被声明了但是没有赋值;
- (2)调用函数时应提供的参数没有提供,该参数就等于undefined;
- (3)对象没有赋值操作,该属性的值为undefined;
- (4)函数没有返回值时,默认返回undefined
- 4. typeof NaN
- NaN的数据类型为number
console.log(typeof NaN); // number
NaN(not a number)不是一个数字,表示是否属于number类型的一种状态:是或否,不是一个确切的值, 所以两个NaN不相等。
console.log(NaN == NaN); // false
NaN 若是表达式的返回值,则表示存在不可转化的变量,返回的是一个无效结果,不是一个确切的返回值
var str = 'abc';
console.log(Number(str)); // NaN