OO Javascript是否有“tobool”或“len”等同物?
OO JS是否有将实例对象强制转换为布尔值的机制?我希望能够在条件中直接使用自定义实例对象,并按照OO Javascript是否有“tobool”或“len”等同物?,javascript,oop,casting,boolean,instance,Javascript,Oop,Casting,Boolean,Instance,OO JS是否有将实例对象强制转换为布尔值的机制?我希望能够在条件中直接使用自定义实例对象,并按照的思路进行断言!!(新的Foo(0))==false,!!(新的Foo(1))==true Python具有\uuuuuuuuuuuuuuuuuuu非零和\uuuuuuuuuuuuuu(请参阅) Ruby有到\u bool JS如何对字符串文本“和零0执行此操作?否,JS不提供强制转换为布尔值的陷阱方法。值的真实性由语言规则决定,不能更改 你应该给你的实例一个被显式调用的方法,比如isValid
的思路进行断言!!(新的Foo(0))==false
,!!(新的Foo(1))==true
- Python具有
和\uuuuuuuuuuuuuuuuuuu非零
(请参阅)\uuuuuuuuuuuuuu
- Ruby有
到\u bool
JS如何对字符串文本
“
和零0
执行此操作?否,JS不提供强制转换为布尔值的陷阱方法。值的真实性由语言规则决定,不能更改
你应该给你的实例一个被显式调用的方法,比如
isValid()
,isTruthy()
,isEmpty()
,或者你的对象所代表的任何概念。!!(新的Foo(1))===true
没关系。当您将一个对象与另一种类型进行比较时,Javascript将对象转换为字符串()。@MarcosPérezGude它具体转换为字符串的是什么?@MarcosPérezGude将!!(new Foo(1))
始终返回true
?@MarcosPérezGude:它不使用==
进行任何转换。使用==
时,它将取决于其他操作数。如果是如您所示的布尔值,它会将布尔值转换为一个数字,然后对象将执行toPrimitive
操作,该操作涉及.toString()
。在您的示例中,您直接转换了对象,因此这是一个简单的true===true
操作。@MarcosPérezGude:差不多。您需要删除因为它优先于=
,导致true==true
。没有
,将调用.toString()
,因此OP实际上可以提供一个自定义的.toString()
函数,在这种情况下,该函数可能会给出所需的结果。这似乎有一个内部机制()。可惜它不是一个公开的API@Nathanalen:它被公开为布尔函数或使用代码>(双重否定运算符)。