• js-数组空位


    什么是数组空位?

    比如:let args=[,,,],它就是数组空位

    数组空位定义:在《数组的初始化》中提到,"数组元素可以在元素列表的开头,中间或结尾处省略。每当元素列表中的逗号前面没有AssignmentExpression(即,逗号在另一个逗号的开头或之后),丢失的数组元素就会增加Array的长度并增加后续元素的引索。未定义省略的数组元素。如果一个元素被省略在数组的末尾,则该元素不会对数组的长度产生影响"
    让我们了解一下:在浏览器控制台输出

    1.let args = [,,,]
    2.args.length = 3
    3.Array.prototype.slice.call(args)
    4.(3)[empty x 3]
    5.args[0]
    6.undefined
    

    从上面可以看出,args中存在空位(逗号的前或后不存在表达式),且空位的值是undefined,那么就会问,这样是不是跟传入undefined值是一样的呢?
    那我们就定义一个args_unfied,其中传入的值为undefined:

    1.let args_unfied = [undefined,undefined,undefined]
    2.args_unfied.length = 3
    3.Array.prototype.slice.call(args_unfied)
    4.(3) [undefined, undefined, undefined]
    5.args_unfied[0]
    6.undefined
    

    由上面可以看到,第3行的执行结果第四行不一样,由此可以得出结论,空位数组中不存在数组索引

    那我们就深入探讨一下究竟哪里不一样:
    args.hasOwnProperty(0) = false //说明没有索引
    Object.keys(args)
    []//说明没有索引
    args_unfied.hasOwnProperty(0) =true
    Object.keys(args_unfied)
    (3) ["0", "1", "2"]
    -----------------------------------
    //Array.prototype.reduce(fn)传入一个函数,累加器
    args.reduce((x,y) =>x+y) //无法执行空数组
    //VM1490:1 Uncaught TypeError: Reduce of empty array with no initial value
    //    at Array.reduce (<anonymous>)
    //    at <anonymous>:1:6
    args_unfied.reduce((x,y) =>x+y) //NaN  非数字相加为NaN
    -----------------------------------
    Araay.prototype.every(fn) //数组中所有值都符合条件则返回true,如果数组中检测到有一个元素不满足,则整个表达式返回 false ,且剩余的元素不会再进行检测,且不会对空数组进行检测
    args.every(x=>y)//不管y的值是什么,都返回true,默认返回true,跳过检测
    args_unfied.every(x=>x==undefined) //true
    

    由上面可以看到,对于大部分Array的方法,空数组都无法正确检测,所有经量要避免出现空数组的出现

  • 相关阅读:
    docker知识复习
    记住left join最简单的方式(转)
    ingress rewrite 配置文件的结构 + server_name和location这两条指令的配置来匹配要 虚拟主机
    PAM unable to dlopen(/lib/security/pam_limits.so): /lib/security/pam_limits.so: wrong ELF class: ELFCLASS32
    iRedMail退信问题的解决(转)
    curl NSS error -8179 (SEC_ERROR_UNKNOWN_ISSUER)
    看进程的启动时间长度 + vmstat + jstack 应用
    Nginx日志中的金矿
    php-fpm参数优化
    PHP扩展--opcache安装及配置
  • 原文地址:https://www.cnblogs.com/zzw-847776943/p/12467981.html
Copyright © 2020-2023  润新知