数据类型
一共有六种的基本数据类型 : string number boolean null undefinded symbol bight 复杂数据类型就不说了 有数组啊 对象啊 函数啊 Map等
基本数据类型和复制数据类型的区别
- 存储方式的区别 基本数据类型是存储在栈中的 而复杂数据类型的引用是存储在栈中 但是真正的值是存储在堆中 栈中存储的引用指向堆中的数据
- 复制方式的区别 基本数据类型复制的是值 而复制的数据类型复制的是引用 例如
let a = 2;
let b = a;
b = 12;
console.log(a) // 2
console.log(b) // 12
let obj = {name: 'mary', age: 12};
let obj_1 = obj;
obj_1.age = 13;
console.log(obj) // {name: 'marty', age: 13};
// 因为是引用的复制 所以obj obj_1都指向的是同一个地址 所以 当obj_1改变的时候 则 obj对应的值也会改变
console.log(obj_1) // {name: 'mary', age: 13};
// 当 obj_1 重新指向为另一个值 也就是说两个指向的不是同一个地址
obj_1 = {name: 'jack'};
console.log(obj) // {name: 'marty', age: 13};
console.log(obj_1) // {name: 'jack'};
- 访问方式的区别 基本数据类型访问的是值 而复制的数据类型访问的是引用
判断是否是复杂数据类型还是简单数据类型
- 通过
typeof关键字去判断 注意 通过typeof null得到的是object
let n1 = 12;
let str1 = 'a;
let bool = true;
let un = undefined;
let a = null;
typeof n1; // number 注意 得到的数据是字符串的数据类型typeof typeof str // string
typeof bool // boolean
typeof un // undefined
typefo a // object
typeof {} // object
typeof function(){} // function
typeof [] // object
可以看到 typeof对于基本数据类型比较好判断 除了 null得到的是object 其他的都是正常的 但是对于复制的数据类型 因为在``js中复杂的数据类型都是对象 所以 得到的都是 object 函数特殊 会得到function
填个坑 还可以使用 instanceof 和 Object.prototype.toString.call() 的方式