JavaScript 中有没有办法预先指定任意对象应具有的布尔值?
例如,假设我定义
function NIL () {
this.car = this.cdr = this;
}
var nil = new NIL;
我想!nil
评价一下true
。这在JS中可能吗?
(PS:我希望定义一个类似的方法toBoolean
,通过类比toString
,可以解决问题,但这不起作用。)
JavaScript 中有没有办法预先指定任意对象应具有的布尔值?
例如,假设我定义
function NIL () {
this.car = this.cdr = this;
}
var nil = new NIL;
我想!nil
评价一下true
。这在JS中可能吗?
(PS:我希望定义一个类似的方法toBoolean
,通过类比toString
,可以解决问题,但这不起作用。)
转换为布尔值的规则由ECMAscript 语言规范固定,因此您不能这样做。您应该使用自己的函数来执行检查。
你可以让它工作——有点,通过覆盖“valueOf”:
NIL.prototype.valueOf = function () {
return false;
};
它不会做!nil == true
,但它会做nil == false
。
但由于这种行为不一致,我同意其他答案 - 您应该使用自己的功能。
看来您想使用函数式编程方式来定义自定义类型系统。我不确定这是否是您所需要的,但是您这样做了您所描述的
function NIL () {
this.car = this.cdr = this;
this.isNull = function(){
return false;
}
}
var nil = new NIL();
console.log(!nil.isNull()) // true