【发布时间】:2012-04-09 12:20:41
【问题描述】:
我想知道是否有更短的方法来写这个:
var x = 1;
if(y != undefined) x = y;
我最初尝试了x = y || 1,但没有奏效。解决这个问题的正确方法是什么?
【问题讨论】:
-
x=y||x如果您不关心严格的 undefined,则可以使用
标签: javascript shorthand
我想知道是否有更短的方法来写这个:
var x = 1;
if(y != undefined) x = y;
我最初尝试了x = y || 1,但没有奏效。解决这个问题的正确方法是什么?
【问题讨论】:
x=y||x 如果您不关心严格的 undefined,则可以使用
标签: javascript shorthand
你可以试试 if/else 这个速记方法:
// Syntax
if condition || else condition
// Example
let oldStr = "";
let newStr = oldStr || "Updated Value";
console.log(newStr); // Updated Value
// Example 2
let num1 = 2;
let num2 = num1 || 3;
console.log(num2); // 2 cause num1 is a truthy
【讨论】:
您似乎将“y”默认为 1:箭头函数在 2020 年会很有用:
let x = (y = 1) => //insert operation with y here
让 'x' 是一个函数,其中 'y' 是一个参数,如果它是某个 null 或未定义的值,它将被分配一个默认值为 '1',然后返回一些带有 y 的操作。
【讨论】:
x 成为一个函数,除非您立即调用它。即便如此,这也会使代码过于复杂,因为在 JavaScript 中,默认赋值只能用|| 运算符表示,就像 OP 中注释的 @Nemesarial 或接受答案中的三元运算符
其他方式是使用短路:
x = (typeof y !== 'undefined') && y || 1
虽然我自己认为三进制更具可读性。
【讨论】:
这是一种可行的方法,但实际上可能不是任何语言的最佳实践:
var x,y;
x='something';
y=1;
undefined === y || (x = y);
或者
undefined !== y && (x = y);
【讨论】:
另一种写法
bePlanVar = !!((bePlanVar == false));
// is equivalent to
bePlanVar = (bePlanVar == false) ? true : false;
// and
if (bePlanVar == false) {
bePlanVar = true;
} else {
bePlanVar = false;
}
【讨论】:
var x = y !== undefined ? y : 1;
请注意,var x = y || 1; 将分配1 用于y 为假的任何情况(例如false、0、""),这可能是它对您“不起作用”的原因.另外,如果y 是一个全局变量,如果它确实没有定义,你可能会遇到错误,除非你以window.y 访问它。
正如 vol7ron 在 cmets 中建议的那样,您也可以使用 typeof 来避免将全局变量称为 window.<name>:
var x = typeof y != "undefined" ? y : 1;
【讨论】:
'undefined' 为真值,不等于实际undefined 值。
window.y(实际上将返回undefined)而不是y(这可能会导致错误)。跨度>
|| 语句。
y = (y != undefined) ? y : x;
括号不是必需的,我只是添加它们,因为我认为这样更容易阅读。
【讨论】: