这里是代码片段:这个JavaScript代码片断是什么意思?
var prjId = navObj.itemId || navObj
这是否意味着prjId要么等于navObj.itemId或navObj?那么它是什么意思,一个变量等于导航对象?
预先感谢您的答案!
这里是代码片段:这个JavaScript代码片断是什么意思?
var prjId = navObj.itemId || navObj
这是否意味着prjId要么等于navObj.itemId或navObj?那么它是什么意思,一个变量等于导航对象?
预先感谢您的答案!
如果设置为false
或尚未在所有被定义,
prjId = navObj;
否则:
prjId = navObj.itemId;
。
否。||
运算符首先尝试将转换为布尔值。
它会被转换为true
如果它已经是布尔值,true
,比0
或NaN
,非空字符串,或对象不是null
或undefined
以外的数字。这些被称为“truthy”的值。
它会被转换为false
如果它已经是布尔值false
,0
,NaN
,一个空字符串,null
或undefined
。这些被称为“falsey”值。
如果是 “truthy”,被分配到prjId
,否则navObj
被分配到prjId
。
进一步阅读
我不是js专家,但那不是三元运算符。对我而言,这意味着如果其中一个条件成立,则prjId是真实的。不是吗? – sam
不,据我了解,pswg的答案甚至没有讨论三元组,但是/ quality /(“truthy”与“falsey”)如果你愿意运算'||'运算符两边的项目。如果左侧的/ quality /为真,则该变量设置为左侧的/ value /。如果不是,则使用右侧。 –
@ user711061不完全。 JS中的'||'运算符是'?:'运算符的简化版本。 'x || y'相当于'x? x:y'。结果是'x'或'y',而不是与它们相关的真值。 –
它设置prjId到的itemId对navObj的属性(如果存在)(计算结果为 'truthy'),如果它不存在(或者它评估为'falsy'),prjId被设置为navObj。
这等效于以下:
var prjId;
if(navObj.itemId)
prjId = navObj.itemId;
else
prjId = navObj;
它只是意味着如果逻辑或操作者(||)的左操作数是一个truthy值,则返回它否则返回右边的操作数。
以下值始终falsy:
所以如果未评估为上述任何内容,则将其分配给prjId
变量。例如,当我们在函数中有可选参数时,这被广泛使用。这是一种为可选参数指定默认值的方法。但当然,这不是它的唯一用途。
@ p.s.w.g有更正确的答案。如果navObj.itemId设置为false,则会定义它,但会将prjId设置为navObj。 – Jage
@Jage正确。没有想到这一点。更新了答案以涵盖该角落。 –