如何将JS const变量编译为浏览器友好的代码,使其成为只读?

时间:2019-01-30 12:29:09

标签: javascript ecmascript-6 const babeljs

我有以下变量:

const x = ['item']

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

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

现在,当我尝试为变量x = {}分配其他内容(x)时,会引发错误。我看不到任何地方都无法更改已编译的代码中的x!一般来说,var是可编辑的吗?

有人可以帮助我理解吗?

2 个答案:

答案 0 :(得分:3)

如果尝试babel输出,则可以为x分配一个新值,它就可以正常工作。这样做的原因是,输出的代码是ECMAScript 5,并且没有const的概念。您可以通过在'JavaScript Demo: Statement - Const' example on MDN中将const更改为var来进行尝试。

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

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

为了进行比较,任何编译器都一样。如果使用十六进制编辑器并修改可执行文件,则还可以破坏编译器在制作可执行文件时所做的任何操作。实际上,如果您在程序完成后对其进行修改(例如图像,文档等),则对每个程序的输出都是正确的

答案 1 :(得分:0)

您是正确的。 var通常是可编辑的。我相信您在编译过程中会遇到此问题。在babel编译期间,它将对const变量执行此安全检查。打字稿中也会发生同样的事情。