第三章------------不可修改的原始值与可修改的对象引用

1. JavaScript中的原始值(undefined、null、布尔值、数值和字符串)与对象(包括数组和函数)有一个本质的区别。
2. 原始值:是不可修改的,即没有办法改变原始值
理解:
①数值和布尔值:修改一个数值的值没什么用。
②字符串:字符串类似字符数组,JavaScript不允许修改某个索引位置的字符。
所有看起来返回一个修改后字符串的字符串方法,实际上返回的都是一个新字符串。
let s = "hello";//一个全部小写的字符串
s.toUpperCase();//返回"HELLO",但不会修改s
s//"hello",原始字符串并未改变

3. 原始值是按值比较的,即两个值只有在它们的值相同的时候才是相同的。

例如,在比较两个不同的字符串时,当且仅当这两个字符串长度相同并且每个索引的字符也相同时,JavaScript才认为它们相等。

4. 对象不同于原始值,对象是可修改的,即它们的值可以改变

let o = {x:1};//先声明一个对象
o.x = 2;//修改:改变他的一个属性的值
o.y = 3;//修改:为他添加一个新属性
let a = [1,2,3];//声明一个数组
a[0] = 0;//修改:改变数组中一个元素的值
a[3] = 4;//修改:为数组添加一个新元素
注意: 对象不是按值比较的,两个不同的对象即使拥有完全相同的属性和值,它们也不相等。同样,两个不同的数组,即使每个元素都相同,顺序也相同,它们也不相等。
let o = {x:1},p = {x:1};//两个对象,拥有相同的属性
o === p;//false:不同的对象永远也不会相等
let a =[],b= [];//两个不同的空数组
a === b;//false:不同的数组永远也不会相等
5. 对象有时候被称作引用类型(reference type),对象值就是引用,对象是按引用比较的。
两个对象值当且仅当它们引用同一个底层对象时,才是相等的。
let a = [];//声明一个空数组
let b = a;//现在b引用了同一个数组
b[0] = 1;//修改变量b引用的数组
a[0];//1:变化也能通过变量a看到
a === b;//true:a和b引用了同一个对象,所以他们相等

6. 把对象(或数组)赋值给一个变量, 其实是在赋值引用,并不会创建对象的新副本。如果想创建对象或数组的新副本,必须显式复制对象的属性或数组的元素

let a = ["a","b","c"];//想要复制的原数组
let b = [];//想要复制的另一个数组
for(let i = 0;i<a.length;i++){//对a[]中的每个索引
    b[i] = a[i]; //把a的元素复制到b中
}
let c = Array.from(b);//在ES6中,可以使用Array.from()复制数组

7.如果要比较两个不同的对象或数组,必须比较它们的属性或元素。

function equalArrays(a,b){
    if(a === b) return true;//同一个数组相等
    if(a.length !== b.length) return false;//大小不同的数组不相等
    for(let i = 0;i < a.length;i++){//循环遍历所有元素
        if(a[i] !== b[i]) return false;//两个数组下标相同,对应元素不相等,两个数组不相等
    }
    return true;//否则,两个数组相等
}

  • 8
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值