toBoolean方法类似于toString

时间:2016-05-19 11:27:31

标签: javascript ecmascript-6

有没有办法在JavaScript中object / class定义一个方法,就像toString一样只为布尔值?示例(es6):

class MyClass {
  toBoolean() {
    return this.foo === bar;
  }
}

所以我可以做这样的事情

const myClass = new MyClass();
if (myClass === true) baz();

对我来说听起来很疯狂,但我还会问。

3 个答案:

答案 0 :(得分:4)

除了drewmoore指出它会成为一种蠕虫之外,它根本不可能在JavaScript中完成。

没有像在C ++中重载强制转换操作符那样“挂钩类型转换”的功能。

toString似乎做类似事情的原因仅仅是因为许多functions implicitly try calling toString on your objects, and the JavaScript interpreter also does this when you try to concatenate something to a string using +===没有做那样的事情 - 实际上是{{{卖点'=== 1}}它是没有类型转换

所以没有办法将它神奇地转换为布尔值进行比较,就像这样。人们仍然必须使用if(myClass.toBoolean() === true),然后通过它实际做的命名方法更有意义,例如if(myClass.isValid())或其他什么。

答案 1 :(得分:1)

在充分尊重的情况下,即使有可能,这也是一个糟糕的想法:

const myClass = new MyClass();

myClass.foo = true;
if (myClass === true) baz();  //true
if (myClass) foobaz(); //true, as expected, since myClass === true

myClass.foo = false; 
if (myClass === true) baz(); // false
if (myClass) foobaz(); //true - wtf?

答案 2 :(得分:-1)

这将解决您将任何类型转换为布尔值的问题。

function Fun (){

}
Fun.prototype.toBoolean = function(a) {
  return !!a;
}

var obj = new Fun("str");
obj.toBoolean("str");
obj.toBoolean(1);
obj.toBoolean({});
obj.toBoolean(0);