LOGO 首页 OA教程 ERP教程 模切知识交流 PMS教程 CRM教程 技术文档 其他文档  
 
网站管理员

JavaScript 反引号(` backtick)和双引号的不完全等价 ≠ 场景

zhenglin
2026年10月10日 10:10 本文热度 150

一、backtick ` 不能用作属性引号

const wechat = {

  'my-name': 'JavaScript与编程艺术'

}

const wechat = {

  `my-name`: 'JavaScript与编程艺术'

}

将报错:Uncaught SyntaxError: Unexpected template string

可以加[]解决:

const wechat = {

  [`my-name`]: 'JavaScript与编程艺术'

}

二、反引号不能紧跟在表达式后

backtick ` 如果紧跟值或表达式后面将报错。

下面引号不可替换成反引号:

let start = 0 // 注意此处无分号

'backtick 和引号不等价的场景'.replace('backtick', '<backtick>')

若写成

let start = 0 // 注意此处无分号

`backtick 和引号不等价的场景`.replace('backtick', '<backtick>')

则报错“Uncaught TypeError: 0 is not a function”

这个错误是因为 JavaScript 的自动分号插入(ASI Automatic Semicolon Insertion)机制和模板字符串(反引号)的特性共同导致的。JavaScript 解析后相当于:


let start = 0`backtick 和引号不等价的场景`.replace('backtick', '<backtick>')

只要模板字符串紧跟在某个表达式后面(没有分号),这个表达式就会被当作 tag 函数来调用模板字符串 template literals,这叫做 tagged template:

// 这些都会被当作函数调用

fn`hello`        // ✅ fn 是函数

obj.fn`hello`    // ✅ fn 是函数

(() => {})`hello` // ✅ 箭头函数被调用

0`hello`         // ❌ 0 不是函数

null`hello`      // ❌ null 不是函数


const date = new Date()

`backtick 和引号不等价的场景`.replace('backtick', '<backtick>')

// ❌ VM902:2 Uncaught TypeError: (intermediate value) is not a function

三、静态 import 模块名不能使用反引号包裹

实验代码 back-tick/import.js:

// ❌ SyntaxError: Unexpected template string

import { test } from `node:test`

❯ node back-tick/import.js

file:///F:/temp/back-tick/import.js:1

import { test } from `node:test`

                     ^^^^^^^^^^^


SyntaxError: Unexpected template string

    at compileSourceTextModule (node:internal/modules/esm/utils:346:16)

    at ModuleLoader.moduleStrategy (node:internal/modules/esm/translators:107:18)

    at #translate (node:internal/modules/esm/loader:536:12)

    at ModuleLoader.loadAndTranslate (node:internal/modules/esm/loader:583:27)

    at async ModuleJob._link (node:internal/modules/esm/module_job:162:19)


Node.js v22.18.0

静态导入模块不能使用反引号包裹。当然动态是可以的:

const { test } = await import(`node:test`)

console.log(test)

​

能正常输出且输出和 import { test } from 'node:test' 一样。dynamic import 经常用在对启动性能有极致追求的场景,比如 OpenCode 或 Claude Code 等 CLI 中。


阅读原文:点击这里


该文章在 2026/10/10 10:10:46 编辑过
关键字查询
相关文章
正在查询...
点晴ERP是一款针对中小制造业的专业生产管理软件系统,系统成熟度和易用性得到了国内大量中小企业的青睐。
点晴PMS码头管理系统主要针对港口码头集装箱与散货日常运作、调度、堆场、车队、财务费用、相关报表等业务管理,结合码头的业务特点,围绕调度、堆场作业而开发的。集技术的先进性、管理的有效性于一体,是物流码头及其他港口类企业的高效ERP管理信息系统。
点晴WMS仓储管理系统提供了货物产品管理,销售管理,采购管理,仓储管理,仓库管理,保质期管理,货位管理,库位管理,生产管理,WMS管理系统,标签打印,条形码,二维码管理,批号管理软件。
点晴免费OA是一款软件和通用服务都免费,不限功能、不限时间、不限用户的免费OA协同办公管理系统。
Copyright 2010-2026 ClickSun All Rights Reserved  粤ICP备13012886号-2  粤公网安备44030602007207号