在Javascript中的空合并?

在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... 

我也看到:(页面上的第二个代码片段)

 var headers; var myHeader = headers | {'Content-type':'text/plain'}; 

两者有什么区别? 什么是这种模式称为…默认参数?

|| 是合乎逻辑的还是 。 它返回第一个真值操作数*(最后一个值)。 所以

 var myHeader = headers || {'Content-type':'text/plain'}; 

如果真的是真的,那么返回“headers”(如果它是null或者undefined,那么这个值就会变成“false”)。 如果它是错误的,它返回第二个操作数。 我不相信这在JavaScript中有一个非常具体的名称,只是像“默认参数值”一般。

| 是一个按位还是 。 这是一个math运算,做了一些完全不同的事情。 这个运算符在这里甚至没有什么意义(通常它只会产生0 )。 无论你在哪里看到,这肯定是一个错字,他们的意思是使用逻辑或。

所以去那个第一个方法( a = b || c )。

*“逻辑或”也被称为“逻辑分离”或“包容性分离”。 像所有的编程语言一样,Javascript使用短路评估来评估逻辑语句。 用逻辑或expression式,它评估每个操作数的真实性,并停止在第一个真正的(并返回该值)。 如果没有真正的操作数,它仍然要经过所有的操作数,所以它返回最后一个操作数,它仍然是最后一个操作数。 逻辑和(&&)同样通过停止第一个伪操作数而被短路。

我不熟悉第二种模式。 我知道的两种模式:

1)你的第一个模式是一个基本的逻辑或操作符。 如果第一个值是falsy,则分配第二个值。

2)第二种模式被称为三元赋值,它在逻辑上与基本的if条件类似,但语法略有不同。

 var test = (typeof myTest === "string") ? firstValue : secondValue; 

在这种模式中,问号将条件与值分开,冒号将值分开。 三级分配可以嵌套,以便其中一个值包含另一个三级分配。

这不是一个真正的专家,但|| 是一个逻辑运算符和| 是一个按位运算符