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. 《ORACLE数据库管理与开发》第三章学习之常用函数记录

    <ORACLE数据库管理与开发>第三章学习之常用函数记录 注:文章中的*代表所要操作的列名 1.lower(*)/upper(*),将此列下的值转为小写/大写 2.initcap(*):把 ...

  2. JavaScript 词法句法

    JavaScript 中的几个重要概念 JavaScript 遵循 ECMA-262 规范,目前其最新版是 ECMAScript 2018,而获得所有主流浏览器完全支持的则是 ECMAScript 5 ...

  3. Python学习笔记之基础篇(-)python介绍与安装

    Python学习笔记之基础篇(-)初识python Python的理念:崇尚优美.清晰.简单,是一个优秀并广泛使用的语言. python的历史: 1989年,为了打发圣诞节假期,作者Guido开始写P ...

  4. LoadRunner回放脚本时,显示浏览器的设置

    打开LoadRunner的VuGen,选择Tools-->General Options-->Display,在Display里将 Show browser during replay打钩 ...

  5. SimpleAuthenticationInfo

    public SimpleAuthenticationInfo(Object principal, Object hashedCredentials, ByteSource credentialsSa ...

  6. MySQL学习之SQL基础(一)DDL

    Sql基础 DDL (data defination language) 创建表 CREATE TABLE emp( ename varchar(10), hiredate date, sal dec ...

  7. 挖洞经验 | 绕过WAF限制利用php:方法实现OOB-XXE漏洞利用

    几个星期以前,作者在某个OOB-XXE漏洞测试中遇到过这样一种场景:目标应用后端系统WAF防火墙阻挡了包含DNS解析在内的所有出站请求(Outgoing Request),但最终,通过利用php:// ...

  8. 关于list

    //问题一: List<string> list = new List<string>(); list = null; //这样写可以使用,但是当list值为null时会报未将 ...

  9. oracle进入CDB

    第一步:使用sys登陆 CONN sys/change_on_install AS SYSDBA; 第二步:查看现在的容器名称 SHOW con_name; 第三步:改变容器为PDB ALTER SE ...

  10. P1045 快速排序

    P1045 快速排序 转跳点: