在代码中如果我有以下代码行不会抛出错误:
'any string'
console.log('test');
显然这会引发:
'any string' console.log('test'); // missing ;
但不是这样:'any string'; console.log('test');
我的意思是'任何字符串'在脚本中没有任何关系,但它被视为无错误,为什么?
答案 0 :(得分:4)
字符串只是一个表达式 - JS没有区分函数调用和普通表达式。
在第一种情况下,分号会自动放在第一行的末尾,将其分解。这显然不存在于第二个例子中。在第三部分,再次,你将它们分解成不同的表达方式。
偶数console.log()
是一个表达式 - 它是一个返回undefined
并且有副作用的函数调用。
此效果有意用于强制严格模式解释。严格模式函数写为:
function myFunc() {
"use strict"; // just the plain string
// function body
}
答案 1 :(得分:1)
JavaScript语句在理论上由分号终止:;
。
然而,JS有分号插入的想法,其中分号可以在某些条件下插入代码中 - 特别是在}
或换行符之后(参见"Rules of Automatic Semicolon Insertion" in the spec)。
答案 2 :(得分:0)
大多数浏览器中的JavaScript引擎并不像您对其他语言所期望的那样严格,例如编译C。
因此,有时候使用静态分析工具JsLint检查您的JavaScript代码是个好主意。
将代码段粘贴到其中
期望一个赋值或函数调用,而是看到一个表达式。
'任何字符串'
第1行第13个字符预期';'而是看到了#console;#39;。
'任何字符串'
第2行角色1'控制台'在定义之前使用过。
的console.log('测试&#39);