【问题标题】:What do two vertical lines in an object value mean in javascript? [duplicate]javascript中对象值中的两条垂直线是什么意思? [复制]
【发布时间】:2012-05-14 20:03:55
【问题描述】:

可能重复:
What does the || operator do?

也许有人可以提供更好的代码sn-p,但是||在下面是什么意思?:

var time =  $(el).data('start') || new Date();

它是or 运算符吗?如果是,变量可以有两个不同的值有什么意义?

【问题讨论】:

  • 嗨@Esailija,感谢您的参考。
  • 我希望你采取的行动是删除这个问题,因为它与已经提出和回答的问题没有任何不同。
  • 我用谷歌搜索找到与您提到的链接类似的内容,但使用“两个,双竖线 javascript”等关键字找不到任何内容。因为那里没有太多简单的英语,所以我决定问这个问题。

标签: javascript operators


【解决方案1】:

这是一个OR 运算符。你需要了解的是:

  • 在逻辑运算符中使用时,非布尔值将转换为布尔值。转换为false 的值称为“虚假”,转换为true 的值称为“真实”。虚假值包括 0undefinednull 等。在Truthy and Falsy: When All is Not Equal in JavaScript 上查看更多信息。

  • OR 操作符短路:它一直在计算表达式,直到找到 true,然后停止。

因此,var time = $(el).data('start') || new Date(); 的意思是“将time 设置为el 元素的start 数据,或者,如果这是假的,则使用当前时间”。

【讨论】:

  • 嗨@apsillers,感谢您对“虚假”和“真实”的解释。我以前听过这些,但不知道它们是什么意思。
  • 简单直接 - 很好的答案。
【解决方案2】:
exp1 || exp2 

计算 exp1。如果 exp1 为真,则不评估 exp2(称为短路评估)。如果 exp1 返回 false,则计算 exp 2。如果 exp1 OR exp2 为真,则 (exp1||exp2) 评估为真。

但在 Javascript 中,您可以使用运算符设置值。

a = something

if (prop)

a = prop

可以改写为

a = prop || something

【讨论】:

    【解决方案3】:

    意思是“或”。在这种情况下,它将$(el).data('start') 的值分配给变量time,或者,如果该变量不存在或返回false,则它分配从new Date() 返回的值。或者,正如 Malovolio 更清楚地指出的那样,在 cmets 中:

    ...如果 $(el).data('start') 为“假”(即 undefined、null、0、false、空字符串或 NaN),则评估 new Date() 并将其分配给 time

    逻辑运算符的重要方面:

    逻辑运算符通常与布尔(逻辑)值一起使用;当它们存在时,它们返回一个布尔值。但是,&& 和 ||运算符实际上返回指定操作数之一的值,因此如果这些运算符与非布尔值一起使用,它们可能返回非布尔值。

    参考资料:

    【讨论】:

    • 感谢@David,非常有帮助。现在明白了。
    • 更准确地说,如果$(el).data('start') 为“falsy”(即未定义、null、0、false、空字符串或NaN),则评估new Date() 并将其分配给time。奇怪的是,空列表和空对象不被认为是虚假的。
    【解决方案4】:

    运算符的方式||被评估的是如果第一部分是真实的,它返回它。如果第一部分是假的,则返回第二部分。 因此,上述表达式等价于:

    if ($(el).data('start')) {
      time = $(el).data('start');
    } else {
      time = new Date();
    }
    

    【讨论】:

      【解决方案5】:

      意思是logical sumvar time = $(el).data('start') || new Date(); 如果$(el).data('start') 将具有undefinedfalse 值,则time 将具有来自new Date 函数的值。

      【讨论】:

      • 感谢@Denis。 logical sumor 有何不同?
      • 对于downvoters 写错了什么?
      • 为什么这个答案被否决了?
      • 怎么了?是的,它不是完整列表。最好说可转换为假。如果 $(el).data('start') 返回 undefined 会执行吗?还是假的?
      • 但这并没有错。您投反对票只是为了好玩。
      猜你喜欢
      • 2019-11-12
      • 2020-01-22
      • 2015-07-15
      • 2018-07-17
      • 2011-04-16
      • 2015-09-06
      • 2016-11-19
      • 2014-07-28
      相关资源
      最近更新 更多