return void 0 === i && (i = 3), 0 === i 是什么意思? ( ..A.. ) : ( ..B.. ) 呢?
What does return void 0 === i && (i = 3), 0 === i ? ( ..A.. ) : ( ..B.. ) do?
我来到这段代码,但我不太明白它的作用..
test.update = function(i)
{
return void 0 === i && (i = 3), 0 === i ? (..A..) : (..B..)
}
(..A..) 和 (..B..) 只是我没有发布的其他代码行。
假设如果 i
的值为 0,函数将 return 是什么?
"void 0 === i && (i = 3)" 是做什么的?特别是(i = 3)
。那是不是说if (void 0 === i)
为真,i
可以得到3,i
就会得到3?那逗号呢?我已经检查过 question 但我还是不明白。
抱歉问了这么多问题,但我想得到一个完整的答案,这样我才能完全理解发生了什么。
谢谢
剩下的很重要,因为 void
operator 计算表达式和 returns undefined
.
例如,如果表达式是函数调用,例如
return void func();
然后函数被调用并且 void
returns undefined
,即使 func
返回不同的东西。
就 运行 它,无论其余的做什么,第一件事都会返回 undefined
if i ===0, 运行 A, else 运行 B and if 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));
我猜它只是执行 (..B..) 语句块,无论我传递什么值。
void
运算符计算其操作数,然后 returns undefined
不依赖于评估结果;
comma
运算符只评估一件事,然后评估另一件事,从左到右(如 var i = 0, j = 0;
)
如果 i
等于 0
,0 === i && (i = 3)
将 i
设置为 3
0 === i ? (..A..) : (..B..)
执行A
或B
语句块,但如前所述,此时保证i
不等于0
.
好的,首先我们按照operator precedence设置括号:
return (((void 0) === i) && (i = 3)), ((0 === i) ? A : B)
现在进入单机操作
void 0
只是 returns undefined
。我们也可以这样写:
undefined === i
这显然会检查 i
是否未定义。
i = 3
看似先比较,其实是returns 3
的赋值。到目前为止,该行查找 i
是否未定义,如果是,则为其分配值 3
.
现在下面的逗号本身就是一个运算符。它从左到右评估所有表达式,return 是最后一个 (right-most)。在这种情况下,最后一个表达式是 0
和 i
的比较。表示如果此时 i
为 0
,则整个表达式的 return 值为 true
.
最后有一个条件运算符,它是 if .. else ..
.
的一种简短写法
到目前为止,该行也可以写成:
if (i === undefined) {
i = 3;
}
if (i === 0) {
// return ( A )
}
else {
// return ( B )
}
我来到这段代码,但我不太明白它的作用..
test.update = function(i)
{
return void 0 === i && (i = 3), 0 === i ? (..A..) : (..B..)
}
(..A..) 和 (..B..) 只是我没有发布的其他代码行。
假设如果 i
的值为 0,函数将 return 是什么?
"void 0 === i && (i = 3)" 是做什么的?特别是(i = 3)
。那是不是说if (void 0 === i)
为真,i
可以得到3,i
就会得到3?那逗号呢?我已经检查过 question 但我还是不明白。
抱歉问了这么多问题,但我想得到一个完整的答案,这样我才能完全理解发生了什么。
谢谢
剩下的很重要,因为 void
operator 计算表达式和 returns undefined
.
例如,如果表达式是函数调用,例如
return void func();
然后函数被调用并且 void
returns undefined
,即使 func
返回不同的东西。
就 运行 它,无论其余的做什么,第一件事都会返回 undefined
if i ===0, 运行 A, else 运行 B and if 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));
我猜它只是执行 (..B..) 语句块,无论我传递什么值。
void
运算符计算其操作数,然后 returnsundefined
不依赖于评估结果;comma
运算符只评估一件事,然后评估另一件事,从左到右(如var i = 0, j = 0;
)
如果 0 === i && (i = 3)
将i
设置为3
0 === i ? (..A..) : (..B..)
执行A
或B
语句块,但如前所述,此时保证i
不等于0
.
i
等于 0
,好的,首先我们按照operator precedence设置括号:
return (((void 0) === i) && (i = 3)), ((0 === i) ? A : B)
现在进入单机操作
void 0
只是 returns undefined
。我们也可以这样写:
undefined === i
这显然会检查 i
是否未定义。
i = 3
看似先比较,其实是returns 3
的赋值。到目前为止,该行查找 i
是否未定义,如果是,则为其分配值 3
.
现在下面的逗号本身就是一个运算符。它从左到右评估所有表达式,return 是最后一个 (right-most)。在这种情况下,最后一个表达式是 0
和 i
的比较。表示如果此时 i
为 0
,则整个表达式的 return 值为 true
.
最后有一个条件运算符,它是 if .. else ..
.
到目前为止,该行也可以写成:
if (i === undefined) {
i = 3;
}
if (i === 0) {
// return ( A )
}
else {
// return ( B )
}