JS分号问题:javaScript什么时候可以省略分号

前言

 我们在写js代码时发现有时候没写分号也不会报错,但是有时候就报错了,到底什么时候该写,什么时候不用写呢?
 我不想看规则,直接看结论

自动分号插入机制

 JavaScript有着自动分号插入的机制(Automatic Semicolon Insertion),简称ASI。这是一个辅助性的功能

ASI的规则
  1. 新行并入当前行将构成非法语句,自动插入分号
if(1 < 10) a = 1
console.log(a)
// 等价于
if(1 < 10) a = 1;
console.log(a);
  1. 在continue,return,break,throw后自动插入分号
return
{a: 1}
// 等价于
return;
{a: 1};
  1. ++、–后缀表达式作为新行的开始,在行首自动插入分号
a
++
c
// 等价于
a;
++c;
  1. 代码块的最后一个语句会自动插入分号
function(){ a = 1 }
// 等价于
function(){ a = 1; }
No ASI的规则
  1. 新行以 ( 开始
var a = 1
var b = a
(a+b).toString()
// 会被解析为以a+b为入参调用函数a,然后调用函数返回值的toString函数
var a = 1
var b =a(a+b).toString()
  1. 新行以 [ 开始
var a = ['a1', 'a2']
var b = a
[0,1].slice(1)
// 会被解析先获取a[1],然后调用a[1].slice(1)。
// 由于逗号位于[]内,且不被解析为数组字面量,而被解析为运算符,而逗号运算符会先执行左侧表达式,然后执行右侧表达式并且以右侧表达式的计算结果作为返回值
var a = ['a1', 'a2']
var b = a[0,1].slice(1)
  1. 新行以 / 开始
var a = 1
var b = a
/test/.test(b)
// /会被解析为整除运算符,而不是正则表达式字面量的起始符号。浏览器中会报test前多了个.号
var a = 1
var b = a / test / .test(b)
  1. 新行以 + 、 - 、 % 和 * 开始
var a = 2
var b = a
+a
// 会解析如下格式
var a = 2
var b = a + a
  1. 新行以 , 或 . 开始
var a = 2
var b = a
.toString()
console.log(typeof b)
// 会解析为
var a = 2
var b = a.toString()
console.log(typeof b)
结论

在一般情况下我们可以省略分号;
在以 ( [ / + -开头的语句前加分号
(由于正常写法均不会出现以. , * %作为语句开头,因此只需记住前面5个即可,你看能懒则懒哦)

var a = 1
var b = a
;(a+b).toString()		//语句前加分号

参考于:
https://www.cnblogs.com/fsjohnhuang/p/4154503.html

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 在大多数情况下,可以省略JavaScript语句的分号。然而,建议在编写JavaScript代码时始终使用分号,以避免出现一些可能会导致错误的问题。以下是一些情况下应该使用分号的示例: 1. 当一行代码以左括号({)、左方括号([)或反引号(`)开头时,需要在前一行结尾加上分号。 2. 当在同一行编写多条语句时,需要在每条语句的末尾添加分号。 3. 当使用return、throw、break、continue、yield等关键字时,需要在前一行的结尾处添加分号。 虽然在某些情况下可以省略分号,但为了代码的可读性和可维护性,强烈建议在JavaScript中使用分号。 ### 回答2: 原生JavaScript中,大多数情况下,后面的分号是可以省略的。这是因为JavaScript拥有自动分号插入(Automatic Semicolon Insertion,ASI)机制。 自动分号插入机制是指在语句结束时,如果没有分号,解析器会尝试自动在合适的位置插入分号。它基于一些规则,例如: 1. 如果行末包含可识别的分号、括号、方括号、函数、类等,则不会插入分号。 2. 如果行末是运算符、逗号、点号等,解析器会插入分号。 3. 如果换行符前是 return、yield、throw、continue、break、import、++、-- 等等,则解析器会插入分号。 由于自动分号插入机制的存在,有些情况下我们可以省略分号,例如: ```javascript var x = 5 // 没有分号也能正确解析 var y = 3; // 有分号,不影响解析 ``` 然而,有时候省略分号可能会导致错误的结果或不符合预期的行为。因此,建议在编写JavaScript代码时,尽量养成良好的编码习惯,为每个语句后面添加分号。这样可以避免一些潜在的问题,并使代码更加清晰易读。 总结起来,虽然原生JavaScript中后面的分号可以省略,但为了避免潜在的错误或不一致行为,建议在语句结束处始终添加分号
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值