【发布时间】:2016-05-05 16:08:00
【问题描述】:
OO JS 是否有将实例对象转换为布尔值的机制?我希望能够直接在条件中使用自定义实例对象,并按照!!(new Foo(0)) === false、!!(new Foo(1)) === true 的方式进行断言。
Python 有
__nonzero__和__len__(见here)Ruby 有
to_bool。
JS 如何对字符串字面量"" 和零0 执行此操作?
【问题讨论】:
-
!!(new Foo(1)) === true没关系。当您将对象与另一种类型进行比较时,Javascript 会转换对象toString()。 -
@MarcosPérezGude 具体将什么转换为字符串?
-
@MarcosPérezGude
!!(new Foo(1))总是返回true? -
@MarcosPérezGude:它不会与
===进行任何转换。对于==,它将取决于另一个操作数。如果您显示的是布尔值,它会将布尔值转换为数字,然后对象将通过toPrimitive操作,其中涉及.toString()。在您的示例中,您直接转换了对象,因此这是一个简单的true === true操作。 -
@MarcosPérezGude:差不多。您需要删除
!!,因为它优先于==,从而导致true == true。如果没有!!,.toString()将被调用,因此 OP 实际上可以提供一个自定义的.toString()函数,该函数可能会在这种情况下给出所需的结果。
标签: javascript oop casting boolean instance