基本类型和引用类型
【引用类型】:函数,对象,数组等
引用类型共用同一个空间(内存地址),改变一个值会改变另一个值
引用类型存储在栈和堆中,栈中存储的不是值而是内存地址,堆中存储的还是才是值,所以改变同一个内存地址的对象,会改变所有指向这个内存地址的所有变量
举例:
var a=[1,2,4]
var b=a
b.push(5)
console.log(a)
//此时可以看到控制台输出的a为Array(4),点开后发现数组中有4个值。
和下列情况注意区分
var a=[1,2,4]
var b=[1,2,4]
b.push(5)
console.log(a)
//此时可以看到控制台输出的a为Array(3),并没有变化,因为a和b只是值一样,内存地址不同,并不是引用。
同样的情况在定义字符串时也会有所体现
var a='abc'
var b='abc'
var c=new String('abc')
var d=new String('abc')
console.log(a===b)
//true
console.log(c===d)
//false
console.log(a==c)
//true
console.log(a===c)
//false
这里还要说明一下== 和 ===的区别,由于js中存在类型转换(自动的),==是宽松的比较,===是严格的比较(不会进行自动转换类型)。
【基本类型】:其他类型
基本类型相互独立,互相不受影响,存储在【栈】中,而【栈】存储的是值,所以改变某个值不会影响其他的值