为什么普通字符串被认为是无bug的?

时间:2014-11-06 14:59:54

标签: javascript

在代码中如果我有以下代码行不会抛出错误:

'any string'
console.log('test');

显然这会引发:

'any string' console.log('test'); // missing ;

但不是这样:'any string'; console.log('test');

我的意思是'任何字符串'在脚本中没有任何关系,但它被视为无错误,为什么?

3 个答案:

答案 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);