首页 > 解决方案 > JS const 变量如何编译成浏览器友好的代码,使它们是只读的?

问题描述

我有以下变量:

const x = ['item']

然后我尝试使用 Babel 的实时编译器,它给了我以下编译代码:

"use strict";
var x = ["item"];

现在,当我尝试将其他东西 ( x = {}) 分配给变量x时,它会抛出错误。我在任何地方都看不到我不能x在编译的代码中进行更改!一般来说,var是可编辑的吗?

谁能帮我理解这一点?

标签: javascriptecmascript-6constantsbabeljs

解决方案


如果我尝试 babel 输出,我可以为 x 分配一个新值,它就可以工作。原因是输出的代码是 ECMAScript 5,并且没有 const 的概念。您可以通过在 MDN 上的“JavaScript Demo: Statement - Const”示例中将 const 更改为 var 来尝试一下。

因此,babel 会将其编译(或“转换”)为可分配变量,因为没有其他方法。但在执行此操作的过程中,它会验证您的原始代码以查看您是否没有对 x 进行赋值,如果这样做则会引发错误。

Babel 会检查你是否在编译过程中将其用作常量,但在最终代码中,不再强制 x 为常量,因此您可以通过修改输出的代码轻松打破这一点。

为了比较,任何编译器都是如此。如果您使用十六进制编辑器并修改可执行文件,您还可以破坏编译器在生成可执行文件时所做的任何事情。事实上,如果您在程序完成后对其进行修改,那么对于每个程序的输出都是如此(想想图像、文档……)


推荐阅读