在C#中,您可以执行以下操作:
string y = null;
string x = y ?? "sup stallion"; //x = "sup stallion" since y is null.
??
运算符是空合并运算符。
在Javascript中,我见过类似的东西:
var headers;
var myHeader = headers || {'Content-type':'text/plain'}; //myHeaders = {'Content...
I've also seen: (The 2nd code snippet on the page)
var headers;
var myHeader = headers | {'Content-type':'text/plain'};
这两者有区别吗?这个模式叫做什么...默认参数?
答案 0 :(得分:36)
||
是logical or。它返回第一个真值操作数*(评估的最后一个值)。所以
var myHeader = headers || {'Content-type':'text/plain'};
如果它是真实的,则返回“headers”(如果它为null或未定义,则该值被核心化为“false”)。如果它是假的,它返回第二个操作数。我不相信这在javascript中有一个非常具体的名称,只是像“默认参数值”这样的通用名称。
|
是bitwise or。这是一个数学运算,做了一些完全不同的事情。那个运算符在这里甚至没有意义(结果通常会产生0
)。无论你在哪里看到,它肯定是一个错字,他们的意思是使用逻辑或。
所以请使用第一种方法(a = b || c
)。
*“逻辑或”也称为“逻辑分离”或“包含分离”。与所有编程语言一样,Javascript使用short-circuit evaluation评估逻辑语句。使用逻辑或表达式,它会评估每个操作数的真实性,并在第一个真实的操作数上停止(并返回该值)。如果没有真正的操作数,它仍然必须遍历所有操作数,因此它返回最后一个操作数,仍然是它评估的最后一个操作数。逻辑和(&&)同样通过停在第一个虚假操作数上而短路。
答案 1 :(得分:3)
我不熟悉第二种模式。我知道的两种模式:
1)您的第一个模式是基本逻辑或运算符。如果第一个值是假,则分配第二个值。
2)第二种模式称为三元赋值,逻辑上与基本if条件相似,但语法略有不同。
var test = (typeof myTest === "string") ? firstValue : secondValue;
在此模式中,问号将条件与值分开,冒号分隔值。可以嵌套高级分配,以便其中一个值包含另一个高级分配。
答案 2 :(得分:2)
这不是真正的专家,但||
是Logical Operator而|
是Bitwise Operator
答案 3 :(得分:1)
ES2020将无效的合并运算符(??)引入到javascript中。
const foo = null ?? 'default string';
console.log(foo);
// expected output: "default string"
答案 4 :(得分:1)
空的合并运算符
如Mozilla文档所述:
无效的合并运算符(??)是一个逻辑运算符, 当其左侧操作数为时,返回其右侧操作数 null或undefined,否则返回其左侧操作数。
与逻辑OR(||)运算符相反,返回左操作数 如果它是不为null或未定义的虚假值。换一种说法, 如果使用||为另一个变量foo提供一些默认值, 如果您认为某些虚假行为,可能会遇到意想不到的行为 可用的值(例如“''或0)。有关更多示例,请参见下面。
def change_friends(request, operation, pk):
new_friend = CustomUser.objects.get(pk=pk)
if operation == 'add':
# here you should use request.user instead of request.CustomUser
Friends.make_friend(request.user, new_friend)
elif operation == 'remove':
# here also
Friends.lose_friend(request.user, new_friend)
return redirect('posts:all')
有关更多信息,请阅读kent c dods过去和现在提供的有关// Assigning a default value to a variable (old way but in some cases we need this)
let count = 0;
let text = "";
let qty = count || 42;
let message = text || "hi!";
console.log(qty); // 42 and not 0
console.log(message); // "hi!" and not ""
// Assign default value when we want to skip undefined/null only
// in most cases we need this, because (0,"",false) are valid values to our programs
const foo = null ?? 'default string';
console.log(foo);
// expected output: "default string"
const baz = 0 ?? 42;
console.log(baz);
// expected output: 0
的示例:
https://kentcdodds.com/blog/javascript-to-know-for-react#nullish-coalescing-operator