zoukankan      html  css  js  c++  java
  • 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的方法,空数组都无法正确检测,所有经量要避免出现空数组的出现

  • 相关阅读:
    android:重写返回键动画
    获得今天零点时间戳(转)
    【转】完美解决Android 9.0以上HTTP网络请求被限制问题
    Java的三种取整方法
    thymeleaf控制checkbox的选中状态回显
    thymeleaf控制checkbox的value值
    Supervisor 简单使用
    关于Requests代理,你必须知道的
    py-spy 常见问题及使用说明
    记一次Scrapy进程卡死的Debug过程
  • 原文地址:https://www.cnblogs.com/zzw-847776943/p/12467981.html
Copyright © 2011-2022 走看看