私は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 '|'.
多くのコードを1行に詰め込んでいるので(なぜ??)、jshintが何を指しているのかわかりません。私はコードを再フォーマットしました、そして、私はこれを見ます:
var r = Math.random() * 16 | 0,
| 0
はそこで何をしていますか?それは不必要なノーオペレーションです。更新:フロートをint化する方法のようです。
Jshintは他のことを好まないようですが、少なくともこれを取り除きます。そして、あなた(そして他の人)が読むことができるようにコードを広げてください。
「ビットごとの演算子に反対する理由」について。 TSLint docs からこれが好きです
ビット単位演算子は多くの場合タイプミス(...)です。また、保守性を低下させる非常に巧妙なコードの指標にもなります。