空条件操作符

C#6.0刚刚发布,并有一个新的漂亮的小功能,我真的很喜欢用JavaScript。 它们被称为空条件运算符。 这些使用?.?[]语法。

这些操作基本上允许您在尝试访问属性之前检查您拥有的对象是否为null 。 如果该对象为null ,那么您将因为您的属性访问而得到null

int? length = customers?.Length;

所以这里int可以是null,如果customers为null,将会取这个值。 更好的是你可以链接这些:

int? length = customers?.orders?.Length;

我不相信我们可以在JavaScript中做到这一点,但我想知道做类似的最好方法是什么。 一般来说, if块难以阅读,我会发现链接:

var length = null;
if(customers && customers.orders) {
    length = customers.orders.length;
}

被称为“可选链”,目前它是阶段1中的TC39提案。然而,Babel插件已经在v7中可用。

用法示例:

const obj = {
  foo: {
    bar: {
      baz: 42,
    },
  },
};

const baz = obj?.foo?.bar?.baz; // 42

const safe = obj?.qux?.baz; // undefined

Js逻辑运算符返回的不是truefalse ,而是trulyfalsy价值本身。 例如在表达式x && y ,如果x是虚假的,那么它将被返回,否则y将被返回。 所以操作者的真值表是正确的。

在你的情况下,你可以使用表达式customers && customers.orders && customers.orders.Length来获得length值或第一个falsy值。

你也可以像((customers || {}).orders || {}).length一样做一些魔术((customers || {}).orders || {}).length (就我个人而言,我不喜欢语法和可能的垃圾收集压力)

甚至maybe使用monad。

function Option(value) {
    this.value = value;
    this.hasValue = !!value;
}

Option.prototype.map = function(s) {
    return this.hasValue
        ? new Option(this.value[s])
        : this;
}

Option.prototype.valueOrNull = function() {
    return this.hasValue ? this.value : null;
}

var length = 
    new Option(customers)
        .map("orders")
        .map("length")
        .valueOrNull();

它比以前的所有方法都要长,但清楚地表明你的意图没有任何魔力。

链接地址: http://www.djcxy.com/p/53861.html

上一篇: Null Conditional Operators

下一篇: Benefits of using the conditional ?: (ternary) operator