console.log(obj1.a === obj2.a); //比较值和地址,值一样,但是地址不应该是不同的吗?为什么是true呢

console.log(obj1.a === obj2.a); //比较值和地址,值一样,但是地址不应该是不同的吗?为什么是true呢


<!DOCTYPE html>

<html lang="en">

  <head>

    <meta charset="UTF-8" />

    <meta http-equiv="X-UA-Compatible" content="IE=edge" />

    <meta name="viewport" content="width=device-width, initial-scale=1.0" />

    <title>Document</title>

  </head>

  <body>

    <script>

      var obj1 = {

        a: 1,

        b: 2,

        c: [44, 55, 66],

      };


      //   var obj2 = obj1;

      //   console.log(obj2);//不克隆

      //   console.log(obj1 == obj2);//是一个数组,证明了不克隆,仍然是一个对象


      // 下边我们来浅克隆

      // 只克隆对象的表层,如果对象的某些属性值又是引用类型,则不进一步克隆它们,只是传递它们的引用,使用for...in...循环即可实现对象的浅克隆


      var obj2 = {};

      for (var k in obj1) {

        obj2[k] = obj1[k];

      }

      console.log(obj2);


      console.log(obj1.a == obj2.a); //基本类型比较的是值,本来就相等

      console.log(obj1.a === obj2.a); //比较值和地址,值一样,但是地址不应该是不同的吗?为什么是true呢

      console.log(obj1.c == obj2.c); //引用类型比较的是地址


      //   浅克隆,比如c属性的值是引用类型值,那么本质上obj1和obj2的属性是内存中同一个数组,并没有被克隆分开。

      obj1.c.push(77);

      console.log(obj2); //也加上了77.说明是浅克隆了,这里的引用类型值没有被克隆

    </script>

  </body>

</html>



正在回答

登陆购买课程后可参与讨论,去登陆

1回答

同学你好,如下注释已经解释该问题了:

https://img1.sycdn.imooc.com//climg/61849574098897f009390087.jpg

obj1.a的值是数字1,obj12.a的值也是数字1,数字是基本类型;而基本类型不论是“==”还是“===”,比较的是“值”(不是地址)。由于1和1,数值是相等的,所以console.log(obj1.a === obj2.a)是true。

祝学习愉快!


  • qq_慕仰20210716 提问者 #1

    老师,所以说基本类型值,==比较的是值,===比较的也是值吗,我之前记的是基本类型===比较的是值和地址。老师,我记错了吗

    https://img1.sycdn.imooc.com//climg/6184eeec092b9bf307080141.jpg

    2021-11-05 16:44:29
  • 同学你好,记错了。基本类型,==只比较值是否相等,===既要比较值,又要比较类型是否相等。比如:

    https://img1.sycdn.imooc.com//climg/6184feb80902c92211680201.jpg

    祝学习愉快!

    2021-11-05 17:52:37
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师