我正在尝试通过阅读它来制定出一些有问题的代码,而且我做得很好,直到遇到这个:
a = a && "*"
现在我还是Javascript的新手,这些缩短的不常见的javascript代码对我来说仍然非常陌生,这是我第一次遇到它们。
有人知道这是做什么的吗?我在一个javascript代码测试器广告中尝试过它刚刚返回*,所以我不知道。
此外,如果有人知道我可以在哪里找到这些不常见的代码行,那将非常有帮助。它们都缩短了,有各种各样的东西和
a = a || b
(我知道那个人做了什么)
但如果这种javascript或我可以看到的引用有某种名称,那将非常有用,我已经在Google上搜索了几个小时。
由于
答案 0 :(得分:3)
如果a
真实,则会将"*"
分配给a
。
如果a
是假的,它仍然保持不变。
&&
具有短路语义:复合表达式(e1) && (e2)
- 其中e1
和e2
是任意表达式本身 - 评估为
e1
如果e1
在布尔上下文中评估为false - e2
不 已评估e2
如果e1
在布尔上下文中评估为true 不 暗示e1
或e2
以及整个表达式(e1) && (e2)
需要评估为真或假!< / p>
在布尔上下文中,以下值评估为false
as per the spec:
所有 1 其他值均被视为true
。
上述值简洁地称为“falsy”,其他值则称为“truthy”。
应用于您的示例:a = a && "*"
根据前面提到的&&
短路评估规则,如果a
falsy ,表达式的评估结果为a
,然后依次分配给a
,即语句简化为a = a
。
如果a
truthy ,则右侧的表达式评估为*
,而a
又分配给(e1) || (e2)
。< / p>
至于你的第二个问题:e1
有类似的语义:
整个表达式的计算结果为:
e1
如果e2
是真实的e1
如果{{1}}是假的