为什么在if语句中不需要完整的布尔语句?

问题描述

我想知道为什么“如果(ethos [name])”已经足够了?因为我会写if(name = ethos [name])。这是什么意思?谢谢。

constructor(props) {
    super(props);
    this.state = {
        myStateVar: []
    }
}

static getDerivedStateFromProps(props,state) {
    if (props.myStateVar !== state.myStateVar) {
        return {
           myStateVar: props.myStateVar
        }
    }

    toggle() //Need to call the function each time when we get the props update
    return null;
}

toggle() {
    this.setState({
        otherStateVar: []
    })
}

解决方法

JavaScript具有7个伪造的值00nnullundefinedfalseNaN和空字符串{{ 1}}。对于您的情况,您的''返回的if是伪造的值之一,因此undefined足以评估伪造的条件。

if (esthos[name])

或者,正如@Titulum所说的...

console.log(esthos[name]) //-> undefined

以相同的方式,您可以仅使用console.log(!!esthos[name]) //-> false检查数组是否为空:

if(esthos.length)

const esthos = [] console.log(esthos.length) //-> 0 which is a falsy value // or console.log(!!esthos.length) //-> false 就足够了,因为它将返回if (esthos.length),这是JavaScript中的虚假值之一,或者返回与0不同的数字,这是事实。

,

if (esthos[name])检查ethos[name]处保存的值是否为truthy。要将其显式转换为boolean,可以执行if (!!esthos[name])。这样做的原因是javascript使用了truthyfalsy值。

You can read more about it in this article