javascript – 为什么以下是真的:“狗”===(“猫”\u0026\u0026“狗”)

前端之家收集整理的这篇文章主要介绍了javascript – 为什么以下是真的:“狗”===(“猫”\u0026\u0026“狗”)前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
为什么和&& operator返回最后一个值(如果该语句为true)?
("Dog" == ("Cat" || "Dog")) // false
("Dog" == (false || "Dog")) // true
("Dog" == ("Cat" && "Dog")) // true
("Cat" && true) // true
(false && "Dog") // false
("Cat" && "Dog") // Dog
("Cat" && "Dog" && true) // true
(false && "Dog" && true) // false
("Cat" && "Dog" || false); // Dog

Fiddle

解决方法

想象 && in JavaScript这样(基于 es5 spec的ToBool)
function ToBool(x) {
    if (x !== undefined)
        if (x !== null)
            if (x !== false)
                if (x !== 0)
                    if (x === x) // not is NaN
                        if (x !== '')
                            return true;
    return false;
}

// pseudo-JavaScript
function &&(lhs,rhs) { // lhs && rhs
    if (ToBool(lhs)) return rhs;
    return lhs;
}

现在你可以看到ToBool(“Cat”)是真的如此&&会给rhs哪个是“狗”,然后===正在做“狗”===“狗”,这意味着该行给出了真实.

为了完整,||运算符可以被认为是

// pseudo-JavaScript
function ||(lhs,rhs) { // lhs || rhs
    if (ToBool(lhs)) return lhs;
    return rhs;
}

猜你在找的JavaScript相关文章