다음은 이 글을 통해 자바스크립트 구문 뒤에 숨어 있는 세미콜론 문제에 대해 자세히 소개한 내용입니다. 필요하신 분들은 참고하시면 됩니다.
세미콜론 자동 추가에는 3가지 규칙이 있습니다. JavaScript
개행 문자(개행 문자가 포함된 여러 줄 주석 포함)가 있고 다음 토큰이 이전 구문과 일치할 수 없는 경우 세미콜론이 자동으로 추가됩니다.
}이 있을 때 세미콜론이 빠졌으면 채워집니다.
프로그램 소스 코드가 끝날 때 세미콜론이 빠졌으면 채워집니다.
자체 JS 구문 분석 도구인 JSinJS(https://github.com/kissjs/JSinJS)를 사용하여 첫 번째 문장(즉, 첫 번째 문장 집합)에 나타날 수 있는 JS 구문 태그를 모두 찾았습니다. , 총
["debugger", "try", "throw", "switch", "Identifier", "with", "return", "break", "continue", "for", "while", "do", "if", "new", "function", "(", "{", "[", "RegularExpressionLiteral", "StringLiteral", "NumericLiteral", "BooleanLiteral", "NullLiteral", "this", "!", "~", "-", "+", "--", "++", "typeof", "void", "delete", ";", "var"]
35개입니다.
세미콜론 이전에 나타날 수 있는 문법 기호(즉, 세미콜론을 제거한 후 마지막 집합)도 모두 찾았는데, 총
["--", "++", "IdentifierName", "]", ")", "}", "RegularExpressionLiteral", "StringLiteral", "NumericLiteral", "BooleanLiteral", "NullLiteral", "Identifier", "this", "debugger", "return", "break", "continue"]
17개입니다.
35*17 = 595개의 조합. 기억을 돕기 위해 아래에서 문법적 모호성을 그룹별로 논의하겠습니다. (원래 엑셀로 표를 만들었으나 표가 너무 커서 게시할 수 없습니다.)
우선, 다음 구문 표시로 시작하는 명령문은 절대적으로 안전하며 세미콜론 없이 이전 줄과 어떤 모호함도 일으키지 않습니다:
var if do while for continue break return with switch throw try debugger ;
다음으로 세미콜론을 추가하지 않음으로 인해 발생하는 문법적 모호성을 그룹화해 보겠습니다.
첫 번째는 두 연산자 ++ 및 --가 이전 줄 끝에 나타나고 다음 줄이 시작되는 경우입니다. 다음과 같은 경우 문법적 모호성이 발생합니다.
function delete void typeof new null true false NumericLiteral StringLiteral RegularExpressionLiteral ( [ { Identifier ++ -- + - ~ !
그중 function과 delete는 매우 일반적입니다.
특히 ++ 및 --가 한 줄로 구분되는 경우 JS의 문법 규칙에 따르면 후행 증가 연산은 중간에 개행 삽입을 허용하지 않으므로 ++ -- 는 사전 증가로 간주되어 다음 줄이 함께 연결됩니다.
두 번째 경우는 반환이 이전 줄로 끝나는 경우입니다.
함수 삭제 void typeof ( [ { Identifier ++ -- + - ~ !
또한 JS 문법 규칙에서는 return과 다음 값 사이에 줄바꿈 삽입을 허용하지 않기 때문에 return 뒤에 줄바꿈 문자가 있는 한, 세미콜론으로 간주되어 사용자의 기대와 충돌하는 경우가 많습니다.
세 번째 경우는 다음 줄이 +와 -로 시작하고 이전 줄이 다음으로 끝나는 경우입니다. 문법적 모호성:
-- ++ IdentifierName ] ) } RegularExpressionLiteral
+ 또는 -로 시작하는 문이 거의 없기 때문에 이 상황은 위험한 것으로 간주되지 않습니다. 네 번째 상황은 이전 줄이 break 또는로 끝나는 경우입니다. 계속하면 다음 줄이 식별자로 시작하면 문법적 모호성이 발생합니다.
return, break, continue, post-increment 및 post-decrement의 5개 문에서 개행 문자는 다음을 수행할 수 있습니다. 완전히 세미콜론을 바꾸십시오.
일반적으로 게으른 앞 -end 프로그램 회원들은 설명할 수 없는 문제에 자주 직면합니다. 오늘은 JS에서 자주 발생하는 세미콜론에 대한 몇 가지 문제에 대해서만 논의하겠습니다. JavaScript가 세미콜론을 생략할 수 있는 이유는 세미콜론이 없으면 줄 바꿈을 대체하기 때문입니다. 그러나 일부 특정 경우에는 기본적으로 추가되지 않습니다. 이제 이 경우 주의해야 할 몇 가지 사항을 간략하게 소개하겠습니다. 这种情况下会导致程序无法正常运行。JavaScript在解析这段代码是并不会在var x = 0后换行。 还有就是在涉及 return break continue 这种语句时尽量不要换行 JavaScript会解析为 x;++y; 而不是 x++;y; 虽然在JavaScript这门语言中 “;” 是可以省略不写的,但是还是建议大家每句代码后都跟上 “;” 养成这种良好的编码习惯,毕竟在大多语言中不带 “;” 的编码适不适用的。 上面是我整理给大家的,希望今后会对大家有帮助。 相关文章: 위 내용은 JavaScript 문에서 다음 세미콜론 관련 문제의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!var x = 0
[x+1,x+2,x+3].forEach(function(){
console.log(x)
})
在写代码时如果以一条语句以 ”(” ,"[" ,"+" ,"-" ,"/" 开始时通常在上一条语句不会默认添加分号的。所以在这种情况下尽量保持一下这种写法,在以这些字符开始时在行首添加一个分号,这样可以保证在别人更改上面代码时不加分号也不会影响以下代码运行。var x = 0
;[x+1,x+2,x+3].forEach(function(){
console.log(x)
})
return
true;
JavaScript会解析为
return; true;
在涉及 ++ 和 -- 这一系列运算时 在作为表达式的前缀或后缀时在换行是会有一定的问题,如下情况:
var x = 0;
var y = 0;
x
++
y