当第一个属性为空或未定义时如何使用 ES6 对象解构默认为另一个属性

Posted

技术标签:

【中文标题】当第一个属性为空或未定义时如何使用 ES6 对象解构默认为另一个属性【英文标题】:How to default to another property when the first is null or undefined using ES6 Object destructuring 【发布时间】:2018-06-13 14:45:31 【问题描述】:

当第一个属性为空或使用 ES6 对象解构未定义时,寻找一种从对象访问第二个非空属性的简洁方法。

等效于 ES5:

var obj =  a: null, b: 2 ;
var num = obj.a || obj.b; // num = 2

使用 ES6(类似):

const  num: a || b  = obj; // <- how to achieve the above effect here?

【问题讨论】:

目前还没有这样的语法。你只能const a, b = obj, num = a || b; 函数 args 中的默认语法和解构仅适用于 undefined,因此如果您想要 null 和 undefined 的默认逻辑,您需要自己做。 【参考方案1】:
 const  a: num = obj.b  = obj;

(仅适用于undefined,不适用于null

const num = ((a, b) => a || b)(obj)

【讨论】:

我尝试了第一个,当我尝试访问num 时出现引用错误。 @barmar,是的,编辑过,从 OP 手中接过它而不考虑它...... 使用Stack Snippet 将测试用例放在这里而不是外部站点。【参考方案2】:

解构中的默认值仅适用于undefined,不适用于null。与

var obj =  a: undefined, b: 2

你可以使用可怕的黑客攻击

var  b: num, a: num = num  = obj;

或其更易读的变体

const  b, a: num = b  = obj;

然而,它在作用域中引入了一个额外的标识符b

【讨论】:

以上是关于当第一个属性为空或未定义时如何使用 ES6 对象解构默认为另一个属性的主要内容,如果未能解决你的问题,请参考以下文章

IE:无法获取属性“clientWidth”的值:对象为空或未定义

Asp.net MVC 中的 jquery 验证错误 - 无法获取属性“调用”的值:对象为空或未定义

IE9 JavaScript 错误:SCRIPT5007:无法获取属性“ui”的值:对象为空或未定义

对象可能为空或未定义 [重复]

js 判断变量是否为空或未定义

如何确定中继查询是不是为空或未加载