当第一个属性为空或未定义时如何使用 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 验证错误 - 无法获取属性“调用”的值:对象为空或未定义