var a = 1
var b = a
b++
console.log(a) //1
console.log(b) //2
字符串类型
var q = 'copy'
var s = q
s += '1'
console.log(q)//copy
console.log(s)//copy1
布尔类型
var e = false
var w = e
w = true
console.log(e) //false
console.log(w) //true
数组
splice 截取 会改变原数组
//地址的引用 浅拷贝
var array = [1,2,3,4,5]
var newArray = array
var thArray = newArray.splice(1,3)
console.log(thArray) //[2,3,4]
console.log(newArray) //[1,5]
console.log(array) //[1,5]
//循环到原始类型进行深拷贝
var arr = ['a','b','c','d','e']
var newArr = []
for(var i=0i<arr.lengthi++){
newArr.push(arr[i])
}
var thArr = newArr.splice(1,3)
console.log(thArr) //["b", "c", "d"]
console.log(newArr) //["a", "e"]
console.log(arr) //["a", "b", "c", "d", "e"]
对象
//地址的引用 浅拷贝
var obj = {name:'abc',id:'1'}
var newObj = obj
newObj.name='abcde'
console.log(obj) //{name:'abcde',id:'1'}
console.log(obj) //{name:'abcde',id:'1'}
//循环到原始类型进行深拷贝
var object = {name:'321',id:'1'}
var newObject= {}
for (var j in object){
newObject[j]=object[j]
}
newObject.name='abcde'
console.log(newObject) //{name:'abcde',id:'1'}
console.log(object) //{name:'321',id:'1'}
数字 字符串 布尔类型 为原始类型,是值引用
数组 对象类型 为地址引用
值引用为深拷贝
地址引用循环到原始类型可进行深拷贝
var nameArray = ['张三','李四']
var descArray = ['张三是男生','李四也是男生']
var allArray = []
var tableObj={}
for(let i=0i<nameArray.lengthi++){
tableObj.name=nameArray[i]
tableObj.desc=descArray[i]
allArray.push(tableObj)
}
console.log(allArray) //{name: "李四", desc: "李四也是男生"}
//{name: "李四", desc: "李四也是男生"}
var nameArray = ['张三','李四']
var descArray = ['张三是男生','李四也是男生']
var allArray = []
for(let i=0i<nameArray.lengthi++){
var tableObj={}
tableObj.name=nameArray[i]
tableObj.desc=descArray[i]
allArray.push(tableObj)
}
console.log(allArray) //{name: "张三", desc: "张三是男生"}
//{name: "李四", desc: "李四也是男生"}
(1)值类型:字符串、数值、布尔值、undefined、null
(2)引用类型:对象、数组、函数
(1)值类型:
1、占用空间固定,保存在栈中
2、保持和复制的都是值的本身
3、基本数据类型都是值类型
4、一个方法在执行时会创建一个内存栈,并在执行结束后自然销毁,栈里面存储的是基础变量和一些对象的引用变量,基础变量的值是存储在栈中,而引用变量存储在栈中的指向堆中的数组或者对象的地址,这就是为什么 修改引用类型 总会影响到其他这个动作的引用变量。
(2)引用类型:
1、占用空间不固定,保存在堆。
2、保存和复制的是指向对象的一个指针。
3、堆内存的对象不会随方法的结束而被销毁,即使方法结束后,这个对象还可能被另一个引用变量所使用,那么这个对象依然不会销毁,只有一个对象没有任何引用变量引用它时,系统的垃圾回收机制才会去核实的时候回收它。
(1)动态属性;定义基本类型值和引用类型值的方式是类似的。但是,当这个值保存到变量中以后,对不同类型值可以自行的操作大相径庭。对于引用类型的值,我们可以为它已经属性和方法,也可以改变和删除其属性的方法,但是,我们不能给基本类型的值添加属性,只能给引用类型值动态的添加属性,以便将来使用。
(2)如果从一个变量向另一个变量复制基本类型值,会在变量对象上创建一个新值,然后把该值分钟到为新变量分配的位置上。
(3)传递参数;在向参数传递基本类型的值时,被传递的值会分钟给一个局部变量(即命名参数)。在向参数传递引用类型的值时,会把这个值在内存中的地址复制给一个局部变量,因此这个局部变量的变化会反映在函数的外部。