Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/450.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
JavaScript中的空合并运算符_Javascript - Fatal编程技术网

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;