Fro*_*yon 24 javascript constants ecmascript-6
ES6以后我们有const.
这是不允许的:
const x; //declare first
//and then initialize it
if(condition) x = 5;
else x = 10;
Run Code Online (Sandbox Code Playgroud)
这是有道理的,因为它阻止我们在初始化之前使用常量.
但如果我这样做
if(condition)
const x = 5;
else
const x = 10;
Run Code Online (Sandbox Code Playgroud)
x成为块范围.
那么如何有条件地创建一个常量呢?
Hec*_*ksa 31
如你所知,你的问题是const必须在声明它的同一语句中初始化.
这并不意味着您为常量赋值的值必须是字面值.它可能是任何有效的陈述 - 三元:
const x = IsSomeValueTrue() ? 1 : 2;
Run Code Online (Sandbox Code Playgroud)
或者只是将它分配给变量的值?
let y = 1;
if(IsSomeValueTrue()) {
y = 2;
}
const x = y;
Run Code Online (Sandbox Code Playgroud)
您当然可以将它分配给函数的返回值:
function getConstantValue() {
return 3;
}
const x = getConstantValue();
Run Code Online (Sandbox Code Playgroud)
所以有很多方法可以使价值变得动态,你只需要确保它只在一个地方分配.
Est*_*ask 14
如果三元运算符不是其不可读性的选项,那么唯一的另一种选择是IIFE,这很麻烦但可以流利地阅读:
const x = (() => {
if (condition)
return 5
else
return 10
})();
Run Code Online (Sandbox Code Playgroud)
语义const是它被分配一次.应该是let这个用例:
let x;
if(condition) x = 5;
else x = 10;
Run Code Online (Sandbox Code Playgroud)
根据我个人的经验,约95%的变数是const.如果必须要变量let,那就让它自己吧; 意外重新分配造成的错误概率可以忽略不计.
假设const将在两种情况下都声明,您可以使用三元赋值:
const x = condition ? 5 : 10;
Run Code Online (Sandbox Code Playgroud)