我正在调试一些JavaScript,无法解释这个||做什么:
function (title, msg) {
var title = title || 'Error';
var msg = msg || 'Error on Request';
}
为什么这个家伙使用var title = title || 'ERROR'?我有时也看到它没有var声明。
我正在调试一些JavaScript,无法解释这个||做什么:
function (title, msg) {
var title = title || 'Error';
var msg = msg || 'Error on Request';
}
为什么这个家伙使用var title = title || 'ERROR'?我有时也看到它没有var声明。
当前回答
||为布尔或运算符。在JavaScript中,undefined, null, 0, false被认为是假值。
它只是意味着
true || true = true
false || true = true
true || false = true
false || false = false
undefined || "value" = "value"
"value" || undefined = "value"
null || "value" = "value"
"value" || null = "value"
0 || "value" = "value"
"value" || 0 = "value"
false || "value" = "value"
"value" || false = "value"
其他回答
如果没有设置title,则使用'ERROR'作为默认值。
更通用的:
var foobar = foo || default;
读取:将foobar设置为foo或默认值。 你甚至可以把这个串起来很多次:
var foobar = foo || bar || something || 42;
这意味着title参数是可选的。因此,如果你不带参数调用该方法,它将使用默认值“Error”。
它是写作的简写:
if (!title) {
title = "Error";
}
这种使用布尔表达式的简写技巧在Perl中也很常见。用这样的表达式:
a OR b
如果a或b为真,它的值为真。所以如果a为真,你根本不需要检查b。这被称为短路布尔计算,因此:
var title = title || "Error";
基本上检查title的结果是否为false。如果是,则返回"Error",否则返回title。
||为布尔或运算符。在JavaScript中,undefined, null, 0, false被认为是假值。
它只是意味着
true || true = true
false || true = true
true || false = true
false || false = false
undefined || "value" = "value"
"value" || undefined = "value"
null || "value" = "value"
"value" || null = "value"
0 || "value" = "value"
"value" || 0 = "value"
false || "value" = "value"
"value" || false = "value"
为了对我前面所说的一切进行解释,我应该给你们一些例子来理解逻辑概念。
var name = false || "Mohsen"; # name equals to Mohsen
var family = true || "Alizadeh" # family equals to true
这意味着如果左边的语句被赋值为true,那么它将被结束,左边的语句将被返回并赋值给变量。在其他情况下,右侧将返回并分配。
和运算符有相反的结构,如下所示。
var name = false && "Mohsen" # name equals to false
var family = true && "Alizadeh" # family equals to Alizadeh
双管操作员
这个例子可能有用:
var section = document.getElementById('special');
if(!section){
section = document.getElementById('main');
}
它也可以是:
var section = document.getElementById('special') || document.getElementById('main');