LinDaiDai/niubility-coding-js

💪第6期第1题:[,,,]的长度

Opened this issue · 0 comments

[,,,]的长度

(题目来源:https://github.com/CavsZhouyou/Front-End-Interview-Notebook)

咋了小伙伴们,感觉这道题目很简单是吗?哈哈,数一数逗号的间隙好像就能得出答案了,比如这样:

但是这道题的答案并不是4哟,而是3

console.log([,,,].length) // 3

所以最终我们是需要把它想象成这样的:

也就是最后一个逗号的后面是不算一项的。

这里其实涉及到了一个名为:尾后逗号的概念,或者说是叫做终止逗号。上面👆这道题好像看不出它有什么作用,让我来看看实际上为什么会有这个用法。

比如现在你的项目中这么一个文件:

config.js:

const types = [
  {
    name: '帅'
  },
  {
    name: '阳光'
  },
]
export { types };

大家可以看到,我在阳光这一项的的后面是多加了一个","的,此时我将这个代码提交到git上并标记为版本1

如果这时候types中又要添加一项名为"可爱"的配置项,我只需要在它下面再加上就行了,不需要去改动到原来代码,此时你提交的代码的diff是长这样的:

const types = [
  {
    name: '帅'
  },
  {
    name: '阳光'
  },
+ {
+   name: '可爱'
+ },
]
export { types };

大家可以看到,只有简单的三行增量代码,如果你没有使用尾后逗号的话,你提交的代码的diff会是这样:

const types = [
  {
    name: '帅'
  },
  {
    name: '阳光'
- }
+ },
+ {
+   name: '可爱'
+ }
]
export { types };

因此我们可以得出尾后逗号它的作用:

使得版本控制更加清晰,以及代码维护麻烦更少。

(当然,这种用法在.json后缀的文件中是不能用的哈,因为JSON它严格遵循它自己的语法要求)

所以回归到这道题中来,像这种使用了多于一个尾后逗号的数组,我们就称之为稀疏数组,希疏数组它的长度是等于逗号的数量的。

因此:

console.log([,,,].length) // 3