Javascript 由OR运算符分隔的语句的求值顺序

Javascript 由OR运算符分隔的语句的求值顺序,javascript,boolean-logic,or-operator,Javascript,Boolean Logic,Or Operator,这是我的if声明: 还有小提琴: 现在,我的控制台日志清楚地显示了id”给出了什么?如果我将|从If中取下,或者将文本字段留空,它就可以正常工作。在检查它之前,您正在记录它。 改变 到 您需要and(不是OR),因为否则您的数据字符串将包含空格(当一个为空,另一个为空时)。修复了它 不知道为什么每个人都在建议我使用或时使用和。如果我只想在两者都为空时失败,我会使用&&。我知道区别 我希望.ajax()无论#ament的值如何,都不会运行。我不明白为什么它不起作用。相反,由于我不在乎《舒适》中的内

这是我的
if
声明:

还有小提琴:


现在,我的控制台日志清楚地显示了id
给出了什么?如果我将
|
If
中取下,或者将文本字段留空,它就可以正常工作。

在检查它之前,您正在记录它。 改变

您需要and(不是OR),因为否则您的数据字符串将包含空格(当一个为空,另一个为空时)。

修复了它

不知道为什么每个人都在建议我使用
时使用
。如果我只想在两者都为空时失败,我会使用
&&
。我知道区别

我希望
.ajax()
无论
#ament
的值如何,都不会运行。我不明白为什么它不起作用。相反,由于我不在乎《舒适》中的内容,我决定为什么要检查它?我拿了那张支票,一切正常

if (id != '')
    {
        var dataString ={id:id,amenity:amenity};
        console.log(dataString);    
        $.ajax({        
            type: "POST",
            url: "classes/add_amenities.php",
            data: dataString,
            cache: false,
            async:false,
            success: function(html)
            {
                //$('.editunitamenities').html(html);
                $('.editunitamenities').load('classes/display_amenities.php?id='+id);
            }
        });
        //$('.editunitamenities').load('.editunitamenities');
    }else { alert('You must SAVE your changes to the new unit before adding amenities.'); }

只要至少有一个条件为
true
,逻辑OR运算符就会返回true。这意味着,在您的情况下,如果其中一个值不为空,则将始终执行
if
语句。这意味着即使
id
为空,如果
ament
不为空,语句也会通过——这就是或完成的

事实上,由于逻辑OR运算符短路,它甚至不检查
id
的值:在表达式
(舒适性!=''|id!='')
中,计算左侧。如果计算结果为
true
,则整个语句变为
true
,并计算
If
块;右侧被忽略

如果
舒适性!=''计算结果为false,OR运算符只返回
id!=''。由于左侧为false,因此仅右侧将确定整个表达式的值,因此返回的就是这个值。如果为
true
,则至少有一个条件为
true
,并对
If
块进行评估。如果是
false
,则两者都是,并且跳过
If

如果您真的希望代码只针对非空ID进行评估,那么解决方案是只检查ID:
if(ID!='')
。事实上,在真实的JavaScript世界中,您可以简单地说
if(id)
,这就是您所需要的

if (id) {
    // do ajax post
}
else {
    // log errors
}

从你的问题我真的不知道你在找什么。听起来你对条件测试的评估很失望。逻辑“or”运算符表示“如果该语句的任何一项为真,则该语句为真”。因此,您要检查“舒适度”、“id”或两者是否“松散地等于”空字符串。这意味着,如果指定了礼仪、id或两者,那么“if”语句块中的任何内容都将被执行。下面有一个小的示例代码向您展示,但是,同样,很难说出您想要的是什么

function aTest (amenity, id) {
    aTest.count += 1;
    console.log('### Test # ', aTest.count);
    console.log('amenity = ', amenity);
    console.log('id = ', id);
    if (amenity != '' || id != '') {
        console.log('amenity, id, or both: ' +
                    'is not kinda equal to an empty string');
    }
}
aTest.count = 0;

aTest('', '');
aTest('', 'x');
aTest('x', '');
aTest('x', 'x');

我不知道你在说什么。
$('.editblock').find('#id').val()的值是否为空字符串?通常,使用诸如这样的服务是很有用的,这样其他人也能看到你的问题。@Qantas 94 Heavy补充道@bfavaretto否,因为
#舒适性
可能不是空的。所以您想输入if,除非两个值都是空的?我修正了它,您可以阅读我的答案以更好地理解我想要的是,在
舒适性!=“||foo
,如果设置了舒适性,
foo
的值将被完全忽略。”我希望.ajax()不会运行,无论您的小提琴中的#舒适性”的值是多少,“Id”字段为空,并且无法设置它。所以
if (id != '')
    {
        var dataString ={id:id,amenity:amenity};
        console.log(dataString);    
        $.ajax({        
            type: "POST",
            url: "classes/add_amenities.php",
            data: dataString,
            cache: false,
            async:false,
            success: function(html)
            {
                //$('.editunitamenities').html(html);
                $('.editunitamenities').load('classes/display_amenities.php?id='+id);
            }
        });
        //$('.editunitamenities').load('.editunitamenities');
    }else { alert('You must SAVE your changes to the new unit before adding amenities.'); }
if (id) {
    // do ajax post
}
else {
    // log errors
}
function aTest (amenity, id) {
    aTest.count += 1;
    console.log('### Test # ', aTest.count);
    console.log('amenity = ', amenity);
    console.log('id = ', id);
    if (amenity != '' || id != '') {
        console.log('amenity, id, or both: ' +
                    'is not kinda equal to an empty string');
    }
}
aTest.count = 0;

aTest('', '');
aTest('', 'x');
aTest('x', '');
aTest('x', 'x');