zoukankan      html  css  js  c++  java
  • [] !== [] is true

    这周工作看见一个小伙伴给我私信发了这样的一个问题,我深剖了一下,希望大家能早点脱掉这个坑。

    Question:

    如果定义了一个空数组,在开发过程中经常会做这样的一个判断,就是这个数组里发生变化不再是空进行的逻辑处理。

    那么这个小伙伴就问我为什么一定要写城 arr.length !== 0 , 而不可以写成 arr !== [] 呢?

    Step1:实践是检验真理的唯一标准,那么我们来实操一下

    let arr = []
    // 我们分别输出以下几个
    console.log(arr == [])
    console.log(arr === [])
    console.log(arr !== [])

    Step2:打开控制台来解开疑惑

    Step3:实操告诉我们

    // 要是判断一个数组是否为空,我们不能写成 arr !== []
    // 以下为正确写法,小伙伴请记住
    let arr = []
    if (arr.length !== 0) {
       pass  
    }

    写在最后:

    arr=[] 创建一个新的数组,并将对它的引用分配给变量。任何其他引用不受影响,但仍指向原始数组
    
    arr.length = 0 修改数组本身。如果通过不同的变量访问它,那么仍然可以获得修改后的数组

    // 看下面的一些demo

    var foo = [1,2,3];
    var bar = [1,2,3];
    var foo2 = foo;
    var bar2 = bar;
    foo = [];
    bar.length = 0;
    console.log(foo, bar, foo2, bar2);

    // [], [], [1, 2, 3], []


    // foo=[] 创建一个新的数组,并将对它的引用分配给变量。任何其他引用不受影响,但仍指向原始数组

    // foo.length = 0 修改数组本身。如果通过不同的变量访问它,那么仍然可以获得修改后的数组

  • 相关阅读:
    BZOJ 2588
    BZOJ 3524
    BZOJ 3932
    Bzoj1013--Jsoi2008球形空间产生器
    Codevs1743--反转卡片
    Bzoj1208--Hnoi2004宠物收养所
    Bzoj1112--Poi2008砖块Klo
    后缀自动机学习笔记
    Bzoj1588--Hnoi2002营业额统计
    Bzoj1056--Haoi2008排名系统
  • 原文地址:https://www.cnblogs.com/sweet-ice/p/11337285.html
Copyright © 2011-2022 走看看