原始值
都属于不可变类型,一旦创建,无法修改
例如:
let a=9;
变量a存储的是9的内存地址
a=12;给a赋新的值12,会先在内存里找有没有,没有就新创建
创建新的内存地址为0x11
let b=9;先在内存里找有没有9,
9已经存在,就把它的内存地址赋给b
对象
let obj=Object();
obj.name="孙悟空";
obj.age=18;
obj存储的是内存地址0x22
let obj2={};
let obj3={};
虽然obj2和obj3都是{},
但在obj2创建之后,也会为obj3重新开辟一个地址
console.log(obj2===obj3);//false
当两个对象进行相等或者全等比较时,比较的是内存地址
所以,结果为false
let obj4=obj;//把obj的内存地址0x22赋给obj4
console.log(obj4===obj);//true地址相同
obj.name="猪八戒";
标红位置改为猪八戒,
obj4和obj内存地址相同,所以两个的属性值都改变
console.log(obj4.name);//"猪八戒"
console.log(obj.name);//"猪八戒"
总结
修改对象
-修改对象时,如果有其他变量指向该对象,
则指向该对象的所有变量都会收到影响
修改变量
-修改变量时,只会影响当前变量,在使用变量存储对象时,
很容易因为改变变量指向的对象,提高了代码复杂度
所以,通常情况下,声明存储对象的变量时会使用const
注意:const只是禁止变量被重新赋值,对对象的的修改没有影响
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>可变类型</title>
<script>
let a=9;
a=12;
let b=10;
console.log("a=",a);
console.log("b=",b);
let obj=Object();
obj.name="孙悟空";
obj.age=18;
let obj2={};
let obj3={};
console.log(obj2===obj3);//false
let obj4=obj;
console.log(obj4===obj);//true
//obj4={}修改变量
obj4.name="猪八戒";//修改对象
console.log(obj.name);
console.log(obj4.name);
</script>
</head>
<body>
</body>
</html>