条件变量赋值的最佳方法
Best Way for Conditional Variable Assignment
哪种条件变量赋值方法更好?
第一种方法
if (true) {
var myVariable = 'True';
} else {
var myVariable = 'False';
}
第二种方法
var myVariable = 'False';
if (true) {
myVariable = 'True';
}
我实际上更喜欢第二个,没有任何特定的技术原因。你们怎么看?
试试这个
var myVariable = (true condition) ? "true" : "false"
我知道有两种方法可以通过条件声明变量的值。
方法 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,未定义或空字符串,则右侧的值将被分配给变量。如果 || 左侧的值不等于零、假、未定义空或空字符串,则左侧的值将分配给变量。
虽然左边的值可以是 JS 评估条件的未定义值,但必须声明变量,否则将产生异常。
var a = 0;
var b = a || "Another value";
执行此操作的另一种方法是利用逻辑运算符返回值的能力。
let isAnimal = false;
let isPlant = true;
let thing = isAnimal && 'animal' || isPlant && 'plant' || 'something else';
console.log(thing);
在上面的代码中,当其中一个标志为 true isAnimal
或 isPlant
时,返回它旁边的字符串。这是因为&&
和||
都会导致其操作数之一的值:
- 如果 A 可以被强制为 false,则 A && B 返回值 A;否则,它返回 B。
- 一 ||如果 A 可以强制为 true,则 B 返回值 A;否则,它返回 B。
受本文启发的答案:https://mariusschulz.com/blog/the-and-and-or-operators-in-javascript
PS:只能用于学习目的。不要通过在生产代码中使用此方法使您和您的同事的生活更加困难。
你可以做一个三元,它要短得多(而且没有的大括号):
var myVariable = (true) ? 'True' : 'False';
另一个很酷的事情是,您可以根据条件进行多个分配:
let [long_str, short_str] = a.length > b.length ? [a, b] : [b, a]
种方式,当你在变量中只存储真假时,使用
var myVariable =(condition_written_in_if);
为了完成,除了这里提到的所有其他方法之外,还有另一种方法,即使用查找表。
假设您有许多可能的值,则可以声明性地配置 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];
对于布尔值,您可能会使用专门为此设计的逻辑运算符以"正常"的方式执行此操作。尽管有时它可能很有用,例如:
- 便携性:您可以传递地图
- 可配置性:可能值来自属性文件
- 可读性:如果你不在乎它是否是布尔值,你只想避免条件逻辑,并以这种方式减少认知负荷
请注意,使用查找映射的优点与使用函数变量(闭包)的优点之间存在一些重叠。
第一个解决方案仅使用一个赋值,而不是第二个代码片段中的平均 1,5。另一方面,第一个代码片段的可读性较差,因为不熟悉 JavaScript 的人可能没有意识到变量的作用域不是面向函数的块导向的 - 在其他具有类似 C 语法的语言上myVariable
在if
和else
块之外无法访问。
换句话说,这两种解决方案都有缺点。三元运算符呢:
var myVariable = condition? 'True' : 'False';
或者如果你不关心骆驼案(尽管我知道这只是一个例子,而不是真正的代码);
var myVariable = (!!condition).toString();
如果你厌倦了三元运算符,那就用IIFE
另一种方法是使用立即调用的函数表达式。它的好处是它可以容纳一些逻辑,并且可以从外部世界封装。
const direction = "n";
const directionFull= (() => {
switch(direction ){
case "n": return "north";
case "s": return "south";
case "w": return "west";
case "e": return "east";
}
})()
console.log(directionFull);
我也更喜欢第二个选项,没有技术原因,但为了易于阅读代码,可读性在代码中非常重要。
如果您看到第二个选项,从处理的角度来看,只会执行一次检查,从而节省了非常小的处理时间,因此在第二种情况下只有一个检查。
我的用途。如果我有代码,我只想在 true 时运行,但没有额外的 false 代码,我将使用第二个。如果我想在 true 上执行一些代码,而在 false 上执行不同的代码,我使用第一个。这完全取决于用途,但对我来说,一般规则是写一次。保持干净,保持简单,并保持简短
也许你只需要&&
运算符来检查布尔值是否为真,如果是,则将"myVariable"断言为真。
var myVariable = 'False';
true && myVariable = 'True';
<</div>
div class="answers"> 如果您需要做的就是将布尔值转换为字符串,则应明确执行此操作:
var myBool = true;
var myVariable = myBool.toString(); // 'true'
// '' + myBool, ''.concat(myBool), etc. also work
如果第一个字母大写很重要,就像在你的例子中一样,这并不难做到;例如,请参阅这个答案。
地图和对象的另一种方法:(地图对键类型更灵活,对象更易读恕我直言)
const condition_var = 'e'
const options1 = new Map([ ['n','north'],['s','south'],['e','east'],['w','west']])
const myVar1 = options1.get(condition_var) || null
const options2 = {n:'north', s:'south', e:'east', w:'west'}
const myVar2 = options2[condition_var] || null
console.log(myVar1)
console.log(myVar2)
如果您尝试做的是设置一个值(如果它不是 null/undefined),否则使用另一个值,则可以使用 nullish 合并运算符:
const thing = obj.field ?? otherVal;
- 有条件更新d3.js力图中节点的最佳方法
- 将jQuery.ech()方法转换为本地JavaScript抽象的最佳方法是什么
- 处理浮点错误的最佳方法是什么
- 从数组中删除元素的最佳方法是:javascript/jquery
- 以编程方式填充组合框道场 (1.8) 的最佳方法是什么?
- 列出没有 mysql 的元素的最佳方法是什么
- 在jquery库中重新定义方法的最佳方法
- Javascript,用vars创建对象的最佳方法
- 使用 jQuery 从 HTML 中获取某些值的最佳方法
- 在变量中保存值的最佳方法是在应用程序关闭后使用,然后使用apachecordova在android中重新启动
- 在d3.json中使用d3.csv组合多个csv文件数据输入的最佳方法是什么
- 用jasmine测试JavaScriptUI的最佳方法
- 使用javascript:在没有阻止html标记(<b>、<p>等)的情况下,阻止脚本的最佳方法
- 如果我返回表,检查 Ajax 调用是否为 200 OK的最佳方法是什么
- JavaScript - 创建可链接函数时的最佳方法是什么
- 在上下文菜单项单击上显示侧边栏/弹出窗口的最佳方法是什么
- 在 JavaScript 中获取范围的随机数的最佳方法
- 在对象类上实现 jquery 作用域的最佳方法
- 将同步函数包装到承诺中的最佳方法是什么?
- 使用 MVC 删除 JavaScript 中硬编码字符串 Asp.Net 最佳方法