2014-02-07 21 views

回答

3

如果​​设置为false或尚未在所有被定义,

prjId = navObj;

否则:

prjId = navObj.itemId;

+0

@ p.s.w.g有更正确的答案。如果navObj.itemId设置为false,则会定义它,但会将prjId设置为navObj。 – Jage

+0

@Jage正确。没有想到这一点。更新了答案以涵盖该角落。 –

2

否。||运算符首先尝试将​​转换为布尔值。

  • 它会被转换为true如果它已经是布尔值,true,比0NaN,非空字符串,或对象不是nullundefined以外的数字。这些被称为“truthy”的值。

  • 它会被转换为false如果它已经是布尔值false0NaN,一个空字符串,nullundefined。这些被称为“falsey”值。

如果​​是 “truthy”,​​被分配到prjId,否则navObj被分配到prjId

进一步阅读

+0

我不是js专家,但那不是三元运算符。对我而言,这意味着如果其中一个条件成立,则prjId是真实的。不是吗? – sam

+0

不,据我了解,pswg的答案甚至没有讨论三元组,但是/ quality /(“truthy”与“falsey”)如果你愿意运算'||'运算符两边的项目。如果左侧的/ quality /为真,则该变量设置为左侧的/ value /。如果不是,则使用右侧。 –

+1

@ user711061不完全。 JS中的'||'运算符是'?:'运算符的简化版本。 'x || y'相当于'x? x:y'。结果是'x'或'y',而不是与它们相关的真值。 –

0

它设置prjId到的itemId对navObj的属性(如果存在)(计算结果为 'truthy'),如果它不存在(或者它评估为'falsy'),prjId被设置为navObj。

3

这等效于以下:

var prjId; 
if(navObj.itemId) 
    prjId = navObj.itemId; 
else 
    prjId = navObj; 
1

它只是意味着如果逻辑或操作者(||)的左操作数是一个truthy值,则返回它否则返回右边的操作数。

以下值始终falsy:

  • 空字符串
  • 未定义
  • NAN(非数字)

所以如果​​未评估为上述任何内容,则将其分配给prjId变量。例如,当我们在函数中有可选参数时,这被广泛使用。这是一种为可选参数指定默认值的方法。但当然,这不是它的唯一用途。