检查覆盖值的真实性不工作

checking thruthness of overwritten valueOf not working

我想在我的代码中创建一个类似的结构。

var inList =  findItem(list, data); 

if(!inList) {

  var item = inList.item;

}

function findItem(list, data) {
  var item = list.find("[data-day='"+data.day+"']")

  // more code.

  // conditional return
  return {item: item, valueOf:function(){return false}};
}

但它不起作用,因为覆盖 valueOf 不能很好地进行简单的真实检查(以我希望它工作的方式)。

并且像 if(inList == false){} 这样的代码在我看来不太干净。有没有办法让这个工作?

布尔检查不调用 valueOf - 所有对象都被认为是真实的。如果你想规避它,你必须自己显式调用它:

if (!inList.valueOf()) …

你不应该依赖于使用 valueOf 的代码, 如果您想在返回对象的地方做某事, 只需添加另一个 属性 即可。

var findResult = findItem(list, data);

if(!findResult.found) {
    var item = findResult.item;
}

function findItem(list, data) {
    var item = list.find("[data-day='"+data.day+"']");
    
    // more code.
    
    // conditional return
    return {item: item, found: false};
}

话说回来,我忘了5年前我在做什么