只想检查哪种是条件变量分配的更好方法
第一种方法
if (true) { var myVariable = 'True'; } else { var myVariable = 'False'; }
第二种方法
var myVariable = 'False'; if (true) { myVariable = 'True'; }
我实际上更喜欢第二名,没有任何具体的技术原因。你们觉得怎么样?
答案 0 :(得分:72)
试试这个
var myVariable = (true condition) ? "true" : "false"
答案 1 :(得分:13)
我知道有两种方法可以按条件声明变量的值。
方法1:如果条件的计算结果为true,则列左侧的值将分配给变量。如果条件评估为false,则右侧的条件将分配给变量。您还可以将许多条件嵌套到一个语句中。
var a = (true)? "true" : "false";
方法1的嵌套示例:将变量A值更改为0,1,2和负值,以查看语句将如何生成结果。
var a = 1;
var b = a > 0? (a === 1? "A is 1" : "A is not 1") : (a === 0? "A is zero" : "A is negative");
方法2:在此方法中,如果||的左侧值等于零,假,空,未定义或空字符串,然后右侧的值将分配给变量。如果||左边的值如果不等于零,false,null undefined或空字符串,则左侧的值将分配给变量。
虽然左边的值可以是JS未定义的值来评估条件但是必须声明变量,否则将产生异常。
var a = 0;
var b = a || "Another value";
答案 2 :(得分:5)
你可以做一个三元组,它更短(并且没有花苞的大括号):
var myVariable = (true) ? 'True' : 'False';
答案 3 :(得分:4)
当您在变量中仅存储true false时使用
var myVariable =(condition_written_in_if);
答案 4 :(得分:2)
第一个解决方案在第二个代码段中仅使用一个分配而不是平均分配1,5。另一方面,第一个代码片段的可读性较差,因为不熟悉JavaScript的人可能没有意识到变量的范围不是面向函数的块 - 在其他语言中使用类似C的语法myVariable
不会可在if
和else
块之外访问。
换句话说,两种解决方案都有缺点。那么三元运算符:
var myVariable = condition? 'True' : 'False';
或者如果你不关心驼峰式的情况(虽然我知道这只是一个例子,而不是真正的代码);
var myVariable = (!!condition).toString();
答案 5 :(得分:1)
另一个很酷的事情是,您可以根据条件进行多次分配:
let [long_str, short_str] = a.length > b.length ? [a, b] : [b, a]
答案 6 :(得分:1)
只是为了完成,除了这里提到的所有其他方法之外,还有另一种方法是使用查找表。
假设您有许多可能的值,则可以声明性地配置Map而不是使用if
,switch
或ternary
语句。
Object map = {
key1: 'value1',
key2: 'value2,
keyX: 'valueX'
};
var myVariable = map[myInput];
这甚至适用于布尔值:
Object map = { true: 'value1', false: 'value2 };
var myVariable = map[myBoolean];
对于布尔值,尽管使用专门为此设计的逻辑运算符,您可能会以“正常”方式进行操作。尽管有时它会很有用,例如:
请注意,使用查找映射的优势和使用函数变量(闭包)的优势之间存在一些重叠。
答案 7 :(得分:1)
实现此目的的另一种方法是利用逻辑运算符返回值的能力。
let isAnimal = false;
let isPlant = true;
let thing = isAnimal && 'animal' || isPlant && 'plant' || 'something else';
console.log(thing);
在上面的代码中,如果isAnimal
或isPlant
中的一个标志为真,则返回其旁边的字符串。这是因为&&
和||
都导致其操作数之一的值:
受本文启发的答案:https://mariusschulz.com/blog/the-and-and-or-operators-in-javascript
PS:仅用于学习目的。通过在生产代码中使用此方法,不要让您和您的同事更辛苦。
答案 8 :(得分:0)
我也更喜欢第二种选择,没有技术原因,但为了易于阅读代码,可读性在代码中非常重要。
如果你看到第二个选项,从处理的角度来看,只会执行一次检查,保存一些非常微小的处理时间,所以在第二种情况下只有一次检查。
答案 9 :(得分:0)
这取决于我的用途。如果我有代码,我只想运行,如果是真的,但没有额外的代码假,我将使用第二个。如果我想在true上执行一些代码,在false上执行不同的代码,我会使用第一个。这一切都取决于使用,但对我来说一般规则是写一次。保持清洁,保持简洁,并保持简短
答案 10 :(得分:0)
也许您只需要&&
运算符即可检查布尔值是否为true,如果是,则将“ myVariable”设置为true。
var myVariable = 'False';
true && myVariable = 'True';
答案 11 :(得分:-1)
let value = function(condition){
if(condition) {
return "true";
} else {
return "false";
}
}
console.log(value(true));