条件变量赋值的最佳方法

时间:2012-06-07 06:41:17

标签: javascript

只想检查哪种是条件变量分配的更好方法

第一种方法

if (true) {
  var myVariable = 'True';
} else {
  var myVariable = 'False';
}

第二种方法

var myVariable = 'False';
if (true) {
  myVariable = 'True';
}

我实际上更喜欢第二名,没有任何具体的技术原因。你们觉得怎么样?

12 个答案:

答案 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不会可在ifelse块之外访问。

换句话说,两种解决方案都有缺点。那么三元运算符:

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而不是使用ifswitchternary语句。

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);

在上面的代码中,如果isAnimalisPlant中的一个标志为真,则返回其旁边的字符串。这是因为&&||都导致其操作数之一的值:

  • 如果可以将A强制转换为false,则A && B返回值A;否则,它将返回B。
  • A ||如果可以将A强制为true,则B返回值A;否则,它将返回B。

受本文启发的答案: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));