条件变量赋值的最佳方法

Rav*_*eja 31 javascript

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

第一种方法

 if (true) {
   var myVariable = 'True';
 } else {
   var myVariable = 'False';
 }
Run Code Online (Sandbox Code Playgroud)

第二种方法

 var myVariable = 'False';
 if (true) {
   myVariable = 'True';
 }
Run Code Online (Sandbox Code Playgroud)

我实际上更喜欢第二个没有任何特定技术原因.你们有什么感想?

dku*_*mar 82

试试这个

var myVariable = (true condition) ? "true" : "false"
Run Code Online (Sandbox Code Playgroud)

  • 这与第一种方法不同吗?不同的语法难道不是一回事吗? (2认同)

Kev*_* Ng 16

我知道有两种方法可以通过条件声明变量的值.

方法1:如果条件的计算结果为true,则列左侧的值将分配给变量.如果条件评估为false,则右侧的条件将分配给变量.您还可以将许多条件嵌套到一个语句中.

var a = (true)? "true" : "false";
Run Code Online (Sandbox Code Playgroud)

方法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");
Run Code Online (Sandbox Code Playgroud)

方法2:在这个方法中,如果||的左边的值 等于零,假,空,未定义或空字符串,然后右侧的值将分配给变量.如果||左边的值 如果不等于零,false,null undefined或空字符串,则左侧的值将分配给变量.

虽然左边的值可以是JS未定义的值来评估条件,但必须声明变量,否则将生成异常.

var a = 0;
var b = a || "Another value";
Run Code Online (Sandbox Code Playgroud)


Jos*_*eph 7

你可以做一个三元组,它更短(并且没有花苞的大括号):

var myVariable = (true) ? 'True' : 'False';
Run Code Online (Sandbox Code Playgroud)


ari*_*ris 7

另一个很酷的事情是您可以根据条件进行多项分配:

let [long_str, short_str] = a.length > b.length ? [a, b] : [b, a]
Run Code Online (Sandbox Code Playgroud)


Ben*_*ema 6

为了完整起见,除了这里提到的所有其他方法之外,还有另一种方法,那就是使用查找表。

假设您有许多可能的值,您可以以声明方式配置 Map 而不是使用if, switchorternary语句。

Object map = {
   key1: 'value1',
   key2: 'value2',
   keyX: 'valueX'
};

var myVariable = map[myInput];
Run Code Online (Sandbox Code Playgroud)

这甚至适用于布尔值:

Object map = { true: 'value1', false: 'value2 };

var myVariable = map[myBoolean];
Run Code Online (Sandbox Code Playgroud)

对于布尔值,您可能会以“正常”方式进行操作,尽管使用专门为此设计的逻辑运算符。尽管有时它可能很有用,例如:

  • 便携性:你可以传递地图
  • 可配置性:也许这些值来自属性文件
  • 可读性:如果你不在乎它是否是布尔值,你只是想避免条件逻辑并以此方式减少认知负担

请注意,使用查找图的优点和使用函数变量(闭包)的优点之间存在一些重叠。


Val*_*tin 6

另一种方法是利用逻辑运算符返回值的能力。

let isAnimal = false;
let isPlant = true;

let thing = isAnimal && 'animal' || isPlant && 'plant' || 'something else';

console.log(thing);
Run Code Online (Sandbox Code Playgroud)

在上面的代码中,当标志之一为 trueisAnimal或 时isPlant,将返回其旁边的字符串。这是因为&&||导致其操作数之一的值:

  • 如果 A 可以被强制为 false,则 A && B 返回值 A;否则返回 B。
  • 一个|| 如果 A 可以被强制为真,则 B 返回值 A;否则返回 B。

受本文启发的答案:https : //mariusschulz.com/blog/the-and-and-or-operators-in-javascript

PS:仅供学习使用。不要在您的生产代码中使用这种方法,让您和您的同事生活更艰难。


小智 5

当您仅在variabel中存储true false时,使用第三种方法

 var myVariable =(condition_written_in_if);
Run Code Online (Sandbox Code Playgroud)


mpr*_*hat 1

我也更喜欢第二个选项,没有技术原因,但为了易于阅读代码,代码的可读性非常重要。

如果您看到第二个选项,从处理的角度来看,只会执行一项检查,节省了一些非常分钟的处理时间,因此在第二种情况下只有一项检查。