web-dev-qa-db-ja.com

JSHintがビット演算子に反対するのはなぜですか?このコードをどのように表現すればよいですか?

私はUIDを生成するためにこのJavaScriptのビットを使用しています:

(元の:)

//If ID has not been defined then generate a new unique ID.
if(!id){
    id = 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function (c) { var r = Math.random() * 16 | 0, v = c == 'x' ? r : (r & 0x3 | 0x8); return v.toString(16); });
}

(読めるようにフォーマットされています:)

// If ID has not been defined then generate a new unique ID.
if (!id) {
    id = 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(
        /[xy]/g, 
        function (c) { 
            var r = Math.random() * 16 | 0, 
                v = c == 'x' ? r : (r & 0x3 | 0x8); 
            return v.toString(16); 
        }
    );
}

JSHintは、ビット単位のORおよびAND演算子の使用を好みません。これをより「標準に優しい」ように書き換えることができるかどうか疑問に思っていました。

編集:JSHintの状態:

Line 8: id = 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function (c) { var r = Math.random() * 16 | 0, v = c == 'x' ? r : (r & 0x3 | 0x8); return v.toString(16); });
Unexpected use of '|'.

Line 8: id = 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function (c) { var r = Math.random() * 16 | 0, v = c == 'x' ? r : (r & 0x3 | 0x8); return v.toString(16); });
Expected '===' and instead saw '=='.

Line 8: id = 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function (c) { var r = Math.random() * 16 | 0, v = c == 'x' ? r : (r & 0x3 | 0x8); return v.toString(16); });
Unexpected use of '&'.

Line 8: id = 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function (c) { var r = Math.random() * 16 | 0, v = c == 'x' ? r : (r & 0x3 | 0x8); return v.toString(16); });
Unexpected use of '|'.
45
Sean Anderson

プット

/*jshint bitwise: false*/

ファイルの先頭に

利用可能なオプションのリスト: http://jshint.com/docs/options/

69
zerkms

JSHint docs によると、それは

「JavaScriptプログラムではビット演算子は非常にまれです」

他の人が述べたように、bitwise JSHintオプションを無効にして警告を抑制できます。

17
eczajk

多くのコードを1行に詰め込んでいるので(なぜ??)、jshintが何を指しているのかわかりません。私はコードを再フォーマットしました、そして、私はこれを見ます:

var r = Math.random() * 16 | 0, 

| 0はそこで何をしていますか?それは不必要なノーオペレーションです。更新:フロートをint化する方法のようです。

Jshintは他のことを好まないようですが、少なくともこれを取り除きます。そして、あなた(そして他の人)が読むことができるようにコードを広げてください。

6
Ned Batchelder

「ビットごとの演算子に反対する理由」について。 TSLint docs からこれが好きです

ビット単位演算子は多くの場合タイプミス(...)です。また、保守性を低下させる非常に巧妙なコードの指標にもなります。

2
Jaime