var connections = {key: 1234}
var thisconnection = connections["key"] || {status:"new"};`
在上面的代码中,变量thisconnection受逻辑运算符'||'
当我在控制台中输入以下代码时,thisconnection
在任何情况下都会获取connections["key"]
的值。
答案 0 :(得分:2)
为什么不试试?
var connections = {key: 1234};
var thisconnection = connections["key"] || {status:"new"};
console.log(thisconnection); // returns 1234
说明:
如果connections.key
返回0,NaN,false,undefined,"" (空字符串),或任何计算为false的值,它将继续评估下一个||
表达式。
但是,如果表达式求值为truthy值,则整个语句将以评估结束。这称为short-circuiting:
当逻辑表达式从左到右进行评估时,它们会被测试可能的短路"评估使用以下规则:
- false&& (任何)短路评估为假。
- true || (任何)短路评估为真。
由于1234
是一个真值,评估将停止并分配值1234.
答案 1 :(得分:1)
如果connections["key"]
为零,那么{status:"new"}
将是变量的值
答案 2 :(得分:1)
在以下声明中
var thisconnection = connections["key"] || {status:"new"};
您说connection["key"]
是否存在将connection["key"]
分配给thisconnection
,其他明智地将{status:new}
分配给thisconnection
。
与以下代码相同
if(connections["key"]){
thisconnection = connection["key"]
}
else{
thisconnection = {status:new}
}
答案 3 :(得分:1)
首先,它会检查connections["key"]
,
如果它不为null,则为thisconnection
的值,其值为connections["key"]
。否则thisconnection
将包含{status:"new"}
的值。
答案 4 :(得分:1)
在JavaScript中,||
和&&
运算符在变量赋值中使用时具有特定的行为。如果您有这样的事情:
var theResult = a || b || c || d;
然后,变量theResult
不会像我们在其他语言中所期望的那样成为布尔值。
如果a
是真实的,那么theResult = a
。否则,如果b
是真实的,那么theResult = b
。依此类推......如果所有变量都是假的,那么theResult = d
因为d
是条件中的最后一个语句。
规则如下:
theResult
的值将是a || b || c || d
中打破链的变量的值
因此,由于我们只有OR条件,因此解析为true
的第一个值将破坏链。我的意思是,如果a === true
,则不需要评估其余条件,因为true || false || whatEver || weDontCare
始终为true
。如果变量都没有打破链,那么最后一个变量将分配给theResult
。