es6 数组的空位

es6 数组的空位数组的空位指,数组的某一个位置没有任何值。比如,Array构造函数返回的数组都是空位。Array(3)//[,,,]上面代码中,Array(3)返回一个具有3个空位的数组。注意,空位不是undefined,一个位置的值等于undefined,依然是有值的。空位是没有任何值,in运算符可以说明这一点。0in[undefined,undefined,undefined]//tr…

大家好,又见面了,我是你们的朋友全栈君。数组的空位指,数组的某一个位置没有任何值。比如,Array构造函数返回的数组都是空位。

Array(3) // [, , ,]

上面代码中,Array(3)返回一个具有 3 个空位的数组。

注意,空位不是undefined,一个位置的值等于undefined,依然是有值的。空位是没有任何值,in运算符可以说明这一点。

0 in [undefined, undefined, undefined] // true 0 in [, , ,] // false

上面代码说明,第一个数组的 0 号位置是有值的,第二个数组的 0 号位置没有值。
ES5 对空位的处理,已经很不一致了,大多数情况下会忽略空位。
forEach() ,  filter() ,  every() 和some()都会跳过空位。
map()会跳过空位,但会保留这个值
join()和toString()会将空位视为undefined,而undefined和null会被处理成空字符串。

// forEach 方法 [,'a'].forEach((x,i) => console.log(i)); // 1 // filter 方法 ['a',,'b'].filter(x => true) // ['a','b'] // every 方法 [,'a'].every(x => x==='a') // true // some 方法 [,'a'].some(x => x !== 'a') // false // map 方法 [,'a'].map(x => 1) // [,1] // join 方法 [,'a',undefined,null].join('#') // "#a##" // toString 方法 [,'a',undefined,null].toString() // ",a,,"

ES6 则是明确将空位转为undefined。

Array.from方法会将数组的空位,转为undefined,也就是说,这个方法不会忽略空位。 Array.from(['a',,'b']) // [ "a", undefined, "b" ] 扩展运算符(...)也会将空位转为undefined。 [...['a',,'b']] // [ "a", undefined, "b" ] copyWithin()会连空位一起拷贝。 [,'a','b',,].copyWithin(2,0) // [,"a",,"a"] fill()会将空位视为正常的数组位置。 new Array(3).fill('a') // ["a","a","a"] for...of循环也会遍历空位。 let arr = [, ,]; for (let i of arr) { console.log(1); } // 1 // 1 上面代码中,数组arr有两个空位,for...of并没有忽略它们。如果改成map方法遍历,空位是会跳过的。 entries()、keys()、values()、find()和findIndex()会将空位处理成undefined。 // entries() [...[,'a'].entries()] // [[0,undefined], [1,"a"]] // keys() [...[,'a'].keys()] // [0,1] // values() [...[,'a'].values()] // [undefined,"a"] // find() [,'a'].find(x => true) // undefined // findIndex() [,'a'].findIndex(x => true) // 0 由于空位的处理规则非常不统一,所以建议避免出现空位。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/135247.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • pycharm 使用 anaconda 环境[通俗易懂]

    pycharm 使用 anaconda 环境[通俗易懂]两个方法一:从annaconda内部打开pycharm这里有个下拉框可以选选择你要的anaconda环境再launch你的pycharm但有时候好像不大灵光还是用不上这个环境二:方法二就是万能方法从pycharm内部来配置环境,非常简单。界面最右上角齿轮图标,点击。找到interpreter这里下拉框可以选,发现没有anaconda的环境,你就showall然后点左上角加号选anaconda环境,再去添加你已经存在的anaconda环境。…

    2022年8月28日
    5
  • Okhttp学习及封装

    Okhttp学习及封装Okhttp1.学习Okhttp2.OkHttp的封装1.学习Okhttp需要导入依赖implementation’com.squareup.okhttp3:okhttp:3.12.1’四个按钮需要写入布局get请求,post请求,下载文件,上传文件别忘了加入SD卡权限,网络权限privatevoidinitView(){get=(Button)…

    2022年10月18日
    2
  • python zipfile_Python 学习入门(16)—— zipfile

    python zipfile_Python 学习入门(16)—— zipfilezipfile是python里用来做zip格式编码的压缩和解压缩的,由于是很常见的zip格式,所以这个模块使用频率也是比较高。zipfile里有两个非常重要的class,分别是ZipFile和ZipInfo,在绝大多数的情况下,只需要使用这两个class就可以。1)ZipFile是主要的类,用来创建和读取zip文件;2)ZipInfo是存储的zip文件的每个文件的信息的。1)简单应用如果你仅…

    2025年12月14日
    3
  • c++二分法查找_二分法查找python代码

    c++二分法查找_二分法查找python代码二分法:二分法应用条件:1)数组为有序数组。2)同时题目还强调数组中无重复元素,因为一旦有重复元素,使用二分查找法返回的元素下标可能不是唯一的。区间的定义:区间的定义不同代码就不同。1)定义target在[left,right]区间while(left<=right)要使用<=,因为left==right是有意义的,所以使用<=。if(nums[middle]>target)right要赋值为middle-1,因为当前这个nums[mid

    2025年6月17日
    4
  • Linux安装Android Sdk「建议收藏」

    Linux安装Android Sdk「建议收藏」在使用Jenkins+Gitlab集成自动化打包时,遇到Linux缺少AndroidSdk环境的问题,单独记录一下安装过程。sdk安装方式常规思路,下载sdk,安装之后修改环境。但是发现,网络上已经没有了sdk的下载资源,有的也只是很老的版本。查看Android开发文档——sdkmanager的使用指南,发现可以使用sdkmanager这个命令行工具进行下载。下载sdkmanager工具包官网下载页最底部-命令行工具下载,找到Linux平台的工具包使用wget下载到服务器wget-P/h

    2022年7月21日
    25
  • javascript真的是异步的吗?且看setTimeout的实现原理以及setTimeout(0)的使用场景「建议收藏」

    javascript真的是异步的吗?且看setTimeout的实现原理以及setTimeout(0)的使用场景

    2022年1月25日
    56

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号