JavaScript lui-même peut être considéré comme un langage simple, mais nous l'améliorons constamment avec sagesse et motifs flexibles. Hier, nous avons appliqué ces modèles au framework JavaScript, et aujourd'hui ces frameworks entraînent à nouveau nos applications Web. De nombreux développeurs novices sont attirés par divers cadres JavaScript puissants, mais ils ignorent les compétences pratiques JavaScript qui sont vastes et vastes derrière le cadre. Cet article vous donnera une introduction complète aux points de connaissance.
1. Fonctionnement des entiers JS
Utilisez | 0 et ~~ pour convertir le point flottant en entiers et est plus rapide que ParseInt et Math.Round similaires, qui seront utiles lorsqu'ils traiteront des effets tels que des pixels et des déplacements d'animation. Ceci est la comparaison des performances.
var foo = (12.4 / 4.13) | 0; // le résultat est 3var bar = ~~ (12.4 / 4.13); // le résultat est 3
Une autre petite astuce est! ! 2 Marques d'exclamation, vous pouvez parler d'une valeur et la convertir rapidement en valeur booléenne. Vous pouvez le tester!
var eee = "eee"; alert (!! eee)
Le retour est vrai, ce qui signifie que toute valeur en est précédée! ! Tout peut être égal à vrai. À moins que cette valeur ne soit à l'origine une valeur booléenne, ou ne soit pas définie, nul, 0, false, nan, '', parce que les non définis, null, 0, false, nan '', mentionnés, ils sont à l'origine faux, donc deux sont ajoutés! ! Après cela, c'est encore fasle.
2. Réécrivez l'alerte native et enregistrez le nombre de boîtes contextuelles
(function () {var oldAlert = window.Alert, count = 0; window.Alert = function (a) {count ++; oldAlert (a + "/ n Vous avez appelé alert" + count + "fois maintenant. STOP, c'est diabolique!");};}) (); alert (Hello Haorooms ");3. Méthodes d'échange numérique ne déclarant pas les variables intermédiaires
Lors de l'échange de deux nombres, notre approche générale est de déclarer une variable intermédiaire, mais l'approche d'aujourd'hui est plutôt bizarre. Vous n'avez pas besoin de déclarer une variable intermédiaire et de voir comment il est implémenté!
var a = 1, b = 2; a = [b, b = a] [0]; console.log ('a:' + a + ', b:' + b); // Sortie a: 2, b: 1Et cela, cette méthode a-t-elle un nouveau sentiment?
4. Tout est un objet
Dans le monde de JavaScript, tout est un objet. En plus des nuls et non définies, d'autres types de nombres de base, les chaînes et les booléens ont des objets de wrapper correspondants. Une caractéristique d'un objet est que vous pouvez appeler des méthodes directement dessus.
Pour les types de base numériques, il échouera lors de l'essai d'appeler la méthode ToString dessus, mais il n'échouera pas après avoir été enfermé entre parenthèses puis appelée. L'implémentation interne est de convertir le type de base en un objet avec l'objet de wrapper correspondant. Donc (1) .toString () est équivalent au nouveau nombre (1) .toString (). Par conséquent, vous pouvez en effet utiliser des types de nombres de base, des chaînes, des booléens, etc. comme objets, faites simplement attention à la syntaxe pour être approprié.
Dans le même temps, nous avons remarqué que les nombres en JavaScript ne sont pas divisés en point flottant et en forme. Tous les nombres sont en fait des types de points flottants, en omettant simplement le point décimal. Par exemple, le 1 que vous voyez peut être écrit comme 1. C'est pourquoi une erreur est signalée lorsque vous essayez de 1. ToString (), donc la bonne façon de l'écrire devrait être comme ceci: 1..ToString (), ou ajouter des supports comme mentionné ci-dessus. Le but des supports ici est de corriger le JS Parser et de ne pas considérer le point après 1 comme un point décimal. L'implémentation interne est comme mentionné ci-dessus, convertissant 1. En un objet avec un objet wrapper, puis appelant la méthode.
5. Déformation de la déclaration if
Lorsque vous devez rédiger une instruction IF, essayez plutôt une autre méthode plus facile, en utilisant des opérateurs logiques dans JavaScript.
var day = (nouvelle date) .getDay () === 0; // Instruction if traditionnelle if (jour) {alert ('aujourd'hui est dimanche!');}; // Utiliser la logique et remplacer ifday && alert ('aujourd'hui est dimanche!');Par exemple, le code ci-dessus obtient d'abord la date d'aujourd'hui, si c'est dimanche, fenêtre pop-up, sinon rien ne sera fait. Nous savons qu'il y a un court-circuit dans les opérations logiques. Pour la logique et les expressions, ce n'est que si les deux sont vraies, le résultat peut être vrai. Si la variable du lendemain est jugée fausse, le résultat est faux pour toute l'expression, de sorte que l'alerte suivante ne se poursuivra pas. Si la veille est vraie, le code suivant doit être continué à exécuter le code suivant pour déterminer l'authenticité de l'ensemble de l'expression. En utilisant ce point, l'effet de IF est obtenu.
Pour les instructions IF traditionnelles, si le code corporel d'exécution dépasse 1 instruction, des accolades bouclées sont requises et en utilisant des expressions de virgule, toute barre de code peut être exécutée sans accolades bouclées.
if (conditoin) alert (1), alert (2), console.log (3);
6. Utiliser ===, pas ==
L'opérateur == (ou! =) Effectuera automatiquement la conversion de type en cas de besoin. L'opération === (ou! ==) n'effectue aucune conversion. Il comparera les valeurs et les types, et est également considéré comme meilleur que == en termes de vitesse.
[10] === 10 // est faux [10] == 10 // est vrai'10 '== 10 // est vrai'10' == 10 // est faux [] == 0 // est vrai [] === 0 // est faux '' == false // est vrai mais vrai == "A" est faux '' === FAUX // est faux
7. Utiliser les fermetures pour implémenter des variables privées
Fonction Person (name, age) {this.getName = function () {return name; }; this.setName = function (newname) {name = newname; }; this.getage = function () {return âge; }; this.setage = function (newage) {age = newage; }; // Attributs qui ne sont pas initialisés dans l'occupation VAR du constructeur; this.getoCcupation = function () {return occupation; }; this.setOccupation = function (newOCC) {occupation = newOcc; };}8. Créer un constructeur d'objets
Function Person (FirstName, LastName) {this.firstName = FirstName; this.lastName = lastName;} var saad = new personne ("saad", "Mousliki");9. Veillez à utiliser le typeof, l'instance et le constructeur
var arr = ["a", "b", "c"]; typeof arr; // return "Object" arr instanceof array // truearr.constructor (); // []
10. Créer une fonction d'auto-puissance
Ceci est souvent appelé une fonction anonyme auto-invoquée ou une expression de fonction d'appel instantanée. Il s'agit d'une fonction qui est automatiquement exécutée immédiatement après la création, généralement comme suit:
(fonction () {// un code privé qui sera exécuté automatiquement}) (); (fonction (a, b) {var result = a + b; return result;}) (10,20)11. Obtenez un élément aléatoire du tableau
var items = [12, 548, 'a', 2, 5478, 'foo', 8852 ,, 'Doe', 2145, 119]; var randolem = items [math.floor (math.random () * items.length)];
12. Obtenez un nombre aléatoire dans une plage spécifique
Cet extrait est très utile lorsque vous souhaitez générer des données de test, telles qu'une valeur de salaire aléatoire entre les valeurs minimales et maximales.
var x = math.floor (math.random () * (max - min + 1)) + min;
13. Générer un tableau de nombres entre 0 et la valeur maximale définie
var nombresArray = [], max = 100; pour (var i = 1; nombresArray.push (i ++) <max;); // nombres = [0,1,2,3 ... 100]
14. Générer une chaîne alphabétique aléatoire
Fonction GeneraTandomAlphanum (Len) {var rdmString = ""; pour (; rdmstring.length <len; rdmstring + = math.random (). toString (36) .substr (2)); return rdmstring.substr (0, len);} // appelle la méthode generaterandomalphanum (15);Quinze. Brouiller une gamme de nombres
Var nombres = [5, 458, 120, -215, 228, 400, 122205, -85411]; nombres = nombres.sort (function () {return math.random () - 0,5}); / * Les nombres du tableau seront égaux par exemple à [120, 5, 228, -215, 400, 458, -85411, 122205]16. Fonction de finition de la chaîne
String.prototype.trim = function () {return this.replace (/ ^ / s + | / s + $ / g, "");};17. Ajouter (ajouter) un tableau vers un autre tableau
var array1 = [12 , "foo" , {name: "Joe"} , -2458];var array2 = ["Doe" , 555 , 100];Array.prototype.push.apply(array1, array2);/* array1 will be equal to [12 , "foo" , {name "Joe"} , -2458 , "Doe" , 555 , 100] */18. Convertir l'objet d'arguments en un tableau
var argarray = array.prototype.slice.call (arguments); [Note du traducteur: l'objet Arguments est un objet de classe de tableau, mais pas un vrai tableau]
19. Vérifiez si les paramètres sont des nombres (numéro)
fonction isNumber (n) {return! Isnan (parsefloat (n)) && isfinite (n);}20. Vérifiez si les paramètres sont des tableaux
fonction isArray (obj) {return object.prototype.tostring.call (obj) === '[Array d'objets]';}Remarque: Si la méthode toString () est remplacée, vous n'obtiendrez pas le résultat souhaité en utilisant cette technique. Ou vous pouvez utiliser:
Array.isArray (OBJ); // c'est une nouvelle méthode de tableau
Si vous n'utilisez pas plusieurs trames, vous pouvez également utiliser la méthode d'instance. Mais si vous avez plusieurs contextes, vous obtiendrez le mauvais résultat.
var myFrame = document.createElement ('iframe'); document.body.appendChild (myFrame); var MyArray = window.frames [window.frames.length-1] .array; var arr = new MyArray (a, b, 10); // [a, b, 10] // L'instance de ne fonctionnera pas correctement, MyArray perd son constructeur // le constructeur n'est pas partagé entre l'instance FramesArt de l'arrivée; // FAUX[Note du traducteur: il existe de nombreuses discussions sur la façon de juger les tableaux sur Internet, vous pouvez les rechercher sur Google. Cet article est écrit en détail. 】
21. Obtenez la valeur maximale ou minimale dans un tableau de nombres
nombres VAR = [5, 458, 120, -215, 228, 400, 122205, -85411];
var maxinnumbers = math.max.apply (mathématiques, nombres);
var mininnumbers = math.min.apply (mathématiques, nombres);
[Note du traducteur: voici une compétence pour passer des paramètres à l'aide de la méthode function.prototype.apply]
22. Effacer un tableau
var MyArray = [12, 222, 1000]; MyArray.length = 0; // MyArray sera égal à [].
23. N'utilisez pas de suppression pour supprimer les éléments dans un tableau.
Utilisez Splice au lieu de supprimer pour supprimer un élément dans le tableau. L'utilisation de Supprimer remplace simplement l'élément d'origine par un non-défini, ne le supprime pas vraiment du tableau.
N'utilisez pas cette méthode:
var items = [12, 548, 'a', 2, 5478, 'foo', 8852 ,, 'Doe', 2154, 119]; items.length; // Renvoie des éléments 11Delete [3]; // retourne trueItems.length; // RETOUR 11 / * Les éléments seront égaux à [12, 548, "A", Undefined × 1, 5478, "Foo", 8852, Undefined × 1, "Doe", 2154, 119] * /
Et utilisation:
var items = [12, 548, 'a', 2, 5478, 'foo', 8852 ,, 'Doe', 2154, 119]; items.length; // retourne 11Items.splice (3,1); items.length; // Retour 10 / * Les éléments seront égaux à [12, 548, "A", 5478, "FOO", 8852, Undefined × 1, "Doe", 2154, 119] * /
La méthode de suppression doit être utilisée pour supprimer la propriété d'un objet.
24. Utiliser la longueur pour tronquer un tableau
Semblable à la façon de nettoyer le tableau ci-dessus, nous utilisons l'attribut de longueur pour tronquer un tableau.
var MyArray = [12, 222, 1000, 124, 98, 10]; MyArray.Length = 4; // MyArray sera égal à [12, 222, 1000, 124].
De plus, si vous définissez la longueur d'un tableau sur une valeur plus grande que la valeur actuelle, la longueur du tableau sera modifiée et un nouvel élément non défini sera ajouté pour le remplir. La longueur du tableau n'est pas une propriété en lecture seule.
MyArray.Length = 10; // La nouvelle longueur du tableau est de 10MyArray [MyArray.length - 1]; // indéfini
25. Utilisez logique et / ou pour porter des jugements conditionnels
Même (cinq), si la déclaration de déformation!
var foo = 10; foo == 10 && dosomething (); // équivaut à if (foo == 10) dosomething (); foo == 5 || Dosomething (); // équivaut à if (foo! = 5) DoSomething ();
Logique et peut également être utilisé pour définir des valeurs par défaut pour les paramètres de fonction
fonction dosomething (arg1) {arg1 = arg1 || 10; // Si Arg1 n'est pas défini, Arg1 sera défini sur 10 par défaut}26. Utilisez la méthode map () pour traverser les éléments dans un tableau
var squares = [1,2,3,4] .map (fonction (val) {return val * val;}); // carrés sera égal à [1, 4, 9, 16]27. Cound un nombre et conserver n décimales
var num = 2,443242342; num = num.tofixed (4); // num sera égal à 2,4432
28. Problème du numéro de point flottant
0,1 + 0,2 === 0,3 // est false9007199254740992 + 1 // est égal à 9007199254740992900719925474092 + 2 // est égal à 9007199254740994
Pourquoi cela se produit-il? 0,1 + 0,2 est égal à 0,300000000000000000000004. Vous devez savoir que tous les nombres JavaScript sont des numéros à virgule flottante en interne exprimés en binaire 64 bits, conformément à la norme IEEE 754. Pour plus d'informations, vous pouvez lire cet article de blog. Vous pouvez utiliser des méthodes tofixed () et toprecision () pour résoudre ce problème.
29. Lorsque vous utilisez for-in pour parcourir les propriétés internes d'un objet, veuillez vérifier les propriétés.
L'extrait de code suivant peut éviter d'accéder aux propriétés du prototype lors de la traversée d'une propriété d'objet.
for (var name in object) {if (object.hasownproperty (name)) {// faire quelque chose avec le nom}}Trente, opérateur de virgule
var a = 0; var b = (a ++, 99); console.log (a); // A sera égal à 1Console.log (b); // b est égal à 99
31. Variables de cache qui doivent être calculées et interrogées (calcul ou interrogatoire)
Pour les sélecteurs jQuery, nous ferions mieux de mettre en cache ces éléments DOM.
var NavRight = document.QuerySelector ('# droite'); var navleft = document.QuerySelector ('# Left'); var Navup = document.QuerySelector ('# up'); var navown = document.QuerySelector ('# down'); var navown = document.QuerySelector ('# down');32. Vérifiez les paramètres avant d'appeler Isfinite ()
isfinite (0/0); // fauxficine ("foo"); // Falsififinite ("10"); // TrueFisnite (10); // truesisfinite (non défini); // fauxficine (); // Falsificite (null); // vrai !!!33. Évitez les indices négatifs dans les tableaux
var nombresArray = [1,2,3,4,5]; var de = nombresRay.indexof ("foo"); // de est égal à -1numbersArray.splice (de, 2); // reviendra [5]Assurez-vous que les paramètres lors de l'index indexé ne sont pas négatifs.
34. Sérialisation et désérialisation basées sur JSON
var personne = {nom: 'saad', âge: 26 ans, département: {id: 15, nom: "r & d"}}; var stringfromerson = json.stringify (personne); / * stringfrumperson est égal à "{" name ":" saad "," âge ": 26," département ": {" id ":" nom ":" r & d "}" * / var Personfro JSON.Parse (StringFromperson); / * PersonFromString est égal à l'objet personne * /35. Évitez d'utiliser des constructeurs d'évaluation et de fonction
L'utilisation des constructeurs d'évaluation et de fonction est très coûteux car chaque fois qu'ils appellent le moteur de script pour convertir le code source en code exécutable.
var func1 = new function (FunctionCode); var func2 = eval (FunctionCode);
36. Évitez d'utiliser avec ()
L'utilisation avec () insérera une variable globale. Par conséquent, les variables avec le même nom seront écrasées et causeront des problèmes inutiles.
37. Évitez d'utiliser for-in pour traverser un tableau
Évitez d'utiliser cette méthode:
var sum = 0; for (var i in arraynumbers) {sum + = arraynumbers [i];}Une meilleure façon est:
var sum = 0; for (var i = 0, len = arraynumbers.length; i <len; i ++) {sum + = arraynumbers [i];}L'avantage supplémentaire est que les valeurs des variables I et LEN ne sont exécutées qu'une seule fois, ce qui sera plus efficace que la méthode suivante:
for (var i = 0; i <arraynumbers.length; i ++)
Pourquoi? Parce que ArrayNumbers.Length est calculé chaque fois que la boucle est bouclée.
38. Passez la fonction au lieu d'une chaîne lorsque vous appelez setTimeout () et setInterval ().
Si vous passez une chaîne à setTimeout () ou setInterval (), la chaîne sera analysée comme si elle était utilisée avec EVAL, ce qui prend beaucoup de temps.
N'utilisez pas:
setInterval ('DoSomethingperiodical ()', 1000); setTimeout ('DosomethingAfterfivesEcondes ()', 5000)Et utilisation:
setInterval (dosomethingperiodally, 1000); setTimeout (dosomethingafterfivesEcondes, 5000);
39. Utilisez des instructions Switch / Case au lieu d'une longue liste de si / else
Lorsque vous jugez que la situation est supérieure à 2, l'utilisation de Switch / Case est plus efficace et plus élégante (plus facile d'organiser le code). Mais n'utilisez pas le commutateur / cas lorsqu'il y a plus de 10 jugements.
40. Utilisez l'interrupteur / cas lorsque vous jugez la plage numérique
Dans la situation suivante, il est raisonnable d'utiliser l'interrupteur / cas pour déterminer la plage numérique:
function getCategory (age) {var category = ""; switch (true) {case isnan (Âge): catégorie = "pas un âge"; casser; cas (âge> = 50): catégorie = "old"; casser; cas (âge <= 20): catégorie = "bébé"; casser; par défaut: catégorie = "jeune"; casser; }; catégorie de retour;} getCategory (5); // retournera "bébé"[Note du traducteur: d'une manière générale, si / autre sera plus approprié pour juger de la plage numérique. Le commutateur / l'affaire convient plus au jugement de déterminer la valeur]
41. Spécifiez un objet prototype pour l'objet créé
Il est possible d'écrire une fonction pour créer un objet qui spécifie les paramètres comme prototype:
Function Clone (objet) {fonction ONESHOTCONSTRUCTOR () {}; OneshotConstructor.prototype = objet; return new OneshotConstructor ();} clone (array) .prototype; // []42. Une fonction d'échappement HTML
function EastHtml (texte) {var remplacements = {"<": "<", ">": ">", "&": "&", "/" ":" ""}; return text.replace (/ [<> & "] / g, fonction (caractère) {return remplacements [caractères];});}43. Évitez d'utiliser l'essai et le final à l'intérieur d'une boucle
Au moment de l'exécution, chaque fois que la clause Catch est exécutée, l'objet d'exception capturé sera attribué à une variable, et dans la structure d'essai et finalement, cette variable sera créée à chaque fois.
Évitez d'écrire de cette façon:
var objet = ['foo', 'bar'], i; for (i = 0, len = object.length; i <len; i ++) {try {// faire quelque chose qui lance une exception} catch (e) {// gère l'exception}}Et utilisation:
var objet = ['foo', 'bar'], i; try {for (i = 0, len = object.length; i <len; i ++) {// faire quelque chose qui lance une exception}} catch (e) {// gère exception}44. Définissez un délai d'expiration pour XMLHTTPRequests.
Une fois qu'une demande XHR a pris longtemps (par exemple, en raison de problèmes de réseau), vous devrez peut-être interrompre la demande, afin que vous puissiez utiliser SetTimeout () pour l'appel XHR.
var xhr = new xmlHttpRequest (); xhr.onreadystateChange = function () {if (this.readystate == 4) {cleartimeout (timeout); // faire quelque chose avec des données de réponse}} var timeout = setTimeout (function () {xhr.abort (); // appel d'erreur d'erreur}, 60 * 1000 / * Timeout après une minute * /); xhr.open ('get', url, true); xhr.send ();De plus, vous devez généralement éviter complètement les demandes AJAX synchronisées.
Quarante-cinq. Gérer le délai d'expiration de Websocket
Habituellement, après la création d'une connexion WebSocket, si vous n'êtes pas actif, le serveur déconnecte (temps out) votre connexion après 30 secondes. Le pare-feu sera également déconnecté après une période d'inactivité.
Pour éviter les problèmes de délai d'expiration, vous devrez peut-être envoyer des messages vides au côté du serveur par intermittence. Pour ce faire, vous pouvez ajouter les deux fonctions suivantes dans votre code: l'une pour conserver la connexion et l'autre pour ne pas remettre la connexion. Avec cette astuce, vous pouvez contrôler le problème de temps mort.
Utilisez un timerid:
var timerid = 0; fonction keepalive () {var timeout = 15000; if (Websocket.readystate == Websocket.Open) {WebSocket.Send (''); } timerid = setTimeout (keepalive, timeout);} function annulekevealive () {if (timerid) {cANCELTIMEOut (timerid); }}La méthode keepalive () doit être ajoutée à la fin de la méthode onopen () de la connexion WebSocket, et CancelKeepalive () est ajouté à la fin de la méthode onclose ().
46. N'oubliez pas que les opérateurs d'origine sont toujours plus efficaces que les appels de fonction. Utilisez Vanillajs.
Par exemple, n'utilisez pas:
var min = math.min (a, b); a.push (v);
Et utilisation:
var min = a <b? AB; A [A.Length] = V;
47. À partir des entiers, sélectionnez au hasard une valeur
Il existe la formule suivante, qui est très utile, et nous permet d'afficher au hasard certaines citations ou événements d'actualités célèbres!
Valeur = math.floor (math.random () * Nombre total de valeurs possibles + première valeur possible)
Par exemple: pour sélectionner une valeur entre 2 et 10, nous pouvons l'écrire comme ça
var num = math.floor (math.random () * 9 + 2)
N'oubliez pas la formule ci-dessus! ~
L'utilisation et la fonction de la seule barre verticale de l'opérateur JS "|" et le traitement des données JS
Tout à l'heure, lors de l'exploitation des entiers JS, il équivaut à supprimer le point décimal, ParseInt. Lorsqu'un nombre positif est équivalent à math.floor (), et lorsqu'un nombre négatif est équivalent à math.ceil () Remarque:
1. Math.ceil () est utilisé comme arrondissement vers le haut. 2. Math.floor () est utilisé comme arrondissant vers le bas. 3. Math.round () Round () couramment utilisé en mathématiques. console.log (0,6 | 0) // 0console.log (1.1 | 0) // 1Console.log (3.65555 | 0) // 3Console.log (5.99999 | 0) // 5Console.log (-7.777 | 0) // - 7
Remarque: En plus des trois méthodes de mathématiques à traiter les numéros, nous utilisons souvent ParseInt (), Parsefloat (), Tofixed () et Toprecision (), etc. Une brève explication:
L'utilisation de la méthode tofixée est la suivante:
100.456001.tofixed (2); //100.47100.456001.tofixed(3); //100.456number.prototype.tofixed.Call(100.456001,2); //100.47
Inconvénients: après utilisation, il deviendra une chaîne.
L'utilisation de toprecision est la suivante:
99.456001.Toprecision (5); //99.456100.456001.toprecision(5); //100.46number.prototype.toprecision.Call(10.456001,5); //10.456
Règles de fonctionnement pour les barres verticales uniques
Après avoir examiné l'exemple ci-dessus, nous savons généralement qu'une seule barre verticale peut effectuer un opération d'arrondi, ce qui signifie que seule la partie positive est conservée et que la partie décimale est supprimée. Cependant, comment "| 0" est-il calculé? Pourquoi "| 0" peut-il atteindre le but de l'arrondi? Quelle sera la barre verticale unique si elle n'est pas 0?
Avec ces questions à l'esprit, regardons l'exemple suivant:
console.log (3 | 4); //7Console.log(4|4); //4Console.log(8|3); //11Console.log(5.3|4.1); //5Console.log(9|3455); // 3455
Il semble qu'il n'y ait pas de modèle à trouver? Recherchez en ligne. http://tools.vevb.com/table/priority
Cela mentionne une seule barre verticale "|" Mais il n'y a pas de javascript.
Ok, je vais annoncer la réponse ici. En fait, la seule barre verticale "|" est le résultat obtenu en le convertissant en système à 2 chiffres. Par exemple, prenons un exemple simple:
3 | 4 est converti en binaire et 011 | 100 ajout donne 111 = 74 | 4 est converti en binaire et 100 | 100 ajout donne 100 = 48 | 3 est converti en binaire et 1000 | 011 Addition donne 1011 = 11
Et ainsi de suite, je ne les listerai pas un par un ici. La seule barre verticale "|" Le fonctionnement est le résultat obtenu en le convertissant en système à 2 chiffres! Avez-vous tout appris?