JavaScript 你写 js 还敢不加分号?

mizuhashi · 2016年07月08日 · 最后由 luikore 回复于 2016年07月12日 · 3613 次阅读


那我用Array(1,2,3)总可以了吧,当然,在这里是可以的。但是有一个悲剧的事实是: Array(2) 并不等于[2],而等于[undefined x 2]

没错,这是一个函数做两件事情

另外需要注意的是,这里是[undefined x 2],而不是[undefined, undefined]

他们有什么区别呢?

undefined x n代表数组的空洞,是无法被 map 遍历的。

中括号和小括号如果是一行开头就加个前置分号

“写 JS 不加分号”只是一个笼统的说法,真正做的时候并不是无脑全不写,要么像 @dd1994 所说的那样牢记简单的规则,要么永远都不要在行首写 ( / [

比如说你举的例子,我平时是这么写的:

// range 是一个工具函数,很多函数库都有提供,也可以自己实现一个简单的:
const range = (amount, start = 0) => [...Array(amount + start).keys()].splice(start)

let count = 123
range(10, 1).map(x => x)

// [1,2,3,4,5,6,7,8,9,10]

#2 楼 @nightire 没事我已经记住了 Array(size).fill(init).map((e,i)=>e+i)😐

解决方法上面的都已经说了,规则也挺简单。少数时候分号还是必须的。所以这种风格国外叫 semicolon less 而不是 semicolon free。

我觉得 [a, b, c].doSomething 这种行首写中括号的方式在实际编程中是不可避免,相比写大量冗余的分号,偶尔容忍一点奇怪的语法也是可以接受的。

最后,不管用什么风格,加个 ESLint 检查下总没错。最怕的就是“我想打就打不想打就不打反正也不会报错”流……

不写 js 没这个烦恼

需要 登录 后方可回复, 如果你还没有账号请 注册新账号