Table des matières
Avant-propos
Style de programmation
Portée au niveau du bloc
String
Affectation de déstructuration
Objet
Tableau
Fonction
Structure de la carte
Module Module
ESLint
Maison interface Web js tutoriel Une brève analyse du style de programmation JavaScript front-end

Une brève analyse du style de programmation JavaScript front-end

Mar 02, 2017 pm 03:24 PM
javascript

Avant-propos

De nombreuses entreprises et organisations ont divulgué leurs spécifications de style. Pour plus de détails, veuillez vous référer à jscs.info. Le contenu suivant fait principalement référence aux spécifications de style JavaScript d'Airbnb. Bien sûr, il existe également des suggestions de programmation de Google, etc. Style de programmation

Ce chapitre explique comment utiliser la nouvelle syntaxe d'ES6, combinée à la syntaxe JavaScript traditionnelle, pour écrire de manière raisonnable et simple. -lire et maintenir le code.

Style de programmation

Portée au niveau du bloc

(1) let remplace var

ES6 propose deux nouvelles déclarations Commandes variables : laisser et const. Parmi eux, let peut remplacer complètement var, car la sémantique des deux est la même et let n'a aucun effet secondaire.

'use strict';
if (true) {
  let x = 'hello';
}
for (let i = 0; i < 10; i++) {
  console.log(i);
}
Copier après la connexion

Remarque : si var est utilisé à la place de let dans le code ci-dessus, deux variables globales sont en fait déclarées, ce qui n'est évidemment pas l'intention. Les variables ne doivent être valides que dans le bloc de code dans lequel elles sont déclarées. La commande var ne peut pas faire cela.

La commande var a un effet de promotion variable, mais la commande let n'a pas ce problème :

&#39;use strict&#39;;

if(true) {
  console.log(x); // ReferenceError
  let x = &#39;hello&#39;;
}
Copier après la connexion

Remarque : si le code ci-dessus utilise var au lieu de let, la ligne console.log ne signalera pas d'erreur, mais affichera un élément indéfini car la déclaration de variable est hissée en tête du bloc de code. Cela viole le principe selon lequel les variables sont déclarées en premier et utilisées ensuite.

(2) Constantes globales et sécurité des threads

Il y a plusieurs raisons pour lesquelles const est meilleur que let. L'une est que const peut rappeler aux personnes qui lisent le programme que cette variable ne doit pas changer ; l'autre est que const est plus conforme à l'idée de programmation fonctionnelle. L'opération ne change pas la valeur, mais crée seulement une nouvelle valeur. , et cela est également propice aux futures opérations distribuées ; la dernière raison pour laquelle le compilateur JavaScript optimisera const, donc utiliser plus de const contribuera à améliorer l'efficacité de l'exécution du programme. En d'autres termes, la différence essentielle entre let et const est en fait la différence. dans le traitement interne du compilateur.

// bad
var a = 1, b = 2, c = 3;

// good
const a = 1;
const b = 2;
const c = 3;

// best
const [a, b, c] = [1, 2, 3];
Copier après la connexion

Remarque : il y a deux avantages à déclarer une constante const. Premièrement, les personnes qui lisent le code se rendront immédiatement compte que la valeur ne doit pas être modifiée. Deuxièmement, cela évite les erreurs causées par une modification involontaire de la valeur de la variable. . JavaScript peut avoir des implémentations multithread (telles que les projets River Trail d'Intel). Dans ce cas, les variables représentées par let ne doivent apparaître que dans le code exécuté dans un seul thread et ne peuvent pas être partagées par plusieurs threads. Cela contribuera à garantir la sécurité des threads.

String

Les chaînes statiques utilisent toujours des guillemets simples ou des backticks, mais n'utilisent pas de guillemets doubles. Les chaînes dynamiques utilisent des backticks.

// bad
const a = "foobar";
const b = &#39;foo&#39; + a + &#39;bar&#39;;
// acceptable
const c = `foobar`;
// good
const a = &#39;foobar&#39;;
const b = `foo${a}bar`;
const c = &#39;foobar&#39;;
Copier après la connexion

Affectation de déstructuration

Lors de l'attribution de valeurs à des variables à l'aide de membres du tableau, l'affectation de déstructuration est préférée.

const arr = [1, 2, 3, 4];
// bad
const first = arr[0];
const second = arr[1];
// good
const [first, second] = arr;
Copier après la connexion

Si le paramètre de fonction est membre d'un objet, l'affectation de déstructuration est préférée.

// bad
function getFullName(user) {
  const firstName = user.firstName;
  const lastName = user.lastName;
}
// good
function getFullName(obj) {
  const { firstName, lastName } = obj;
}
// best
function getFullName({ firstName, lastName }) {
}
Copier après la connexion

Si la fonction renvoie plusieurs valeurs, l'affectation déstructurante de l'objet est préférée à l'affectation déstructurante du tableau. Cela facilite l'ajout ultérieur de valeurs de retour et la modification de l'ordre des valeurs de retour.

// bad
function processInput(input) {
  return [left, right, top, bottom];
}
// good
function processInput(input) {
  return { left, right, top, bottom };
}
const { left, right } = processInput(input);
Copier après la connexion

Objet

Objet défini sur une seule ligne, le dernier membre ne se termine pas par une virgule. Pour les objets définis sur plusieurs lignes, le dernier membre se termine par une virgule.

// good
const a = { k1: v1, k2: v2 };
const b = {
  k1: v1,
  k2: v2,
};
Copier après la connexion

Les objets doivent être aussi statiques que possible. Une fois définis, de nouveaux attributs ne doivent pas être ajoutés à volonté. Si l’ajout d’attributs est inévitable, utilisez la méthode Object.assign.

// if reshape unavoidable
const a = {};
Object.assign(a, { x: 3 });

// good
const a = { x: null };
a.x = 3;
Copier après la connexion

Si le nom d'attribut de l'objet est dynamique, vous pouvez utiliser des expressions d'attribut pour le définir lors de la création de l'objet.

// good
const obj = {
  id: 5,
  name: &#39;San Francisco&#39;,
  [getKey(&#39;enabled&#39;)]: true,
};
Copier après la connexion

Tableau

Copiez un tableau à l'aide de l'opérateur spread (…).

// bad
const len = items.length;
const itemsCopy = [];
let i;

for (i = 0; i < len; i++) {
  itemsCopy[i] = items[i];
}
// good
const itemsCopy = [...items];
Copier après la connexion

Utilisez la méthode Array.from pour convertir un objet de type tableau en tableau.

const foo = document.querySelectorAll(&#39;.foo&#39;);
const nodes = Array.from(foo);
Copier après la connexion

Fonction

La fonction d'exécution immédiate peut être écrite sous la forme d'une fonction flèche.

(() => {
  console.log(&#39;Welcome to the Internet.&#39;);
})();
Copier après la connexion

Dans les situations où des expressions de fonction doivent être utilisées, essayez plutôt d'utiliser des fonctions fléchées. Parce que c'est plus concis et lie cela.

// bad
[1, 2, 3].map(function (x) {
  return x * x;
});
// good
[1, 2, 3].map((x) => {
  return x * x;
});
// best
[1, 2, 3].map(x => x * x);
Copier après la connexion

La fonction flèche remplace Function.prototype.bind et ne devrait plus utiliser self/_this/that pour lier ceci.

// bad
const self = this;
const boundMethod = function(...params) {
  return method.apply(self, params);
}

// acceptable
const boundMethod = method.bind(this);

// best
const boundMethod = (...params) => method.apply(this, params);
Copier après la connexion

Pour les fonctions simples, sur une seule ligne et non réutilisables, il est recommandé d'utiliser les fonctions fléchées. Si le corps de la fonction est complexe et comporte un grand nombre de lignes, la méthode traditionnelle d’écriture de fonction doit être utilisée.

Tous les éléments de configuration doivent être concentrés dans un seul objet et placés comme dernier paramètre. Les valeurs booléennes ne peuvent pas être utilisées directement comme paramètres.

// bad
function pide(a, b, option = false ) {
}

// good
function pide(a, b, { option = false } = {}) {
}
Copier après la connexion

N'utilisez pas de variables d'arguments dans le corps de la fonction, utilisez plutôt l'opérateur reste (…). Étant donné que l'opérateur rest indique explicitement que vous souhaitez obtenir les paramètres et que arguments est un objet de type tableau, l'opérateur rest peut fournir un véritable tableau.

// bad
function concatenateAll() {
  const args = Array.prototype.slice.call(arguments);
  return args.join(&#39;&#39;);
}

// good
function concatenateAll(...args) {
  return args.join(&#39;&#39;);
}
Copier après la connexion

Utilisez la syntaxe des valeurs par défaut pour définir les valeurs par défaut des paramètres de fonction.

// bad
function handleThings(opts) {
  opts = opts || {};
}

// good
function handleThings(opts = {}) {
  // ...
}
Copier après la connexion

Structure de la carte

Utilisez Object uniquement lors de la simulation d'objets d'entité dans le monde réel. Si vous n’avez besoin que de la structure de données key:value, utilisez la structure Map. Parce que Map dispose d'un mécanisme de traversée intégré.

let map = new Map(arr);
for (let key of map.keys()) {
  console.log(key);
}
for (let value of map.values()) {
  console.log(value);
}
for (let item of map.entries()) {
  console.log(item[0], item[1]);
}
Copier après la connexion

Module Module

La syntaxe du module est la manière standard d'écrire des modules JavaScript, respectez cette façon d'écrire. Utilisez import au lieu de require. La méthode d'écriture habituelle est la suivante :

import { func1, func2 } from &#39;moduleA&#39;;
Copier après la connexion

Utilisez export au lieu de module.exports

// commonJS的写法
var React = require(&#39;react&#39;);

var Breadcrumbs = React.createClass({
  render() {
    return <nav />;
  }
});

module.exports = Breadcrumbs;

// ES6的写法
import React from &#39;react&#39;;

const Breadcrumbs = React.createClass({
  render() {
    return <nav />;
  }
});

export default Breadcrumbs
Copier après la connexion

Si le module n'a qu'une seule valeur de sortie, utilisez export default Si le module en a. plusieurs valeurs de sortie, utilisez l'exportation par défaut. N'utilisez pas l'exportation par défaut et n'utilisez pas l'exportation par défaut et l'exportation ordinaire en même temps.

N'utilisez pas de caractères génériques dans les entrées du module. Parce que cela garantit qu'il existe une sortie par défaut (exportation par défaut) dans votre module.

import myObject from &#39;./importModule&#39;;
Copier après la connexion

Si le module génère une fonction par défaut, la première lettre du nom de la fonction doit être en minuscule. C’est également le style de codage de la dénomination des cas de chameaux.

function makeStyleGuide() {}
export default makeStyleGuide;
Copier après la connexion

如果模块默认输出一个对象,对象名的首字母应该大写。

const StyleGuide = {
  es6: {
  }
};
export default StyleGuide;
Copier après la connexion

ESLint

ESLint是一个语法规则和代码风格的检查工具,可以用来保证写出语法正确、风格统一的代码。和lint的使用差不多
首先,安装ESLint。

npm i -g eslint
Copier après la connexion

然后,安装Airbnb语法规则。

npm i -g eslint-config-airbnb
Copier après la connexion

最后,在项目的根目录下新建一个.eslintrc文件,配置ESLint。

{
  "extends": "eslint-config-airbnb"
}
Copier après la connexion

比如:

var unusued = &#39;I have no purpose!&#39;;

function greet() {
    var message = &#39;Hello, World!&#39;;
    alert(message);
}

greet();
Copier après la connexion

然后我们使用命令,就可以检查语法的问题,并给出相关建议。

eslint index.js
Copier après la connexion
$ eslint index.js
index.js
  1:5  error  unusued is defined but never used                 no-unused-vars
  4:5  error  Expected indentation of 2 characters but found 4  indent
  5:5  error  Expected indentation of 2 characters but found 4  indent

x 3 problems (3 errors, 0 warnings)
Copier après la connexion

 以上就是前端 JavaScript 编程风格浅析 的内容,更多相关内容请关注PHP中文网(www.php.cn)!

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

AI Hentai Generator

AI Hentai Generator

Générez AI Hentai gratuitement.

Article chaud

R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
4 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Meilleurs paramètres graphiques
4 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Comment réparer l'audio si vous n'entendez personne
4 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: Comment déverrouiller tout dans Myrise
1 Il y a quelques mois By 尊渡假赌尊渡假赌尊渡假赌

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Supprimez les valeurs en double du tableau PHP à l'aide d'expressions régulières Supprimez les valeurs en double du tableau PHP à l'aide d'expressions régulières Apr 26, 2024 pm 04:33 PM

Comment supprimer les valeurs en double du tableau PHP à l'aide d'expressions régulières : utilisez l'expression régulière /(.*)(.+)/i pour faire correspondre et remplacer les doublons. Parcourez les éléments du tableau et vérifiez les correspondances à l'aide de preg_match. S'il y a une correspondance, ignorez la valeur ; sinon, ajoutez-la à un nouveau tableau sans valeurs en double.

A quoi sert la programmation et à quoi sert de l'apprendre ? A quoi sert la programmation et à quoi sert de l'apprendre ? Apr 28, 2024 pm 01:34 PM

1. La programmation peut être utilisée pour développer divers logiciels et applications, notamment des sites Web, des applications mobiles, des jeux et des outils d'analyse de données. Ses domaines d'application sont très larges, couvrant presque tous les secteurs, notamment la recherche scientifique, la santé, la finance, l'éducation, le divertissement, etc. 2. L'apprentissage de la programmation peut nous aider à améliorer nos compétences en résolution de problèmes et nos capacités de réflexion logique. Lors de la programmation, nous devons analyser et comprendre les problèmes, trouver des solutions et les traduire en code. Cette façon de penser peut cultiver nos capacités analytiques et abstraites et améliorer notre capacité à résoudre des problèmes pratiques.

Créez des applications basées sur un navigateur avec Golang Créez des applications basées sur un navigateur avec Golang Apr 08, 2024 am 09:24 AM

Créez des applications basées sur un navigateur avec Golang Golang se combine avec JavaScript pour créer des expériences frontales dynamiques. Installez Golang : visitez https://golang.org/doc/install. Configurez un projet Golang : créez un fichier appelé main.go. Utilisation de GorillaWebToolkit : ajoutez le code GorillaWebToolkit pour gérer les requêtes HTTP. Créer un modèle HTML : créez index.html dans le sous-répertoire des modèles, qui est le modèle principal.

Collection d'énigmes de programmation C++ : stimule la réflexion et améliore les compétences en programmation Collection d'énigmes de programmation C++ : stimule la réflexion et améliore les compétences en programmation Jun 01, 2024 pm 10:26 PM

Les énigmes de programmation C++ couvrent les concepts d'algorithme et de structure de données tels que la séquence de Fibonacci, la factorielle, la distance de Hamming, les valeurs maximales et minimales des tableaux, etc. En résolvant ces énigmes, vous pouvez consolider vos connaissances en C++ et améliorer la compréhension des algorithmes et vos compétences en programmation.

Résolution de problèmes avec Python : débloquez des solutions puissantes en tant que codeur débutant Résolution de problèmes avec Python : débloquez des solutions puissantes en tant que codeur débutant Oct 11, 2024 pm 08:58 PM

Python permet aux débutants de résoudre des problèmes. Sa syntaxe conviviale, sa bibliothèque complète et ses fonctionnalités telles que les variables, les instructions conditionnelles et les boucles permettent un développement de code efficace. De la gestion des données au contrôle du flux du programme et à l'exécution de tâches répétitives, Python fournit

La clé du codage : libérer la puissance de Python pour les débutants La clé du codage : libérer la puissance de Python pour les débutants Oct 11, 2024 pm 12:17 PM

Python est un langage d'introduction à la programmation idéal pour les débutants grâce à sa facilité d'apprentissage et ses fonctionnalités puissantes. Ses bases incluent : Variables : utilisées pour stocker des données (nombres, chaînes, listes, etc.). Type de données : Définit le type de données dans la variable (entier, virgule flottante, etc.). Opérateurs : utilisés pour les opérations mathématiques et les comparaisons. Flux de contrôle : contrôlez le flux d'exécution du code (instructions conditionnelles, boucles).

Obtenez des modules Go rapidement et facilement avec Go Get Obtenez des modules Go rapidement et facilement avec Go Get Apr 07, 2024 pm 09:48 PM

Grâce à GoGet, vous pouvez obtenir rapidement et facilement des modules Go. Les étapes sont les suivantes : Exécutez dans le terminal : goget[module-path], où module-path est le chemin du module. GoGet télécharge automatiquement le module et ses dépendances. L'emplacement de l'installation est spécifié par la variable d'environnement GOPATH.

Utilisez le mécanisme d'emballage et de déroulement des erreurs de Golang pour la gestion des erreurs Utilisez le mécanisme d'emballage et de déroulement des erreurs de Golang pour la gestion des erreurs Apr 25, 2024 am 08:15 AM

La gestion des erreurs dans Go inclut les erreurs d’encapsulage et les erreurs de déballage. L'encapsulation des erreurs permet d'encapsuler un type d'erreur avec un autre, fournissant ainsi un contexte plus riche pour l'erreur. Développez les erreurs et parcourez la chaîne d'erreurs imbriquée pour trouver l'erreur de niveau le plus bas pour un débogage facile. En combinant ces deux technologies, les conditions d'erreur peuvent être gérées efficacement, offrant un contexte d'erreur plus riche et de meilleures capacités de débogage.

See all articles