2

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

例如,假设我定义

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

var nil = new NIL;

我想!nil评价一下true。这在JS中可能吗?

(PS:我希望定义一个类似的方法toBoolean,通过类比toString,可以解决问题,但这不起作用。)

4

3 回答 3

2

转换为布尔值的规则由ECMAscript 语言规范固定,因此您不能这样做。您应该使用自己的函数来执行检查。

于 2013-09-02T00:59:38.790 回答
1

你可以让它工作——有点,通过覆盖“valueOf”:

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

它不会做!nil == true,但它会做nil == false

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

于 2013-09-02T02:10:56.500 回答
0

看来您想使用函数式编程方式来定义自定义类型系统。我不确定这是否是您所需要的,但是您这样做了您所描述的

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

var nil = new NIL();
console.log(!nil.isNull()) // true
于 2013-09-02T00:56:26.650 回答