博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
数组空值empty
阅读量:5019 次
发布时间:2019-06-12

本文共 1452 字,大约阅读时间需要 4 分钟。

Array构造函数只带一个数字参数时(否则是作为填充),该参数会被作为数组的预设长度,而非填充一个元素,因此数组内是空单元

如果一个数组中存在一个空单元,即length的值大于实际单元数,这样的数组称为稀疏数组

var a = (new) Array(3) // 目前chrome返回[empty * 3], 之前好像是[undefined * 3]// new可用可不用,不用的话内部会自动添加var b = [undefined, undefined, undefined]var c = []c.length = 3 // 目前chrome返回[empty * 3], 之前好像是[undefined * 3]

就之前的返回值来看a,b,c很一致,但空单元与undefined并不相同

a.map(function(v,i){ return i; }); // 目前chrome返回[empty * 3], 之前是[undefined * 3]b.map(function(v,i){ return i; }); // [0, 1, 2]var d = ['a', 'b', 'c', 'd']delete d[1]d.map((item, index) => {  return {    item,    index,  }})// (4) [{item: "a", index: 0}, empty, {item: "c", index: 2}, {item: "d", index: 3}]

好在现在返回的是empty而非undefined,可以得到识别

然而某些方法如join在对待空单元的表现与undefiend一致

a.join('-'); // "--"b.join('-'); // "--"//实现参考如下function fakeJoin(arr,connector) {  var str = "";  for (var i = 0; i < arr.length; i++) {  // 它主要考虑的是数组长度,这个是关键    if (i > 0) {    str += connector;    }    if (arr[i] !== undefined) {      str += arr[i];    }  }  return str;}

想要填充undefined在数组中而非empty可以使用如下表达式

var arr = Array.apply(null, { length: 3 }) // [undefined, undefined, undefined]// apply第二参数要求是数组或类数组(存在length属性)

ES6添加了Array.of()方法来初始化数组,在只填入一个参数的情况是作为数组的填充而非设置长度

var array1 = Array.of(3) //[3]var array2 = Array.of(1,2,3) //[1,2,3]//模拟function arrayOfLike() {  return [].slice.call(arguments)  // return [...arguments] ES6}// orfunction arrayOfLike(...rest) { return rest }

转载于:https://www.cnblogs.com/guanine/p/9216950.html

你可能感兴趣的文章
java性能调优工具
查看>>
C# 其他的Url 文件的路径转化为二进制流
查看>>
cmake使用
查看>>
构造方法和全局变量的关系
查看>>
ArrayList的使用方法
查看>>
面向对象高级
查看>>
Bitwise And Queries
查看>>
oracle连接问题ORA-00604,ORA-12705
查看>>
NOI 2019 退役记
查看>>
Java从零开始学十三(封装)
查看>>
Python2和Python3中的rang()不同之点
查看>>
记忆--1.致我们不可缺少的记忆
查看>>
lintcode28- Search a 2D Matrix- easy
查看>>
react项目
查看>>
C# 万年历 农历 节气 节日 星座 星宿 属相 生肖 闰年月 时辰(转)
查看>>
A Simple Tree Problem
查看>>
Modular Inverse [ZOJ 3609]
查看>>
MySQL性能测试工具之mysqlslap使用详解
查看>>
深入理解jsonp跨域请求原理
查看>>
regsvr32注册COM组件失败
查看>>