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
}
// or
function arrayOfLike(...rest) { return rest }

数组空值empty的更多相关文章

  1. (转)Java 中关于String的空对象(null) ,空值(empty),空格

    原文出处:Java 中关于String的空对象(null) ,空值(empty),空格 定义 空对象: String s = null; 空对象是指定义一个对象s,但是没有给该对象分配空间,即没有实例 ...

  2. php利用array_filter()过滤数组空值

    利用array_filter过滤数组空值 <?php $array = array( 0 => '霜天部落', 1 => false, 2 => 1, 3 => null ...

  3. php过滤数组空值

    如果我们想过滤数组里面的空值,例如null,,false,' '等等,可以使用php自带的一个函数,使用起来非常方便简洁: //测试数据 $data = array( '0' => '测试内容1 ...

  4. PHP中删除数组空值的方法

    array_filter函数的功能是利用回调函数来对数组进行过滤,如果没有回调函数,那么默认就是删除数组中值为false的项目. 例如 $entry = array(                0 ...

  5. php 过滤掉多维数组空值

    //过滤掉空值 function filter_array($arr, $values = ['',[]]){ foreach ($arr as $k => $v) { if (is_array ...

  6. 使用Query 进行空值(empty)校验

    效果如下: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF ...

  7. 《利用python进行数据分析》读书笔记--第四章 numpy基础:数组和矢量计算

    http://www.cnblogs.com/batteryhp/p/5000104.html 第四章 Numpy基础:数组和矢量计算 第一部分:numpy的ndarray:一种多维数组对象 实话说, ...

  8. Numpy 学习之路(1)——数组的创建

    数组是Numpy操作的主要对象,也是python数据分析的主要对象,本系列文章是本人在学习Numpy中的笔记. 文章中以下都基于以下方式的numpy导入: import numpy as np fro ...

  9. JavaScript中清空数组的三种方式

    方式1,splice ? 1 2 3 var ary = [1,2,3,4]; ary.splice(0,ary.length); console.log(ary); // 输出 [],空数组,即被清 ...

随机推荐

  1. install正常,deploy上传jar失败致使打包失败

    [INFO] Scanning for projects...[INFO] [INFO] ------------------------------------------------------- ...

  2. 冰蝎动态二进制加密WebShell基于流量侧检测方案

    概述 冰蝎是一款新型动态二进制加密网站工具.目前已经有6个版本.对于webshell的网络流量侧检测,主要有三个思路.一:webshell上传过程中文件还原进行样本分析,检测静态文件是否报毒.二:we ...

  3. postProcessBeanFactory方法源码跟踪

    看这篇文章之前可以先了解之前的跟踪流程,https://www.jianshu.com/p/4934233f0ead 代码过宽,可以shift + 鼠标滚轮 左右滑动查看 AbstractApplic ...

  4. Day6 - 牛客203E

    https://ac.nowcoder.com/acm/contest/203/E 埋坑不会做

  5. wdcp升级php5.8到php7.1.12后安装swoole

    http://pecl.php.net/package/swoole wget http://pecl.php.net/get/swoole-4.0.1.tgztar zxvf swoole-4.0. ...

  6. 在 linux 中遇到 OSError: inotify watch limit reached 错误

    检查系统当前限制,默认应该是 8192: cat /proc/sys/fs/inotify/max_user_watches 可根据需要调整系统限制,但是目前还不知道如何查看每个进程对 watch 的 ...

  7. 吴裕雄 Bootstrap 前端框架开发——Bootstrap 字体图标(Glyphicons):glyphicon glyphicon-play-circle

    <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <meta name ...

  8. Window Server 2019 配置篇(3)- 建立hyper-v集群并在其上运行win10 pro虚拟机

    上次讲到我们的域里有了网关跟DHCP,这次我们要在域中建立hyper-v集群并在其上运行win10 pro虚拟机 那么什么是hyper-v集群呢? 就是两个及两个以上的运行hyper-v服务的服务器建 ...

  9. c#实现"扫描检测硬件改动"

    public static class Win32Api { public const int CM_LOCATE_DEVNODE_NORMAL = 0x00000000; public const ...

  10. C++面试常见问题——05字符串的逆序

    字符串的逆序 #include<iostream> #include<string.h> using namespace std; void ReverseStr(char s ...