Ответ 1
Помещенный
/*jshint bitwise: false*/
в верхней части файла
Список доступных опций: http://jshint.com/docs/options/
Я использую этот бит JavaScript для создания UID:
(оригинал:)
//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. Мне было интересно, как я могу переписать это, чтобы быть более "стандартным".
EDIT: состояния 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 '|'.
Помещенный
/*jshint bitwise: false*/
в верхней части файла
Список доступных опций: http://jshint.com/docs/options/
Согласно JSHint docs, это потому, что
"Побитовые операторы очень редки в программах JavaScript"
Как уже упоминалось, вы можете отключить параметр bitwise
JSHint, чтобы отменить предупреждения.
Вы застряли столько кода в одну строку (почему?), что вы не можете сказать, что именно указывает jshint. Я переформатировал код, и я вижу следующее:
var r = Math.random() * 16 | 0,
Что там делает | 0
? Это бесполезный нет-op. UPDATE: похоже, это способ int-ify float.
Jshint, похоже, не похож на другие вещи, но, по крайней мере, избавиться от этого. И распространите свой код, чтобы вы (и другие) могли его прочитать.
О "Почему спорят против побитовых операторов". Мне нравится это от TSLint docs
Побитовые операторы часто опечатываются (...) Они также могут быть индикатором слишком умного кода, который уменьшает ремонтопригодность.
это отлично работает для меня:
return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g,
function(c: string) {
var r = Math.floor(Math.random() * 16),
v = c === 'x' ? r : (r % 4 + 4);
return v.toString(16);
}).toUpperCase();