JavaScript中的空合并运算符
如何更好地处理这件事JavaScript中的空合并运算符,javascript,Javascript,如何更好地处理这件事 this.state.updateItem?this.state.updateItem.unit:'Unit'; 我尝试过使用this.state.updateItem.unit | | |“unit”,但它发现它将产生错误,因为this.state.updateItem为NULL,所以它找不到unit的任何属性 如何更好地执行此操作?您可以尝试将空对象设置为默认值: (this.state.updateItem || {}).unit || 'Unit' 单位将始终有
this.state.updateItem?this.state.updateItem.unit:'Unit';
我尝试过使用this.state.updateItem.unit | | |“unit”,但它发现它将产生错误,因为this.state.updateItem为NULL,所以它找不到unit的任何属性
如何更好地执行此操作?您可以尝试将空对象设置为默认值:
(this.state.updateItem || {}).unit || 'Unit'
单位将始终有值或未定义。现在,您必须这样做:
(this.state.updateItem || {}).unit || 'Unit'
ES(JavaScript)有一个第一阶段的建议,我们(希望最终)可以这样做:
this.state.updateItem?.unit || 'Unit'
如果你在玩babel,现在就可以用了编辑:该提案目前处于第4阶段(截至2020年1月),将添加到JavaScript标准中
以下是使用es6解构和默认值的方法:
const {
updateItem: {
unit = 'Unit'
} = {}
} = this.state;
然后您可以使用
单元
您可以这样做
const path = (pathString, obj) =>
pathString.split(".")
.reduce((obj = {}, key) => obj[key], obj);
const defaultTo = (x, y) => y == null ? x : y;
// in your own code
const unit = defaultTo(
"Unit",
path("state.updateItem.unit", this)
);
这些函数已经以类似的方式存在于诸如ramda或lodash/fp之类的库中
它还减少了对
obj?.state?.updateItem?.unit
的任何地方的需求,尽管它显然不是完美的。以前对这个问题的回答不再相关。
截至2020年年中,官方ECMAScript中添加了一个空聚结操作符。它是一个真正的空合并运算符,因为它的行为与您期望的空合并运算符的行为相同。操作符的JavaScript语法实现源自其他几种编程语言使用的语法,因此,经验丰富的资深开发人员可能会熟悉它,即使他们在编写JavaScript时从未使用过它
const varAlpha = varBeta ?? varGamma;
如果varAlpha为notnull且not未定义,则null合并运算符返回varBeta的值,否则返回varGamma
评估零合并操作符:
谢谢你的解答!是的,我认为这将是伟大的做这样的事情谢谢你的建议,但我正在寻找答案
let varAlpha = varBeta ?? varGamma;
// Equates to:
let varAlpha = (varBeta !== null && varBeta !== undefined)
? varBeta
: varGamma;