我正在使用这段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运算符。我想知道如何将其重写为更加“标准友好”。
编辑: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 '|'.
答案 0 :(得分:69)
答案 1 :(得分:17)
答案 2 :(得分:6)
你把这么多代码塞进了一行(为什么??),你无法分辨出jshint指向你的是什么。我重新格式化了代码,我看到了:
var r = Math.random() * 16 | 0,
| 0
在那里做什么?这是一个不必要的无操作。更新:似乎是一种整合浮动的方法。
Jshint似乎不喜欢其他东西,但至少要摆脱这个。并传播你的代码,以便你(和其他人)可以阅读它。
答案 3 :(得分:2)
关于“为什么反对按位运算符”。我喜欢TSLint docs
按位运算符通常是拼写错误(...) 它们也可以成为过于聪明的代码的指标,降低了可维护性。
答案 4 :(得分:-1)
这对我来说很好:
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();