47

我想知道是否有更短的方法来写这个:

var x = 1;
if(y != undefined) x = y;

我最初尝试过x = y || 1,但没有奏效。这样做的正确方法是什么?

4

7 回答 7

96
var x = y !== undefined ? y : 1;

请注意,var x = y || 1;它将分配1给任何错误的情况y(例如,,,false0""这可能是它对您“不起作用”的原因。另外, ify是一个全局变量,如果它确实没有定义,你可能会遇到错误,除非你将它作为window.y.


正如 vol7ron 在评论中建议的那样,您还可以使用typeof以避免将全局变量称为window.<name>

var x = typeof y != "undefined" ? y : 1;
于 2012-03-25T22:25:41.443 回答
23

另一种写法

bePlanVar = !!((bePlanVar == false));

// is equivalent to

bePlanVar = (bePlanVar == false) ? true : false;

// and 

if (bePlanVar == false) {
    bePlanVar = true;
} else {
    bePlanVar = false;
}
于 2013-05-23T20:02:51.343 回答
4
y = (y != undefined) ? y : x;

括号不是必需的,我只是添加它们,因为我认为这样更容易阅读。

于 2012-03-25T22:26:43.737 回答
3

另一种方法是使用短路:

x = (typeof y !== 'undefined') && y || 1

虽然我自己认为三进制更具可读性。

于 2016-02-18T02:40:46.450 回答
2

这是一种可行的方法,但实际上可能不是任何语言的最佳实践:

var x,y;
x='something';
y=1;
undefined === y || (x = y);

或者

undefined !== y && (x = y);
于 2017-08-02T08:36:25.463 回答
0

你可以试试 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
于 2020-06-08T08:11:09.170 回答
0

看来您的 'y' 默认为 1:箭头函数在 2020 年将很有用:

let x = (y = 1) => //insert operation with y here

让'x'是一个函数,其中'y'是一个参数,如果它是一些空值或未定义的值,它将被分配一个默认值'1',然后返回一些带有y的操作。

于 2020-04-04T08:46:15.713 回答