JavaScript 中有常量吗?

1179

JavaScript中是否有使用常量的方法?

如果没有,指定用作常量的变量的常见做法是什么?


14
Derek问道:你的try/catch会限制你在try/catch块中声明的变量的作用域吗?如果你没有正确地进行作用域限定,那么指定constvar又有什么意义呢? - Coderer
8
在当前的实现中,这将有效,因为constvar具有相同的范围,即函数级别而不是块级别。但是,如果按照即将推出的ECMAScript标准来实现,constlet具有相同的范围,这意味着它将不起作用。 - Jasper
4
@Coderer 使用了错误的语言。在 JavaScript 中,变量的作用域是函数级别的,这与 C 语言不同。 - doug65536
@Jasper 很不幸。我对他们实际上打破所有使用const的现有代码表示怀疑。 - doug65536
1
说实话,为什么我们没有 const varconst let ... - cwharris
显示剩余2条评论
33个回答

2

Rhino.js 在上述内容的基础上实现了 const


0

请查看https://www.npmjs.com/package/constjs,它提供了三个函数来创建枚举、字符串常量和位图。返回的结果是frozensealed,因此在创建后您无法更改/删除属性,也无法向返回的结果添加新属性。

创建枚举:

var ConstJs = require('constjs');

var Colors = ConstJs.enum("blue red");

var myColor = Colors.blue;

console.log(myColor.isBlue()); // output true 
console.log(myColor.is('blue')); // output true 
console.log(myColor.is('BLUE')); // output true 
console.log(myColor.is(0)); // output true 
console.log(myColor.is(Colors.blue)); // output true 

console.log(myColor.isRed()); // output false 
console.log(myColor.is('red')); // output false 

console.log(myColor._id); // output blue 
console.log(myColor.name()); // output blue 
console.log(myColor.toString()); // output blue 

// See how CamelCase is used to generate the isXxx() functions 
var AppMode = ConstJs.enum('SIGN_UP, LOG_IN, FORGOT_PASSWORD');
var curMode = AppMode.LOG_IN;

console.log(curMode.isLogIn()); // output true 
console.log(curMode.isSignUp()); // output false 
console.log(curMode.isForgotPassword()); // output false 

创建字符串常量:
var ConstJs = require('constjs');

var Weekdays = ConstJs.const("Mon, Tue, Wed");
console.log(Weekdays); // output {Mon: 'Mon', Tue: 'Tue', Wed: 'Wed'} 

var today = Weekdays.Wed;
console.log(today); // output: 'Wed'; 

创建位图:
var ConstJs = require('constjs');

var ColorFlags = ConstJs.bitmap("blue red");
console.log(ColorFlags.blue); // output false 

var StyleFlags = ConstJs.bitmap(true, "rustic model minimalist");
console.log(StyleFlags.rustic); // output true 

var CityFlags = ConstJs.bitmap({Chengdu: true, Sydney: false});
console.log(CityFlags.Chengdu); //output true 
console.log(CityFlags.Sydney); // output false 

var DayFlags = ConstJs.bitmap(true, {Mon: false, Tue: true});
console.log(DayFlags.Mon); // output false. Default val wont override specified val if the type is boolean  

更多信息请查看:

声明:我是这个工具的作者。


0
声明一个只读的常量。
通过 const 声明的变量不能被重新声明或重新赋值。
常量可以使用大写或小写字母声明,但通常约定俗成的是使用全大写字母。
// const c;
// c = 9;   //intialization and declearation at same place
const c = 9;
// const c = 9;// re-declare and initialization is not possible
console.log(c);//9

你正在使用引用语法 - 是否有来源? - Cadoiz

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接