web-dev-qa-db-fra.com

Pourquoi JSHint plaide-t-il contre les opérateurs au niveau du bit? Comment dois-je exprimer ce code?

J'utilise ce morceau de JavaScript pour générer un UID:

(original:)

//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); });
}

(formaté pour pouvoir être lu :)

// 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 n'aime pas l'utilisation des opérateurs au niveau du bit OR et AND. Je me demandais comment je pourrais réécrire ceci pour être plus "standard".

EDIT: JSHint déclare:

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

Mettre

/*jshint bitwise: false*/

en haut de votre dossier

Une liste des options disponibles: http://jshint.com/docs/options/

69
zerkms

Selon documents JSHint , c'est parce que

"Les opérateurs au niveau du bit sont très rares dans les programmes JavaScript"

Comme d'autres l'ont mentionné, vous pouvez désactiver l'option bitwise JSHint pour supprimer les avertissements.

17
eczajk

Vous avez bloqué tellement de code sur une seule ligne (pourquoi ??) que vous ne pouvez pas dire ce que jshint vous indique. J'ai reformaté le code, et je vois ceci:

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

Quel est le | 0 Faire là? C'est une opération inutile. MISE À JOUR: semble être un moyen d'int-ify un flotteur.

Jshint ne semble pas aimer d'autres choses, mais au moins s'en débarrasser. Et diffusez votre code afin que vous (et les autres) puissiez le lire.

6
Ned Batchelder

À propos de "Pourquoi argumenter contre les opérateurs au niveau du bit". J'aime ça de TSLint docs

Les opérateurs au niveau du bit sont souvent des fautes de frappe (...) Ils peuvent également être un indicateur de code trop intelligent qui diminue la maintenabilité.

2
Jaime