0

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

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

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

4

2 回答 2

1

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

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

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

于 2016-12-30T01:59:52.033 回答
1

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

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

maxLength = maxLength || 110;

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

我可能会选择稍微冗长但绝对更清晰的:

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

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

更好的方法是,假设你有 ES6 可用,将使用直接烘焙到函数调用中的默认参数:

function createExcerpt(string, maxLength = 110) {
    ...
}
于 2016-12-30T01:59:58.543 回答