JavaScript 在 Chrome 开发者工具中的奇怪行为

Strange behaviour of JavaScript in Chrome Developer Tool

最近,在开发者工具中使用 JavaScript 时,我发现了一个奇怪的功能。 Chrome 接受带运算符(加号、减号)的左括号和带右括号的运算符之间的任何代码并执行它,如下所示:

我没有在其他浏览器中发现这种行为,只是在 Chrome 中。

也许这是一个功能,但它为什么以及如何工作,JavaScript 引擎有问题吗?

发生这种情况是因为 Chrome 在以下结构中包装了您在控制台中输入的代码:

with (typeof __commandLineAPI !== 'undefined' ? __commandLineAPI : { __proto__: null }) {
  // Your code
}

因此,当您输入类似 } 10 { 的内容时,代码的计算结果为:

with (typeof __commandLineAPI !== 'undefined' ? __commandLineAPI : { __proto__: null }) {
  } 10 {
}

这是一个空的 with 块,一个数字,一个空的结构块。

__commandLineAPI 是包含 Chrome Command Line API.

的内部对象

这是 chrome 评估您的输入的方式:

with (typeof __commandLineAPI !== 'undefined' ? __commandLineAPI : { __proto__: null }) {
 // your code here...
}

所以一旦你的输入是 }{ 它变成

with (typeof __commandLineAPI !== 'undefined' ? __commandLineAPI : { __proto__: null }) {}{} // indefined

下一个输入}-+{ 变成

undefined -+ {} // NaN

以此类推