Sail


手在键盘敲很轻


JavaScript中分号引起的bug

Prafece

前阵子写代码遇到一个诡异的错误,排查了很久才定位到是分号的问题,本文做下记录


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
// 可以正常工作
showProjectTaskModal(projectTaskData) {
this.setState({
projectTaskData: projectTaskData
})


if (this.ifShowZhanKai()) {
this.showZhanKai()
}
}

// 可以正常工作
showProjectTaskModal(projectTaskData) {
this.setState({
projectTaskData: projectTaskData
});


(this.ifShowZhanKai()) ?
this.showZhanKai() :
null

}


// 不可以正常工作
showProjectTaskModal(projectTaskData) {
this.setState({
projectTaskData: projectTaskData
})


(this.ifShowZhanKai()) ?
this.showZhanKai() :
null

}

上面的showProjectTaskModal函数,前两个可以正常工作,第三个却会抛错。问题在于this.setState后面有没有根分号。

至于说 “很难总结什么时候加不加”,其实真的很简单。真正会导致上下行解析出问题的 token 有 5 个:括号,方括号,正则开头的斜杠,加号,减号。我还从没见过实际代码中用正则、加号、减号作为行首的情况,所以总结下来就是一句话:一行开头是括号或者方括号的时候加上分号就可以了,其他时候全部不需要。——尤雨溪


参考链接

JavaScript 语句后应该加分号么? - 知乎

© 2016-2019. | 由Hexo强力驱动 | 主题Huno | 渝ICP备17002561号 | 不装弱了,我要做大佬