Null Conditional Operators

后端 未结 4 1461
陌清茗
陌清茗 2020-12-01 12:01

C# 6.0 has just been released and has a new nice little feature that I\'d really like to use in JavaScript. They\'re called Null-conditional operators. These use a ?.<

4条回答
  •  南笙
    南笙 (楼主)
    2020-12-01 12:23

    Js logical operators return not true or false, but truly or falsy value itself. For example in expression x && y, if x is falsy, then it will be returned, otherwise y will be returned. So the truth table for operator is correct.

    In your case you could use expression customers && customers.orders && customers.orders.Length to get length value or the first falsy one.

    Also you can do some magic like ((customers || {}).orders || {}).length (Personally, I don't like this syntax and possible garbage collection pressure as well)

    Or even use 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();
    

    It's longer than all the previous approaches, but clearly shows your intentions without any magic behind.

提交回复
热议问题