对象中是否有属性,可以修改以指定该对象的真值。例如,在其中添加一行:
var myObj{...}
这样我就可以确定是否执行了与以下if语句关联的代码块:
if(myObj){
//dosomething
}
与Python类似的方法将覆盖__bool__
方法。
答案 0 :(得分:4)
JavaScript没有覆盖此类操作的机制。象Felix Kling指出的ECMAScript spec所定义的那样,对象将永远是真实的。我能想到的最接近的功能是toString()
方法。但是没有toBool()
方法可以覆盖。
我对Python不是很熟悉,但是我很确定__bool__
基本上是一种重写将对象强制转换为布尔值的方法。我正在将其与类似__lt__
的类似语言功能进行比较,我还将假设这是Python如何允许您以类似于C ++的方式重写某些运算符。
它没有直接关系,但是您还应该考虑阅读以下问题:Overloading Arithmetic Operators in JavaScript?。
还请考虑以下摘录自2ality's Why all objects are truthy in JavaScript的摘录,重点是我的
:由于历史原因,向布尔值的转换是不同的:对于 ECMAScript 1,已决定不允许对象进行配置 转化。理由如下。布尔运算符||和 &&保留其操作数的值。因此,同一对象 可能不得不被强迫几次。那被认为是 性能问题并导致拒绝。
答案 1 :(得分:1)
在javascript中说if(myObj){...}
时。如果myObj
值不是undefined
,null
,0
,false
,zero length string
值之一,则条件为true。因此,除此值以外的任何值都会在javascript中成为条件true
。
答案 2 :(得分:0)
在JavaScript中不存在,如果您要定义映射,则将其表现为boolean
值就没有意义。
为此,您可以将对象内的键设置为boolean
:
let myObj = { isValid: true }
if (myObj.isValid) {
// do something
}
或为其分配null
,在这种情况下,您可以检查其有效性:
let myObj = null
if (myObj === null) {
// do something
}
此外,更好的做法是根据真实值检查对象,而不是依靠真实值的魔力,因为这可能会导致错误的结果。