JavaScript 数据类型
先来回顾一下JavaScript里的数据类型。
基本数据类型:string number undefined boolean null symbol(es6新增);
数据类型之间相互转换:
1,隐式转换 10-‘1’=9
2,强制类型转换 Number(); parseInt(); parseFloat(); String(); Boolean()等等
引用数据类型:统称Object对象,主要包括对象,数组和函数。Array Object Math Function…
地址传递
先看一段代码
var a =10;
var b = a;
b = 20;
console.log(a);//得出结果10
console.log(b);//得出结果20
b被修改后,a并没有被修改。
再来看下一段代码
var c = [1,2,3];
var d = c;
d.push(4);
console.log(d);//得出结果[1,2,3,4]
console.log(c);//得出结果[1,2,3,4]
我们再新的d中添加了一个4,但原来的c也被修改了。
以上就展示了基本数据类型和引用数据类型的区别。
基本数据类型中是值,引用数据类型中对应的是地址。地址被修改后c和d只要引用的是一个地址就以最终修改的为准。
小结一下:
赋值的时候,基本数据类型只是值的赋值,引用数据类型赋值的时候不仅仅是值的赋值,还是引用的传递(地址)。
拷贝对象
var a = {
name:"张三",
sex:"男"
}
var b = a;
以上这种,当b被修改,a也会被修改。当再想使用原来的a,就无法使用了,因为已经被修改了。
还是以上的代码。
var a = {
name:"张三",
sex:"男"
}
//警告:这里 a 是个对象,并不是键值对数组
function clone(o){
var obj = {}
for(attr in a){
obj[attr] = o[attr]; //attr属性,a[attr]属性值
}
return obj;
}
var b = clone(a);
console.log(b);//打印出{name:"张三","男"}
以上,当b被修改,a不会被修改。
实际应用中,会有这种情况。一个网页登陆对象,另一个页面要用这个登陆对象。网页登陆对象会被存储起来,这个登陆对象需要被另一个人使用时,登陆对象被改变,但原有的对象禁止被改变。就要拷贝对象了。
才疏学浅,如有不当之处,特请指正,感激不尽。