5

我试图通过阅读它来解决一些混淆的代码,我做得很好,直到遇到这个:

a = a && "*"

现在我对 Javascript 还是很陌生,这些缩短的不常见的 javascript 代码对我来说仍然很陌生,这是我第一次遇到它们。

有人知道这是做什么的吗?我在刚刚返回 * 的 javascript 代码测试器广告中尝试过它,所以我不知道。

另外,如果有人知道我在哪里可以找到这些不常见的代码行的作用,那将非常有帮助。它们都被缩短了,就像这样的东西

a = a || b

(我知道那个是做什么的)

但是,如果这种 javascript 有某种名称或我可以查看的参考资料,那将非常有帮助,我已经在 Google 上搜索了几个小时。

谢谢

4

1 回答 1

8

如果a为真,则分配"*"a

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


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

  • e1如果在布尔上下文中e1计算为 false—计算e2
  • e2如果e1在布尔上下文中计算为真

这并不意味着ore1e2整个表达式(e1) && (e2)需要评估为真或假!

在布尔上下文中,以下值false 根据规范计算:

  • 空值
  • 不明确的
  • ±0
  • 错误的
  • 空字符串

考虑所有1 个其他值true

上述值被简洁地称为“虚假”,其他值被称为“真实”。

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

根据上述对 的短路求值规则&&,表达式求值为aifafalsy,然后依次赋值给a,即语句简化为a = a

但是,如果a,则右侧的表达式的计算结果为*,而后者又被分配给a


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

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

  • e1如果e1是真的
  • e2如果e1是假的

1 例外

于 2012-12-24T10:03:36.217 回答