检查覆盖值的真实性不工作
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年前我在做什么
我想在我的代码中创建一个类似的结构。
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年前我在做什么