JavaScript - 缺少语法错误

标签 javascript node.js ecmascript-6 v8 ecmascript-2016

我偶然发现了这个奇怪的东西。我正在 GitHub 上写一些问题,如您所知,要在 GitHub 帖子中使用某些语言突出显示,您应该将其封装在三重 grave accent 中。 。例如,如果您想使用 JavaScript,您应该这样做:

```JavaScript
// Your code
```

它将在您的代码片段中使用 JavaScript 突出显示。

但是,当我在那里写一篇文章时,我不小心复制了从编辑模式剪下的整个代码(包括重音符号)并将其粘贴到 js 文件中。不过,我忘记删除重音了。这是我在 js 文件中的代码:

function test(){
  ```JavaScript
  console.log(1);
  ```
}

当然应该是语法错误。但是,令我惊讶的是 Node.js 编译它时没有任何错误。我简直不敢相信。根本没有 cytax 错误。这怎么可能?

所以,我认为三重重音在 JavaScript 中具有特殊含义(也许是像 Python 中那样的多行字符串?)。我在互联网上搜索,但一无所获。为什么 EcmaScript 允许这样做?它的使用示例是什么?

最佳答案

自 ES2015 起,反引号是 Javascript 语法的一部分,用于 template literals

您的代码不包含任何词法语法错误,模板版本将在您运行该函数时抛出错误,因为 template tagging尝试评估第二个和第三个模板的语法。因此重申一下:不存在语法错误,但是,当您考虑模板标记时,实际最终评估的方式是

""("Javascript\n console.log(1);\n")("")

这不起作用,因为 "" 不是一个函数。它期望反引号之前的字符作为标记函数。如果您用函数替换第一组反引号,它将起作用:

function format(msg) {
   return function(secondMsg) {
     return "!!" + msg + secondMsg + "!!";
   };
}


console.log(format`Javascript\n console.log(1);\n```)

关于JavaScript - 缺少语法错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43508490/

相关文章:

node.js - MongoError : Can't canonicalize query: BadValue bad order array [2]

node.js - 用于 nodejs 和 postgresql 的迁移生成器文件工具

javascript - 对数组进行排序,其中最接近中间两个的项目和另一侧的其他极端 - js

node.js - require 客户端实现同构 javascript 与 React 无法识别

javascript - 使用 thunk 来计算异步代码中的时间

javascript - React - 如何创建链式级联辅助函数

javascript - karma 无法加载junits插件

javascript - Highcharts 中的 JSON 解析

javascript - 用于通知的动画图标

javascript - 鼠标悬停事件控制淡入淡出