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');