你能在JavaScript中使用常量变量吗?

Can you use constant variables in JavaScript?

本问题已经有最佳答案,请猛点这里访问。

我在一个网站上看到,你可以在javascript中创建常量变量,比如:

1
const x = 20;

但在另一个网站上我看到你不能。所以我现在很困惑,现在是什么?

在Visual Studio 2010中,当我编写const时,它在javascript文件中加下划线并显示语法错误。


const是ecmascript和谐的一个提议特征(加上适当的块范围let,它应该取代var和隐式全局)。EcmaScript Harmony是下一个版本EcmaScript的一个想法袋。

const也是ecmascript 4的一部分。

ECMAScript 4从未发布过,也不会发布,ECMAScript Harmony只会在几年后发布。因此,您不能可靠地使用它。

有一些ecmascript的实现或派生实现const(例如,actionscript)。还有一些实现接受const作为var的同义词(iow,您可以使用const,但它不会给您任何保护。)

但是,除非您绝对可以保证您的代码只能在非常特定的ECMAScript派生的非常特定的实现版本上运行,否则最好避免它。(这是一个真正的耻辱,因为const,尤其是letvar和隐式全球是一个巨大的进步。)


如果要查找只读变量,可以使用类似

1
2
3
4
var constants = new (function() {
    var x = 20;
    this.getX = function() { return x; };
})();

然后像这样使用

1
constants.getX()


解决方案是创建一个对象并将所有常量放在该对象中:

1
2
3
4
5
6
7
const={};

const.x=20;

const.y=30;

Object.freeze(const);  // finally freeze the object

使用:

1
var z=const.x + const.y;

任何修改变量的尝试都将生成一个错误:

1
const.x=100;  <== raises error

javascriptES6(re-)引入了所有主要浏览器都支持的const关键字。

Variables declared via const cannot be re-declared or re-assigned.

除此之外,const的行为与let相似。

对于基本数据类型(布尔、空、未定义、数字、字符串、符号),它的行为与预期一致:

1
2
3
const x = 1;
x = 2;
console.log(x); // 1 ...as expected, re-assigning fails

注意:注意物体的缺陷:

1
2
3
4
5
6
7
8
9
10
11
12
13
const o = {x: 1};
o = {x: 2};
console.log(o); // {x: 1} ...as expected, re-assigning fails

o.x = 2;
console.log(o); // {x: 2} !!! const does not make objects immutable!

const a = [];
a = [1];
console.log(a); // 1 ...as expected, re-assigning fails

a.push(1);
console.log(a); // [1] !!! const does not make objects immutable


ecmascript中没有const(忽略死的4.0版本和actionscript)。

const在jscript.net中提供,一些最新版本的JS引擎(如firefox、opera 9、safari)作为特定于供应商的扩展。


我相信有一些东西不是用var的,是一个全局变量……JS中没有常量。

var a="test"a="test"不同


不,javascript中没有数据类型"const"。

JavaScript是一种松散类型的语言。每种变量都用var声明


看看这个文档,它概述了如何在javascript中使用const

http://google-styleguide.googlecode.com/svn/trunk/javascriptguide.xml