是否可以定义任意对象的布尔值?

时间:2013-09-02 00:37:09

标签: javascript

JavaScript中有没有办法预先指定任意对象应该具有的布尔值?

例如,假设我定义

function NIL () {
    this.car = this.cdr = this;
}

var nil = new NIL;

我希望!nil评估为true。这可能在JS吗?

(P.S。:我希望通过类比toBoolean来定义像toString这样的方法可以解决问题,但这不起作用。)

3 个答案:

答案 0 :(得分:2)

转换为布尔值的规则由ECMAscript Language Specification修正,因此您无法做到这一点。您应该使用自己的功能来执行检查。

答案 1 :(得分:1)

你可以通过覆盖“valueOf”来实现它的工作 -

NIL.prototype.valueOf = function () {
    return false;
};

它不会生成!nil == true但会生成nil == false

但由于这种行为不一致,我同意其他答案 - 你应该使用自己的功能。

答案 2 :(得分:0)

似乎您希望使用函数式编程方式来定义自定义类型系统。我不确定这是否是你所需要的,但是这就是你所描述的

function NIL () {
    this.car = this.cdr = this;
    this.isNull = function(){
        return false;
    }
}

var nil = new NIL();
console.log(!nil.isNull()) // true