变量类型
一、值类型vs引用类型
值类型
数据会直接存储到自己的栈中(互不干涉)
let a = 100
let b= a
a = 200
console.log(b)//100
引用类型
let a = {age:20}//先向堆中申请一个内存地址存储{age:20}
let b = a //复制的其实是a的内存地址
b.age = 21
console.log(a.age)//21 b.age修改了a的内存地址的数据,所以a.age=21
因为考虑到我们性能和存储的问题,所以值类型的占用空间比较少,可以直接复制。
引用类型可能是一个json,他可能非常的大,如果直接放到栈里复制会非常大,不好管理,如果直接复制值会非常的慢,所以需要先放到堆里。
二、常见值类型
(1)undefined
(2)number
(3)字符串
(4)布尔值
(5)Symbol
三、常见引用类型
(1) 对象
(2)数组
(3)null(特殊引用数据类型)
(4)函数(特殊引用数据类型)
四、typeof运算符
1. typeof可以判断所有值类型
let a ; typeof a //undefined
const str = 'abc'; typeof str // 'string'
const n = 100; typeof n // 'number'
const b = true; typeof b //'boolean'
const s = Symbol('s') typeof s //'symbol'
2.typeof可以判断函数
typeof console.log //'function'
typeof function(){} //'function'
3. 能识别引用类型(不能再继续识别,只能判断为Object,不能判断是数组类型,还是对象类型)
typeof null // 'object'
typeof ['a','b'] //'object'
typeof {x:100} //'object'