【问题标题】:Javascript || operatorJavascript ||操作员
【发布时间】:2010-11-25 14:29:25
【问题描述】:

我正在使用一个大型 JS 库在画布中执行某些绘图操作。查看库代码(以进行适应更改),我遇到了“||”运算符的使用方式肯定不应该评估为布尔值。这是否意味着这是一个不同的运营商,还是我遗漏了一些明显的东西?一个例子如下:

var $time = Date.now || function(){
return +new Date;
};

【问题讨论】:

  • 我猜如果 Date.now 出于某种原因返回 0,那么您将改为将 $time 设置为函数的返回值...?
  • @peirix:你猜错了。 $time 将是一个返回当前日期的函数。如果已定义(非 false)则设置为 Date.now 的别名,否则设置为提供的函数。
  • 啊,这就是我没有将其设置为答案的原因。没有办法对评论投反对票:p 所以必须更多地了解Date.now 变量才能完全了解它是如何工作的?

标签: javascript


【解决方案1】:

已经有一个公认的答案,但我想提一下,OR-Operator 也称为 Default-Operator,因为它不返回布尔值,而是返回左侧或右侧参数。

AND-Operator 也是如此,也称为guard-Operator。

查看crockford's Survey of the JavaScript Programming Language了解更多详情:

&& 运算符通常称为逻辑与。它也可以称为守卫。如果第一个操作数为 false、null、未定义、""(空字符串)或数字 0,则返回第一个操作数。否则,它返回第二个操作数。这提供了一种方便的方式来编写空检查:

var 值 = p && p.name; /* 名称值将 仅当 p 有值时才从 p 中检索,从而避免错误。 */

||运算符通常称为逻辑或。它也可以称为默认值。如果第一个操作数为 false、null、未定义、""(空字符串)或数字 0,则返回第二个操作数。否则,它返回第一个操作数。这提供了一种指定默认值的便捷方式:

值 = v || 10个; /* 使用 v 的值,但如果 v 没有值,使用 10 代替。 */

【讨论】:

    【解决方案2】:

    || operator 如果可以转换为真,则评估为第一个操作数,否则为最后一个操作数。因此,在您的示例中,$time 将是 Date.now,如果它存在或声明的函数不存在。

    【讨论】:

    • 第一个非 False 操作符,即。
    • 不是第一个可以转换为 true 的操作数。使用最后一个表达式,即使它会被转换为 false。
    【解决方案3】:

    我相信代码是说如果DateTime.now 变量不存在,则返回+new Date 的结果。

    【讨论】:

    • 也可以说 DateTime.now is '', 0, false, null
    【解决方案4】:

    这很常见的是javascript。如果 Data.now 计算结果为 true,则将 $time 设置为该值,否则将其设置为函数。

    【讨论】:

    • 函数没有 () 附加到右大括号,因此 $time 设置为函数,而不是输出。
    【解决方案5】:

    在示例中,|| 运算符用于为 $time 赋值。

    如果Date.now 的计算结果为假,则$time 被分配在|| 运算符右侧的值(在本例中为函数)。如果Date.now 的计算结果为真,那么它会缩短并将 Date.now 的值分配给$time

    【讨论】:

      猜你喜欢
      • 2015-07-25
      • 1970-01-01
      • 2013-03-04
      • 1970-01-01
      • 2011-07-11
      • 1970-01-01
      • 2011-05-10
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多