2017-02-02 79 views
2

我来到这个代码,但我不很了解它做什么..什么是返回void 0 === i &&(i = 3),0 ===我? (..A ..):(..B ..)呢?

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

(..A ..)和(..B ..)的代码,我的避风港只是其他线路张贴。

比方说,如果i将有一个0值,该函数将返回什么?

什么是“void 0 ===我& &(i = 3)”?特别是(i = 3)。这是否意味着if (void 0 === i)为真并且i可以得到3,i会是3?那么逗号呢?我已经检查了这个question,但我仍然不明白。

对不起,有很多问题,但我想有一个完整的答案,所以我可以完全理解发生了什么。

谢谢

+1

我猜它只是执行'(..B ..)''什么价值i'传递语句块。 – pttsky

+0

'void 0 ===我似乎检查'i'是否是'undefined'。 'i'没有定义时,'i = 3'将'i'设置为数字3。 – evolutionxbox

+0

'0 === i''检查'i'是否为'0',然后执行'(..A ..)'或'(..B ..)'。该返回使用[逗号](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Comma_Operator)和[三元操作](https://developer.mozilla.org/ EN /文档/网络/的JavaScript /参考/运营/ Conditional_Operator)。 – evolutionxbox

回答

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

休息是很重要的,因为void operator计算表达式并返回undefined

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

return void func(); 

然后函数被调用和返回voidundefined,即使func将返回不同的东西。

2

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

如果我=== 0,运行A,否则经营的,如果我==“”,I = 3 - >经营的

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

1

我猜它只是执行不管我值传递报表(..B ..)块。

  • void运算符计算其操作数,然后返回undefined 不依赖评价的结果的;
  • comma运营商只计算一个东西,然后又从左到右(如在var i = 0, j = 0;
  • 0 === i && (i = 3)i3如果i等于0
  • 0 === i ? (..A..) : (..B..)执行语句AB块,但正如上面所说的,此时保证i不等于0
相关问题