Maison > Article > interface Web > Introduction à la programmation avancée JavaScript
Préface :
Il m'a fallu environ une semaine pour lire attentivement la moitié de ce livre, ci-dessous. les notes de lecture que j'ai prises, j'espère qu'elles pourront donner aux personnes qui liront ce livre une référence approximative. C'est peut-être un peu brouillon et pas complet pour le moment, je vais le trier et l'ajouter plus tard. (2017-7-17)
3.1.Grammaire
Sensible à la casse
Identifiant(Il est recommandé d'utiliser un étui camelmyCar)
Commentaire // /**/
Strict mode (use strict)
déclaration recommande var diff-a-b; d'utiliser le point-virgule et if( test ) { alert (test); >Utiliser également {}
3.2 Mots clés et mots réservés
3.3 Variable
Non initialiséundefined var message = "hi"; message = 100; Le type peut être modifié à volonté
Function test(){ Var a = “hi”; 局部 b = “hi”; 全局 }
Test(); alert(a); Erreur alert(b); salut
3.4 Type de données
typeof
Non défini (défini mais non attribué)
Null(pointeur d'objet nul)
Booléen(Valeur booléennevrai faux L'instruction de contrôle de flux exécutera automatiquement l'instruction correspondante booléen Convertir)
Nombre
(Octal0 Décimal dix Hexadécimal0x Plage de valeurs à virgule flottanteNaN Conversion numériqueNumber parseInt )
String(String, aucune différence entre les guillemets simples et doubles, séquence d'échappement, caractéristiques de la chaîne, toString String)
Object(Object La base de tous les objets var o = new Object();)
fonction dans ES est un objet, pas un type de données.
3.5Opérateur
Opérateur unaire ++ -- , + -( peut être utilisé pour convertir les types de données )
opérateurs de bits Bitwise NOT~num1 Bitwise AND& Bitwise ORBitwise XOR^ Maj vers la gauche<< Maj vers la droite>> Maj vers la droite non signé >>
Opérateur booléen ! && || Opérateur multiplicatif* / % Opérateur additif+ - Opérateur relationnel < 🎜>Opérateur conditionnel ? :
Opérateur d'affectation = *= /= %= += -= <<= >>= >> ;=
Opérateur virgule
3.6
Déclaration
3.7
Fonctionarguments Pas de surcharge
Chapitre 4 Variables, portée et problèmes de mémoire
)
Copier les valeurs des variables (Les types de base sont différents Space, le type de référence fait référence au même espace )
passer les paramètres (le même)
Type de détection (type d'instance de)
4.2Environnement et portée d'exécution
Chaîne de portée Étendre la chaîne de portée(essayez-catch avec) Aucune portée au niveau du bloc(si pour Déclarer l'identifiant de requête variable )
4.3Collecte des déchets
Stratégie(Marquer le nombre de références claires ) Problèmes de performances dans la gestion de la mémoire
Objet 5.1Type
Var person = {};(convient pour transmettre un grand nombre de paramètres aux fonctions) var parson = new Object();
Personne["nom"](Lorsque vous utilisez des variables pour représenter des attributs, utilisez ) person.name(Recommandé)
5.2 Array Type
Var couleurs = new Array(); var couleurs = Array(); var couleurs =[*****];
Colors[*] = *****; colours.length
Détecter le tableau : instanceof Array.isArray()
Méthode de conversion : toString() valueOf() toLocaleString() join()
Méthode Stack : push() pop()
Méthodes de file d'attente : shift() unshift()
Méthode de réorganisation : reverse() sort(Vous pouvez ajouter le paramètre de la fonction de comparaison )
Méthode de fonctionnement : concat()La modification originale est ajoutée slice()La modification originale est le segment intercepté Méthode de position :
indexOf() lastIndexOf()Renvoyer la position de l'élément
Itératif méthode :
every() filter() forEach() map() some()Chaque élément est traité, mais le tableau d'origine ne changera pas
Méthode de fusion :
reduce()Ordre
reduceRight()Ordre inverse pour les deux éléments 5.3 Date tapez
Nouvelle date() à l'intérieur
parse(
"25 mai 2004") UTC(2005,0) Date.now()Méthode héritée :
toLocaleString( ) toString() valueOf()Méthode de formatage de la date :
toDateString() toTimeString() toLocaleDateString() toLocaleTimeString() toUTCString()Date
/Méthode de la composante temporelle : trop de lectures spécifiques
5.4RegExpType
Littéral
var pattern1 = / [bc]at / i;Constructeur
var pattern2 = new RegExp(" [bc]at ", " i ”);RegExpAttribut d'instance
global ignoreCase lastIndex source multiligne
C'est inutile
RegExpMéthode d'instance : exec() Capture d'un groupe(Capture de plusieurs ensembles de correspondances) text() Vérifiez si cela correspond à un moment donné. Limitations du mode
: Manque de fonctionnalités avancées d'expression régulière prises en charge par certains langages (Perl)
, mais dans la plupart des cas Assez5.5 Fonction type La fonction est un objet
( est égalementFonction Instances de ), le nom de la fonction est un pointeur. fonction somme(num1,num2) { }
Var somme = fonction(num1,num2){ };
Il n'y a pas de surcharge : la fonction est un objet et le nom de la fonction est un pointeur.
Déclaration de fonction et expression de fonction :
fonction *******
Promotion de la déclaration de fonction var sum = ** * ****ne favorisera pas Propriétés internes de la fonction : arguments
Objet (attributappelé pointe vers la fonction) cetobjet( Pointe vers l' objet d'environnement qui exécute la fonction ) attribut appelant ( pointe vers la fonction qui appelle la fonction actuelle, s'il s'agit d'un global fonction scope, la valeur est null) Attributs et méthodes de la fonction :
Attributs
(longueurParamètres de déclaration Numéro
prototypeHérité) Méthode non héritée :
call( ) apply() bind()a.apply( b, c); a.call( b, d );
Exécutez la fonction a dans l'objet environnementb
, etpassez les paramètres à a d'ailleurs c( argument ou tableau ) / d( écrire chaque élément out ) Var a = b.bind(c);
a
est dans le c objet d'environnement Fonction en cours d'exécution5.6Type de wrapper de base :
BooleanType :
var booleanObject = new Boolean(true); Il est recommandé de ne jamais utiliserBoolean objets.
Numéro
Type : var numberObject = new Number(10); ) toExponential() toPrecision()Il est également recommandé de ne pas instancier directement le type Number
.Chaîne
Type : var stringObject = new String(« hello world »); 🎜>Attributs
1.Méthode Character : charAt() ou string[] renvoie le caractère correspondant charCodeAt() Renvoyer l'encodage de caractères correspondant
2. Méthode d'opération de chaîne :
concat() ou + ressemble à l'opérateur concat()
Slice() substring() substr()Chaîne d'interception, trois sont très flexibles
3.Méthode de position de chaîne : indexOf( ) La méthode lastIndexOf()
4.trim()supprime tous les espaces dans le préfixe et le suffixe trimLeft() trimRight()
5. Méthode de conversion de casse de chaîne toLowerCase() toUpperCase()Méthode classique
toLocaleLowerCase() toLocaleUpperCase()Régions spécifiques C'est plus fiable
Méthode de correspondance de modèle de chaîne match()est essentiellement le même que RegExp exec() qui renvoie la chaîne correspondant à Array
search()Renvoie l'index de la première correspondance sinon renvoie -1
replase()Faites correspondre et remplacez la chaîne
split()Faites correspondre le séparateur pour générer un tableau
7.localeCompare()Comparer deux chaînes
8.fromCharCode()Méthode statique Encoder plusieurs caractères Devenir une chaîne
9. Méthode HTMLPar exemple, big() string >5.7 Objet intégré unique
1.GlobalObjet
URLMéthode d'encodage :
encodeURI() L'ensemble
encodeURIComponent()
un encodage d'un paragraphe decodeURI() l'intégralité du
decodeURIComponent()
décodage d'un certain paragraphe La méthode eval() est très puissante et très dangereuse
ECMAScript
Parser Global Propriétés de l'objet
non définies
, Array...... sont toutes des propriétés Web implémente l'objet global dans le cadre de l'objet
window2.Math object
Mathpropriétés de l'objet Certaines valeurs spéciales telles que π
min() max( )Méthode
Méthode d'arrondi : convertir une valeur décimale en entier
Math.ceil(25) Avant un Math.floor(25) Retour un Math.round(25) Arrondi
random() méthode [0,1) Nombre aléatoire entre
Autres méthodes Lire trop
6.1Comprendre les objets
6.1.1Type d'attribut :
Attribut de données : 4 attributs
Propriété accesseur : ne contient pas de valeur de données 4 propriétés définies via Object.defineProperty()
6.1.2Définir plusieurs propriétés : Object.defineProperties() peut être un attribut de données ou un attribut d'accesseur.
6.1.3Caractéristiques de lecture des propriétés : Object.getOwnPropertyDescriptor()
6.2Création d'objets
6.2.1Modèle d'usine( Lecture )
6.2.2Modèle de constructeur(Lecture nouveau constructeur)
6.2.3Modèle de prototype :
1. Comprendre les objets prototypes
2.Prototype et inopérateur( en for-in )
3.Syntaxe du prototype plus simple(Littéral d'objet pour accéder aux objets)
4.Le caractère dynamique du prototype( Le prototype peut être remplacé par un autre objet, mais il sera invalide pour l'instance déjà créée)
5.Prototype d'objet natif( consiste à utiliser le mode prototype, vous pouvez y définir de nouvelles méthodes, mais ce n'est pas recommandé)
6. Problème avec les objets prototypes : il n'y a aucun attribut appartenant à l'instance elle-même
6.2.4Utilisation du modèle constructeur et du modèle prototype en combinaison
Le modèle le plus courant, les instances ont leurs propres propriétés et méthodes, et certaines sont partagées.
6.2.5Mode prototype dynamique
Ajoutez une déclaration de jugement au modèle ci-dessus pour modifier dynamiquement le prototype Ajouter méthode.
6.2.6Modèle de constructeur parasite
La seule différence entre le modèle d'usine et le modèle d'usine en est unnouveau, et il a plusieurs retour. L'objet renvoyé n'a rien à voir avec le constructeur, donc l'opérateur instanceof ne peut pas être utilisé pour déterminer le type d'objet. Non recommandé.
6.2.7Bien sûr, le modèle de constructeur
est similaire au modèle de constructeur parasite, mais sans l'utilisation de ce et nouveau. instanceof ne peut pas non plus être détectée
6.3Hérité
6.3.1Chaîne de prototypes Mécanisme de recherche de prototypes
1.N'oubliez pas le prototype par défaut : celui par défaut pour toutes les fonctions Les prototypes sont tous des instances de Object.
2.Déterminez la relation entre le prototype et l'instance : instanceof isPrototypeOf()
3. Définir des méthodes : de nouvelles méthodes doivent être définies une fois que l'instance a remplacé le prototype.
4. Problème de chaîne du prototype :
Les attributs extérieurs au prototype sont également hérités
Quand en créant une instance d'un sous-type, les paramètres ne peuvent pas être transmis au constructeur du supertype.
est rarement utilisé seul.
6.3.2Utilisez le constructeur emprunté pour utiliser appel ou appliquer Héritez et transmettez les paramètres mais utilisez uniquement le modèle de constructeur.
est également rarement utilisé seul.
6.3.3Héritage combiné
Implémentation de la chaîne de prototypes Attributs du prototype et Héritage de méthodes
Emprunt de constructeurs pour implémenter Héritage de propriétés d'instance
La méthode d'héritage la plus couramment utilisée
6.3.4Héritage prototypique(Lecture)
Le constructeur n'est pas utilisé Les types conservés peuvent être utilisés, mais ils partageront des attributs de type référence comme le mode prototype.
6.3.5Héritage parasitaire(Lecture)
Le constructeur n'est pas pris en compte Peut être utilisé Mais la réutilisation des fonctions ne peut pas être réalisée
6.3.6Héritage combinatoire parasitaire(Lecture)
Problème de composition héritage : le constructeur du supertype est appelé deux fois, ce qui entraîne des propriétés en double dans l'instance et le prototype.
L'héritage combiné parasite résout ce problème et devient le paradigme d'héritage le plus idéal.
Comment définir des fonctions :
Déclaration de fonction(La déclaration de fonction est promue avec nom)
Expression de fonction( nom est une fonction anonyme vide/Les expressions de fonction générales nommées sont des fonctions anonymes)
7.1Récursion
Le mode strict ne peut pas être utilisé arguments.callee Vous pouvez utiliser des expressions de fonction nommées.
7.2Fermeture : Une fonction qui a accès à une variable dans la portée d'une autre fonction
Auto-résumé : les fermetures sont des fonctions, des fonctions généralement anonymes sont utilisées
1 Les fermetures peuvent accéder aux variables dans les fonctions externes renvoyées.
2.L'objet actif d'une autre fonction sera sauvegardé jusqu'à ce que la chaîne de portée de la fermeture soit détruite.
7.2.1Fermetures et variables
Effets secondaires : les fermetures sont enregistrées sur la chaîne de portée est l'objet variable entier, donc la variable renvoyée est la dernière valeur enregistrée.
Par exemple, dans la boucle for, des situations insatisfaisantes se produiront.
7.2.2À propos decetObjet
L'objet this dans la fermeture. La fermeture peut être placée sur l'objet global dans certains cas particuliers, afin que this change automatiquement. .
7.2.3Fuite de mémoire
Utilisez des fermetures pour assurer un recyclage normal de la mémoire
7.3Imiter la portée au niveau du bloc
Utiliser une fonction auto-exécutable anonyme pour imiter.
Fonction d'auto-résumé :
1.Elle sera détruite après exécution interne.
2.Les fonctions anonymes auto-exécutables peuvent réduire la pollution des méthodes et propriétés globales.
La fermeture a un problème de mémoire, et il est très confortable d'utiliser cette combinaison.
7.4Variables privées
Tout sur l'objet est public Tout dans la fonction est privé
Créer la méthode publique de la fonction par fermeture(Méthode privilégiée) --------- est utilisé pour obtenir des variables privées
créées dans le constructeur 🎜>this.****** = function(){ **** }; Mais chaque instanciation reconstruira un ensemble de méthodes, ce qui est un gaspillage.
7.4.1Variables privées statiques Si une instance ne possède pas ses propres propriétés privées
utiliser statiquement la
portée privée
construction globale par fermeture Créer des méthodes privilégiées à l'intérieur du prototype de la fonction.
Améliore la réutilisabilité du code, mais chaque instance n'a pas ses propres variables privées. (Parce que cela s'appelle une variable privée statique )
Utilisez des variables d'instance ou des variables privées statiques, selon les besoins spécifiques .
7.4.2Mode module Littéral Un objet d'instance
Créer un objet privé variables et méthodes privilégiées pour un singleton(
Singleton : un objet avec une seule instance) Définir des variables et des méthodes privées à l'intérieur la fonction anonyme, puis utilisez un objet littéral comme valeur de retour de la fonction.
7.4.3
Mode module améliorédoit être une instance d'un certain type , certaines propriétés ou méthodes doivent également être ajoutées.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!