简写 if/else 语句 Javascript

Posted

技术标签:

【中文标题】简写 if/else 语句 Javascript【英文标题】:Shorthand if/else statement Javascript 【发布时间】:2012-04-09 12:20:41 【问题描述】:

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

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

我最初尝试了x = y || 1,但没有奏效。解决这个问题的正确方法是什么?

【问题讨论】:

x=y||x 如果您不关心严格的 undefined,则可以使用 【参考方案1】:

你可以试试 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

【讨论】:

【参考方案2】:

您似乎将“y”默认为 1:箭头函数在 2020 年会很有用:

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

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

【讨论】:

这不是 OP 所要求的。您建议 x 成为一个函数,除非您立即调用它。即便如此,这也会使代码过于复杂,因为在 javascript 中,默认赋值只能用|| 运算符表示,就像 OP 中注释的 @Nemesarial 或接受答案中的三元运算符【参考方案3】:

其他方式是使用短路:

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

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

【讨论】:

【参考方案4】:

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

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

或者

undefined !== y && (x = y);

【讨论】:

刚刚注意到这已经由@AndreFigueiredo 提供 不完全一样,谢谢您的回答,尽管通常在条件中赋值不是一个好习惯。【参考方案5】:

另一种写法

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

// is equivalent to

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

// and 

if (bePlanVar == false) 
    bePlanVar = true;
 else 
    bePlanVar = false;

【讨论】:

【参考方案6】:
var x = y !== undefined ? y : 1;

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


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

var x = typeof y != "undefined" ? y : 1;

【讨论】:

欢迎三元运算符。我会试试看。编辑:啊,好吧。 “未定义”呢?好像没听懂。 什么意思?字符串'undefined' 为真值,不等于实际undefined 值。 我的意思是,变量根本没有被声明。我知道字符串“未定义”的计算结果为布尔值 true,但这不是我想要的。 当你说它“似乎没有抓住那个”时,你是什么意思?如果您正在处理可能未定义的全局变量,您可能希望使用window.y(实际上将返回undefined)而不是y(这可能会导致错误)。跨度> 我最初尝试提醒 x 的值,但没有任何弹出。通过 console.log 进行的进一步实验表明 y 是未定义的,它甚至不会运行 || 语句。【参考方案7】:
y = (y != undefined) ? y : x;

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

【讨论】:

你的括号不平衡(也是不必要的)。 @Amber 从你开始使用 javscript 速记的那一刻起,你就已经在说你不关心可读性了,那么为什么还要使用平衡括号呢?。

以上是关于简写 if/else 语句 Javascript的主要内容,如果未能解决你的问题,请参考以下文章

JavaScript 常用的简写技巧

19 个 JavaScript 常用的简写技术

19 个常用的 JavaScript 简写方法

19+ JavaScript 常用的简写技巧

收藏 19 个 ES6常用的简写技巧

好程序员web前端教程分享JavaScript简写方法