45

我正在使用这段 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 '|'.
4

5 回答 5

70

/*jshint bitwise: false*/

在文件的顶部

可用选项列表:http: //jshint.com/docs/options/

于 2012-07-23T00:17:05.660 回答
17

根据JSHint 文档,这是因为

“按位运算符在 JavaScript 程序中非常少见”

正如其他人所提到的,您可以禁用bitwiseJSHint 选项来消除警告。

于 2016-07-01T14:44:56.360 回答
6

您已经将这么多代码塞进了一行(为什么??),以至于您无法分辨 jshint 向您指出了什么。我重新格式化了代码,我看到了这个:

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

在那里做什么| 0?这是一个不必要的无操作。更新:似乎是一种整合浮点数的方法。

Jshint似乎不喜欢其他东西,但至少摆脱了这个。并将您的代码传播出去,以便您(和其他人)可以阅读它。

于 2012-07-23T00:19:41.520 回答
2

关于“为什么反对按位运算符”。我喜欢TSLint 文档中的这个

位运算符通常是拼写错误(...)它们也可能表明代码过于聪明,从而降低了可维护性。

于 2017-10-17T14:57:05.567 回答
-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();
于 2016-04-21T10:58:08.177 回答