0

今日、理解できない JS に出くわしました。グーグルでビット単位の演算を行っても、あまり役に立ちません。誰かが以下を説明できますか?

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

パイプ文字はビットごとの OR であると読みましたが、上記で何が起こっているのか途方に暮れています。コンテキストのために関数をもっと投稿する必要がある場合は、お知らせください。

4

2 に答える 2

1

これは間違いなく間違いです。論理 OR (||) は、null 合体演算子として使用されます。ビットごとの 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; }

それでも 1 行に収まり、意図は非常に具体的です。

そして、より良い方法は、ES6 を利用できると仮定して、関数呼び出しに直接組み込まれたデフォルトの引数を使用することです。

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