我一直认为JavaScript中的const变量是常量......就像“无法改变的变量” 所以我总是假设使用const over let / var的好处就是减少资源使用量 但经过快速测试后,它看起来像一个const就像一个变量。它是块作用域,可以修改...至少在我的浏览器中(Firefox 47.0)。
这就是我的所作所为:
const FOO = [0,1,2]
FOO[0] = 11
console.log(FOO) // > [11, 1, 2]
这引出了我的问题:使用const有什么意义? 我的意思是这个词更长,很多人都不知道const,它直接看起来像一个正常的变量。那么为什么我会给出不是这样的错觉呢?为什么我们不继续将常量编写为let-var与all-caps中的名称?
答案 0 :(得分:2)
简单地说,对象/数组的值不会改变,你只是改变了对象的属性。为了证明:
const FOO = {};
FOO.something = 'foo'; // [legal] mutating the object, but still the same object
FOO = {}; // [illegal] attempt to assign new object
在学习const
与其他原始类型时,使用对象不那么简单:
const FOO = 1;
FOO = 2; // [illegal] attempt to assign new value
FOO = []; // [illegal] attempt to assign new value
要回答这个问题,const
。它是编程的奢侈品,可以防止程序员在脚下射击。
它的语法糖有助于保护价值并向维护者传达想法,但JavaScript开发人员已经能够在没有它的情况下编程好多年。它只会通过帮助早期检测和预防错误并加强某些一致性来帮助语言变得更加精细。
随着应用程序/模块变得越来越复杂,对解释器/转换器辅助的需求变得更加重要,const
可以带来巨大的好处。
另外值得注意的是,还有其他额外的好处。使用常量时,JavaScript引擎更有效。虽然性能提升可能很小,但一些非常密集的应用程序必须尽可能多地释放资源。
更容易想到为常用变量设置常量:
const PI = 3.1415926535;
const E = 2.71828;
const GOLDEN_RATIO = 1.61803398874;
const GRAVITY = 9.807;
按照惯例,我使用全部大写来区分全局和常量。
答案 1 :(得分:0)
假设你有一些硬编码的东西要比较,比如
if(somevariable==""){
do something
}
另一个问题是
const EMPTY_STRING = ""
if(somevariable==EMPTY_STRING){
do something
}
某些时候你开发的东西会发生什么比较 if(somevariable ==“”){}
你错过那里的空间,我们可以避免这样的错误。
使用2:
我们可以在const变量中使用硬编码的东西,它将在js文件中的很多地方使用。所以你只能用硬编码一次
答案 2 :(得分:0)
使用const
的关键是创建不可变绑定而不是可变绑定。
let foo = 1;
foo = 2; // 2
foo; // 2
const bar = 1;
bar = 2; // TypeError: invalid assignment to const `bar'
foo; // 1
因此,您无法改变存储在该变量中的值。
但是,您可以改变与该变量中的值相关联的数据。
const obj = {foo: 'bar'};
obj = [1,2,3]; // TypeError: invalid assignment to const `bar'
obj; // {foo: 'bar'}
obj.foo = 'baZ'; // 'baZ'
obj.foo; // 'baZ'
如果您不想更改对象的某些属性,可以将它们定义为不可写或不可配置。如果要防止添加新属性,可以密封或冻结。但这些概念与常数变量完全不同。