2

类似的东西:

  var MyCustomBoolean = function(b){
    if (b === 'FALSE'){
      this.b = false;
    }else if(b === 'TRUE'){
      this.b = true;
    }

    this.valueOf = function(){
      return this.b;
    }
  }

这样下面的内容就会产生一个带有“in your face”文本的警报

if (new MyCustomBoolean('TRUE')){
  alert("In your face!");
}

if (new MyCustomBoolean('FALSE')){
  alert("not so much.");
}

现在我可以通过显式调用 valueOf 函数来解决这个问题。通过“myBObj == true”检查等价性。

那么是否有可能拥有一个继承自 Boolean.prototype 的自定义布尔对象,这样我就可以编写上述 if 块?

4

1 回答 1

1

不,不可能有任何评估为 的对象false。继承自 Boolean.prototype不会改变ToBoolean行为。相反,让你的所有词法分析器对象实现一种“评估”方法,以便以下工作:

var bool = new LexerBoolean("FALSE")
if (bool.getSemanticValue()) {…}
于 2013-02-18T10:03:20.190 回答