在 Javascript 中有条件地初始化常量

ES6开始,我们有 const

这是不允许的:

const x; //declare first
//and then initialize it
if(condition) x = 5;
else x = 10;

这是有意义的,因为它阻止我们在初始化常量之前使用它。

但如果我这么做了

if(condition)
const x = 5;


else
const x = 10;

X 成为块作用域。

那么如何有条件地创建一个常量呢?

51808 次浏览

假设将在 都有实例中声明 const,您可以使用三元赋值:

const x = condition ? 5 : 10;

你们的问题,如你们所知,是 const必须用声明它的表达式来初始化。

这并不意味着赋给常量的值必须是字面值。它可以是任何有效的表达式,实际上是三元组:

const x = IsSomeValueTrue() ? 1 : 2;

或者把它赋给变量的值?

let y = 1;
if(IsSomeValueTrue()) {
y = 2;
}


const x = y;

当然,你也可以把它赋给函数的返回值:

function getConstantValue() {
return 3;
}


const x = getConstantValue();

所以有很多方法可以让价值动态变化,你只需要确保它只被分配到一个地方。

如果三元操作符不是一个不可读的选项,那么唯一的另一个选项是 IIFE,它很麻烦,但可以流利地阅读:

const x = (() => {
if (condition)
return 5
else
return 10
})();

const的语义是它被分配了一次。对于这个用例,它应该是 let:

let x;
if(condition) x = 5;
else x = 10;

根据我个人的经验,大约95% 的变量是 const。如果一个变量必须是 let,那么就让它成为它自己; 由意外重新分配引起的错误的可能性是可以忽略不计的。