什么';在JavaScript中声明常量的意义何在

什么';在JavaScript中声明常量的意义何在,javascript,constants,Javascript,Constants,我一直认为JavaScript中的常量变量应该是常量。。。例如“无法更改的变量”。 因此,我一直认为使用const-over-let/var的好处是减少资源使用。 但经过快速测试后,它看起来像一个常量,几乎像一个let变量。它是块范围的,可以修改。。。至少在我的浏览器中(Firefox47.0) 以下是我所做的: const FOO = [0,1,2] FOO[0] = 11 console.log(FOO) // > [11, 1, 2] 这就引出了我的问题:使用const有什么意义?

我一直认为JavaScript中的常量变量应该是常量。。。例如“无法更改的变量”。
因此,我一直认为使用const-over-let/var的好处是减少资源使用。
但经过快速测试后,它看起来像一个常量,几乎像一个let变量。它是块范围的,可以修改。。。至少在我的浏览器中(Firefox47.0)

以下是我所做的:

const FOO = [0,1,2]
FOO[0] = 11
console.log(FOO) // > [11, 1, 2]
这就引出了我的问题:使用const有什么意义?
我的意思是这个词比较长,很多人不知道const,它看起来就像一个正态变量。那么,为什么我会给人一种错觉,认为事实并非如此呢?为什么我们不继续以let/var的形式编写常量,并在所有caps中使用名称?

简单地说,对象/数组的值不会改变,您只是在改变对象的属性。证明:

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开发人员多年来一直能够在没有语法糖的情况下很好地编程。它只是通过帮助更早地检测和防止错误,并加强一些一致性,帮助语言变得更加精炼

随着应用程序/模块变得越来越复杂,对解释器/transpiler协助的需求变得越来越重要,
const
在那里可以带来巨大的好处


同样值得注意的是,还有其他额外的好处。JavaScript引擎在处理常量时效率更高。虽然性能提升可能微不足道,但一些非常密集的应用程序必须释放尽可能多的资源

更容易考虑为常用变量设置常量:

const PI           = 3.1415926535;
const E            = 2.71828;
const GOLDEN_RATIO = 1.61803398874;
const GRAVITY      = 9.807;

按照惯例,我使用所有的大写字母来区分全局和常量。

假设您有一些硬编码的东西可以比较

if(somevariable==""){
   do something
}
另一种方法是

const EMPTY_STRING = ""
if(somevariable==EMPTY_STRING){
do something
}
有时候,当你们发展事物的时候,你们会比较一些事物,比如 如果(somevariable==“”){

你错过了那里的空间,我们可以避免这样的错误

使用2:


我们可以在const变量中硬编码,它将在js文件中的许多地方使用。因此您只能硬编码一次

使用
const
的目的是创建不可变的绑定,而不是可变的绑定

设foo=1;
foo=2;//2.
foo;//2.
const bar=1;
bar=2;//TypeError:对常量'bar'的赋值无效
foo;//1.
所以你不能改变存储在变量中的值

但是,您可以更改与该变量中的值关联的数据

constobj={foo:'bar'};
obj=[1,2,3];//TypeError:对常量'bar'的赋值无效
obj;//{foo:'bar'}
obj.foo='baZ';/'巴兹
obj.foo;//'巴兹

如果不想更改对象的某些属性,可以将它们定义为不可写或不可配置。如果要防止添加新属性,可以进行密封或冻结。但是,这些概念与常量变量完全不同。

您将变异值与分配变量的新值混为一谈。不能将新值分配给
FOO
(即
FOO=23
),因为
FOO
const
。但由于对象在JavaScript中是可变的,因此仍然可以对对象本身进行变异。相关问题:,您必须查找
对象.冻结()
密封件
。使用const时无法替换内存位置,即此时它将抛出错误。常量是objet引用,而不是该对象的属性。假设您正在查看并维护十万行代码。整个过程中的最终变量(尤其是在开发团队中)是作为
const
变量还是作为
var
变量更明显?它提供了使代码更干净的能力。我认为它除了为整个语言提供好处之外什么都没有。但是JavaScript的一个特点不是缺少数据类型吗?我是说下一步是什么<代码>字符串和
Bool
?你当然可以争辩说,这样一来,变量的作用就变得更加明显了。但在我看来,完全缺少数据类型是一个巨大的优势。我真的不明白为什么const对于tbh是必要的。假设您必须在一个js文件中5次比较一个变量和值5。你会怎么做。if(someVariable==5)。不是吗??现在我也可以将其存储在var中。那么为什么是康斯特呢。它不允许你错误地改变它,因为它是恒定的,应该是连续的