【问题标题】:Lost in javascript comparisons迷失在 javascript 比较中
【发布时间】:2014-11-06 10:37:38
【问题描述】:

当我的body 元素没有以下任何类时,我正在编写一个要执行的脚本:

a 或 b 或 c 与 d

我试过了,但它似乎没有成功:

if ((!$('body').hasClass('a')) || (!$('body').hasClass('b')) || ((!($('body').hasClass('c')) && (!$('body').hasClass('d'))))) {

}

更新

这似乎有效:

if (!($('body').hasClass('a') || $('body').hasClass('b') || $('body').hasClass('c') && $('body').hasClass('d'))) {

}

【问题讨论】:

标签: javascript jquery comparison elements


【解决方案1】:

使用

$(function(){
   if ((!$('body').hasClass('a')) || (!$('body').hasClass('b')) || !($('body').hasClass('c') && $('body').hasClass('d'))) {

}

});

【讨论】:

    【解决方案2】:

    您正在寻找一个没有任何类的主体,因此您需要使用&&。发生了什么:

    if(hasclass(a) || hasclass(b)) = if(true OR false) = if(true)

    在 OR 运算符|| 上方意味着一旦达到真正的评估,它将执行您的if-block。

    if(hasclass(a) && hasclass(b)) = if(true AND false) = if(false)

    这里的 AND 运算符 && 意味着一旦你点击了 false 评估,你的块将不会被执行。

    您希望最后一件事发生,因为您希望它没有任何类。了解如何使用这些运算符,因为它们可能会非常令人困惑。只要您记住 AND 运算符将仅在所有语句为真时执行,OR 运算符仅在其中一个语句为真时执行。嵌套运算符的工作方式相同,因此if((a = b && b = c) || (a = c)) 将在 a、b 和 c 相同或 a 和 c 相同时执行,但在 a 和 b 相同或 a 和 c 相同时不执行。

    更多关于表达式和运算符(特别是按位和必读):https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Expressions_and_Operators#Bitwise_operators

    【讨论】:

    • 唉 Í 甚至无法进行 OR 比较:jsfiddle.net/orjan/swhdfdox
    • @OBD 同样,这是因为您希望 找不到类,因此您需要 AND 运算符。或者,如果您至少希望其中一个为真,那么在您的小提琴中,应用 b 类就是这种情况。你的小提琴说 if(NOT hasClass(a) OR NOT hasClass(b)) 被评估为 if(true OR false) 反过来,返回 true 因为一个是 true。使用 AND,它变成 if(NOT hasClass(a) AND NOT hasClass(b)),它被评估为 if(true AND false),这意味着并非所有语句都是正确的,并且该块被跳过。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-15
    • 1970-01-01
    相关资源
    最近更新 更多