【问题标题】:Coding Explanation: variable set with bitwise OR character in JavaScript编码说明:JavaScript 中按位或字符设置的变量
【发布时间】:2016-12-30 01:54:05
【问题描述】:

我今天遇到了一些我不理解的 JS,并且谷歌搜索按位运算并没有真正帮助我。有人可以解释一下吗?

     function createExcerpt(string, maxLength) {
          // Set a default value of maxLength of 110
          maxLength = maxLength | 110;
          ...

虽然我读到管道字符是按位或,但我对上面发生的事情感到茫然。 如果我应该发布更多上下文功能,请告诉我。

【问题讨论】:

  • 通常默认参数是用逻辑或 (||) 完成的......鉴于该评论,看起来像是一个错误。按位或将“设置默认值”
  • (尽管使用|| 作为默认参数isn't great practice,尽管您经常看到它)

标签: javascript bit-manipulation bitwise-operators bitwise-or


【解决方案1】:

鉴于前一行中存在该注释,这看起来是一个简单的错字。

默认设置通常使用 逻辑 or 运算符 || 来完成,因此几乎可以肯定:

maxLength = maxLength || 110;

但是,这实际上是个坏主意,因为如果 maxLength 已设置为错误值(如零),它将被默认值替换。这可能是你想要的,但这绝不是清楚的。

我可能会选择稍微更详细但绝对更清晰:

if (maxLength === undefined) { maxLength = 110; }

它仍然适合一行,并且意图非常具体。

如果您可以使用 ES6,那么更好的方法是使用直接烘焙到函数调用中的默认参数:

function createExcerpt(string, maxLength = 110) {
    ...
}

【讨论】:

    【解决方案2】:

    这绝对是一个错误。逻辑或 (||) 用作空合并运算符。按位或运算不会产生注释中指示的效果。您可以通过一些测试自行测试它。

    110 | 110 = 110
    120 | 110 = 126
    90 | 110 = 126
    null | 110 = 110
    50 | 110 = 126
    200 | 110 = 238
    

    您可以从几个示例中看出,结果对于传递“maxlength”参数的人来说是非常违反直觉的。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-07-17
      • 2011-01-07
      • 1970-01-01
      • 2012-03-03
      • 2016-05-23
      • 1970-01-01
      相关资源
      最近更新 更多