2012-12-24 129 views
2

我想通过阅读它来解决一些obfusicated代码,而我做得很好,直到碰到这个传来:什么VAR = VAR &&“*”的意思是在Javascript

a=a&&"*" 

现在我对Javascript还是一个相当新颖的东西,这些缩短的不常见的JavaScript代码对我来说还是很陌生的,这是我第一次碰到它们。

有人知道这是什么吗?我试图在它刚刚返回的JavaScript代码测试器广告中*,所以我不知道。另外,如果有人知道我可以在哪里找出这些不常见的代码行,那将会非常有帮助。他们都缩短了,并且是东西各种各样像这样和

a=a||b 

(我知道一个做什么)

但如果是这样的JavaScript或参考我可以看看有些名气在那,这将是非常有帮助的,我一直在Google上搜寻几个小时。

感谢

+0

的重复[什么是“选项=选项|| {}“在Javascript中是什么意思?](http://stackoverflow.com/questions/2851404/what-does-options-options-mean-in-javascript)和[JavaScript。这个表达意味着什么:“var a = b === c && d;”](http://stackoverflow.com/questions/10896453/javascript-what-does-this-expression-mean-var-a-b-c-d)。这就是所谓的短路评估,阅读更多在https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Operators/Logical_Operators#Short-Circuit_Evaluation –

+0

谢谢,帮助很多 – arch

+0

可能被写为( i)'if(a){a =“*”;}(ii)'if(!a){a = b;}' –

回答

2

如果a是truthy,它分配给"*"a

如果a是虚假的,它保持不变。


&&具有短路语义:复合表达式(e1) && (e2) —其中e1e2是任意表达式本身—计算结果为

  • e1如果e1评估为假的布尔上下文— e2不是评估
  • e2如果e1计算结果为true在布尔环境

这并不暗示e1e2和整个表达式(e1) && (e2)需要评估为真或假的!

在布尔上下文中,下面的值计算为falseas per the spec

  • 未定义
  • ± 0
  • 的NaN
  • 空字符串

全部其他值被认为是true

上面的值简洁地称为“falsy”,其他“truthy”。

应用到您的示例a = a && "*"

根据短路评价的上述规则&&,该表达式评估为a如果afalsy,然后将其依次分配给a,即该声明简化为a = a

如果atruthy,然而,在右手侧的表达式评估为*,其被依次分配给a


关于你的第二个问题(e1) || (e2)具有相似的语义:

整个表达式的计算结果为:

  • e1如果e1是truthy
  • e2如果e1是falsy

Exception

+2

“现在我对Javascript还是比较陌生的”。作为新手JavaScript程序员,OP可能需要更好的解释来理解这个概念。 –

+0

@RobW你说得对。我添加了一个解释。 – phant0m

相关问题