飞跃高山与大洋的鱼飞跃高山与大洋的鱼
首页
先看
计算机
  • 数学
  • Linux
  • Arch
  • Manjaro
  • Ubuntu
  • CentOS
  • Kubernetes
  • Web
  • JavaScript
  • TypeScript
  • CSS
  • Canvas
  • Vue
  • Vite
  • NuxtJS
  • Webpack
  • Flutter
  • D3
  • Jest
  • WeApp
  • Utils
  • Nodejs
  • Nestjs
  • Golang
  • Nginx
  • Traefik
  • MySQL
  • MongoDB
  • Redis
  • Docker
算法
  • 像素风
  • Git
  • Github
  • VSCode
  • Chrome
  • Google
  • Bookmark scripts
  • 导航 🎉
  • VuePress 侧边栏插件
  • VuePress 官网
🚇 开往
首页
先看
计算机
  • 数学
  • Linux
  • Arch
  • Manjaro
  • Ubuntu
  • CentOS
  • Kubernetes
  • Web
  • JavaScript
  • TypeScript
  • CSS
  • Canvas
  • Vue
  • Vite
  • NuxtJS
  • Webpack
  • Flutter
  • D3
  • Jest
  • WeApp
  • Utils
  • Nodejs
  • Nestjs
  • Golang
  • Nginx
  • Traefik
  • MySQL
  • MongoDB
  • Redis
  • Docker
算法
  • 像素风
  • Git
  • Github
  • VSCode
  • Chrome
  • Google
  • Bookmark scripts
  • 导航 🎉
  • VuePress 侧边栏插件
  • VuePress 官网
🚇 开往
  • JAVASCRIPT

    • JavaScript
    • 语句和表达式
    • 数组空位
      • 处理空位
        • 1. ES5
        • 2. ES6
    • 无法访问 undefined、null 的属性
    • currying
    • 装饰器 Decorator
    • ES6 的简单使用
    • Error 类型
    • 事件队列
    • 隐式转换
    • 调用表达式
    • 函数调用
    • 运算符优先级
    • 原型链
    • 正则 exec
    • 作用域与闭包
    • 一步步启用 babel7
    • 什么是 this
    • typeof
    • 全局属性 undefined
    • 自增/减

数组空位

数组空位,指数组的该位置没有任何值,而非 undefined。

可由以下方式得到他们:

Array(5);
// [empty × 5]

[,,];
// [empty × 2] // 可见最后一个逗号被丢弃

通过 in 操作符可得知空位没有任何值:

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

处理空位

1. ES5

ES5 中一些方法对数组空位的处理为忽略:

  • forEach()、filter()、 reduce()、 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

// reduce
[1,,2].reduce((x,y) => x+y) // 3

// 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,,"

2. ES6

ES6(新增的方法) 则是明确将空位转为 undefined。

// Array.from
Array.from(['a',,'b']) // [ "a", undefined, "b" ]

// 扩展运算符
[...['a',,'b']] // [ "a", undefined, "b" ]

// copyWithin
[,'a','b',,].copyWithin(2,0) // [,"a",,"a"]

// fill
new Array(3).fill('a') // ["a","a","a"]

// for...of
for (const el of [,,]) {
  console.log(el); // 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
编辑文档!
上次更新:
贡献者: shanyuhai123
Prev
语句和表达式
Next
无法访问 undefined、null 的属性