设置JavaScript自定义对象的真实值

时间:2019-02-06 18:16:27

标签: javascript

对象中是否有属性,可以修改以指定该对象的真值。例如,在其中添加一行:

var myObj{...}

这样我就可以确定是否执行了与以下if语句关联的代码块:

if(myObj){
    //dosomething
}

与Python类似的方法将覆盖__bool__方法。

3 个答案:

答案 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值不是undefinednull0falsezero 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
}

此外,更好的做法是根据真实值检查对象,而不是依靠真实值的魔力,因为这可能会导致错误的结果。