扩展空数组的逻辑OR ||语法

Extending the logical OR || syntax for the empty array

本文关键字:OR 语法 数组 扩展      更新时间:2023-09-26

fg为两个函数。然后f() || g()先评估f。如果f的返回值为false,则计算g,并返回g的返回值。

我喜欢它简洁的语法,但是它不包括f返回空数组[]的情况,我想认为这是"false"。

是否有干净的方式有这种语法的[]而不是传统的假值?

您可以编写一个函数,将空数组转换为真实的假值,也许?

function e(a) { return a instanceof Array ? (a.length ? a : false) : a; }
var result = e(f()) || g();

所提出的其他解决方案的问题是,它的行为不完全是您可能希望的短路工作方式。例如,在||运算符之前将f()的值转换为真值意味着失去返回f()的结果的能力。所以这是我的首选解决方案:编写一个像||操作符一样的函数。

// let's call the function "either" so that we can read it as "either f or g"
function either () {
    var item;
    // return the first non-empty truthy value or continue:
    for (var i=0;i<arguments.length;i++) {
        item = arguments[i];
        if (item.length === 0 || !item) continue
        return item;
    }
    return false;
}

现在可以像使用||运算符一样使用either()函数:

either(f(), g());

为什么不直接在f()进行长度检查呢?

function f(){
  var returned_array = new Array();
  ...
  if(!returned_array.length)
    return false;
}

如果你谈论的是实际重载||运算符,你不能在JavaScript中这样做(它在ECMAScript 4中被提议,但被拒绝了)。如果你真的想在JavaScript中重载操作符,你必须使用像JavaScript Shaper这样的东西,它是"JavaScript语法树塑造的可扩展框架"——你实际上可以使用它来重载操作符。