在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;
在这种模式中,问号将条件与值分开,冒号将值分开。 三级分配可以嵌套,以便其中一个值包含另一个三级分配。
这不是一个真正的专家,但||
是一个逻辑运算符和|
是一个按位运算符