JS 的变量类型有哪些
1, 值类型(基本类型):
字符串(string)
数值(number)
布尔值(boolean)
undefined,null
2, 引用类型:
对象(Object)
数组(Array)
函数(Function)
值类型和引用类型的区别
[值类型]
1. 占用空间固定, 保存在栈中, 在当前环境执行结束时销毁
2. 保存和赋值是值的本身
3. 可以使用 typeof 检测数据类型
4. 基本类型数据是值类型
[引用类型]
1. 占用空间不固定, 保存在堆中, 只有在引用的它的变量不在时, 会被垃圾回收机制回收. (引用变量存储在栈中的是指向堆中的数组或者对象的地址 )
2. 保存与复制的是指向对象的一个指针
3. 使用 instanceof 检测数据类型
4. 使用 new()方法构造出的对象是引用型
上述区别代码演示:
- //** 值类型: Number,string,bollean,undefined
- var a = 100
- var b = a
- a = 200
- console.log(b) // 100 保存与复制的是值本身
- //** 引用类型: 对象, 数组, 函数, null(空指针)
- // 可以扩展属性
- var a = {age:20}
- var b = a
- b.age = 21
- console.log(a.age) // 21
- //**type of 能判断哪些类型(问题 1)
- // 所有的值类型
- let a
- console.log(typeof a) //undefined
- console.log(typeof 'abc') //string
- console.log(typeof 100) //number
- console.log(typeof true) //boolean
- console.log(typeof Symbol('s')) //symbol
- // 能判断函数
- console.log(typeof console.log) //function
- console.log(typeof
- function () {}) //function
- // 能判断引用类型(不能再继续识别)
- console.log(typeof null) //object
- console.log(typeof ['a', 'b']) //object
- console.log(typeof {
- x: 100
- }) //object
- // 用 instanceof 来区分引用类型
- // 如果变量是给定引用类型 (根据它的原型链来识别) 的实例, 那么 instanceof 操作符就会返回 true.
值类型和引用类型存储示意图
2-1 值类型和引用类型. PNG
来源: http://www.jianshu.com/p/29a1d1284134