返回void 0 === i&& (i = 3),0 ===我? (..A ..):( .. B ..)吗?

时间:2017-02-02 10:14:58

标签: javascript if-statement return comma

我来到这段代码,但我不太了解它的作用......

test.update = function(i) 
{ 
return void 0 === i && (i = 3), 0 === i ? (..A..) : (..B..) 
}

(.. A ..)和(..B ..)只是我尚未发布的其他代码行。

假设i的值为0,该函数将返回什么?

“void 0 === i&&(i = 3)”是什么意思?特别(i = 3)。这是否意味着if (void 0 === i)为真且i可以获得3,i将为3?逗号怎么样?我已经检查了这个question,但我仍然没有得到它。

很抱歉这么多问题,但我想要一个完整的答案,这样我就能完全理解发生了什么。

谢谢

4 个答案:

答案 0 :(得分:5)

好的,首先让我们根据operator precedence设置括号:

return (((void 0) === i) && (i = 3)), ((0 === i) ? A : B)

现在进行单一操作

void 0

只返回undefined。我们也可以这样写:

undefined === i

显然会检查i是否未定义。

i = 3

首先看起来像是比较,但事实上它是一个返回3的赋值。到目前为止,该行会查找i是否未定义,如果是,则为其指定值3

现在,以下逗号本身就是一个运算符。它从左到右评估所有表达式并返回最后一个(最右边)。在这种情况下,最后一个表达式是0i的比较。表示此时i0,整个表达式的返回值为true

最后出现了一个条件运算符,它是写if .. else ..的简短方法。

到目前为止,这条线也可以写成:

if (i === undefined) {
  i = 3;
}
if (i === 0) {
  // return ( A )
}
else {
  // return ( B )
}

答案 1 :(得分:2)

只要运行它,看看第一件事就是返回undefined,无论其余的是什么

如果i === 0,则运行A,否则运行B,如果i =="",i = 3 - >跑b



var test= {}
test.update = function(i)  { 
  return void 0 === i && (i = 3), 0 === i ? (console.log(i,"a")) : (console.log(i,"b"))
}

console.log("i is null, res:"+test.update(null));
console.log("no i, res:"+test.update());
console.log("i blank, res:"+test.update(""));
console.log("i=0,res:"+test.update(0));
console.log("i=1,res:"+test.update(1));
console.log("i=2,res:"+test.update(2));
console.log("i=3,res:"+test.update(3));




答案 2 :(得分:1)

其余的很重要,因为void operator会评估表达式并返回undefined

例如,如果表达式是函数调用,例如

return void func();

然后调用该函数,void返回undefined,即使func返回的内容不同。

答案 3 :(得分:1)

我猜它只是执行(..B ..)语句块,无论我传递的值是什么。

  • void运算符计算其操作数,然后返回undefined 不依赖于评估结果;
  • comma运算符只评估一件事,然后另一件事,从左到右评估(如在var i = 0, j = 0;中)
  • 如果0 === i && (i = 3)等于i ,则
  • 3i设置为0
  • 0 === i ? (..A..) : (..B..)执行AB语句块,但如上所述,此时保证i不等于0