什么返回 void 0 === i && (i = 3), 0 === i ?( ..一个。。) : ( ..B..) 做?



我来到了这段代码,但我不太明白它的作用。

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?那么逗号呢?我已经检查了这个问题,但我仍然不明白。

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

谢谢

好的,首先让我们根据运算符优先级设置括号:

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

现在到单个操作

void 0

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

undefined === i

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

i = 3

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

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

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

到目前为止,该行也可以写成:

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

只需运行它,看看第一件事是返回未定义,无论其余部分做什么

如果 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));

其余的都很重要,因为void运算符计算表达式并返回undefined

例如

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

return void func();

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

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

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

相关内容

  • 没有找到相关文章

最新更新