Points de base
- La conversion de type automatique de JavaScript est à la fois un avantage et un désavantage dans différentes situations. En tant que fonction principale, il convertit les données en un type attendu lorsqu'un opérateur ou une instruction attend un type de données spécifique.
- Selon le résultat de la conversion, les valeurs JavaScript sont appelées "valeurs vraies" ou "fausses valeurs". Il y a six fausses valeurs:
false
,undefined
,null
,0
,""
,NaN
(chaîne vide) et (non-nombre). Toutes les autres valeurs sont considérées comme vraies. - comment les conversions de type affectent l'évaluation doivent être soigneusement prises en compte pour éviter les pièges. Par exemple, lors de la définition des valeurs par défaut pour les paramètres facultatifs, la vérité des données connues doit être assurée pour empêcher l'échec.
-
typeof
Bien que les tests explicites utilisant sont toujours sûrs, l'utilisation de la conversion de type automatique est bénéfique pour les considérations de taille de fichier, car les fichiers plus petits se chargent plus rapidement et utilisent moins de bande passante. Cependant, comprendre comment les langages de programmation gèrent les conversions de type est crucial pour éviter les résultats inattendus.
Il y a des expressions courantes en JavaScript, mais certains puristes de programmation vous diront qu'ils ne sont jamais une bonne idée. Ce que ces expressions ont en commun, c'est qu'ils s'appuient sur la conversion de type automatique - la fonctionnalité principale de JavaScript, qui est à la fois un avantage et un désavantage en fonction de la situation et de votre point de vue.
Donc, dans cet article, je veux prêter une attention particulière à ces deux expressions et considérer dans quels cas ce sont de bonnes idées et qui ne sont pas de bonnes idées.
if()
La première expression est une condition simple
if (foo) { }
La deuxième expression est une affectation variable avec des valeurs facultatives:
var x = foo || bar;
foo
Si les bar
et foo
dans les deux exemples sont des booléens, l'expression est simple: si foo
est vraie, la première condition passe; à foo
, sinon attribue x
à bar
. x
est un objet, une chaîne ou foo
? Et si undefined
et foo
sont des types de données différents? Pour comprendre comment ces expressions seront calculées, nous devons comprendre comment JavaScript convertit automatiquement entre les types de données. bar
Conversion de type automatique
JavaScript est un langage "dûment tapé", ce qui signifie que chaque fois qu'un opérateur ou une instruction attend un type de données spécifique, JavaScript convertit automatiquement les données en ce type. L'instruction dans le premier exemple s'attend à une valeur booléenne, donc tout ce qui est défini dans les parenthèses sera converti en valeur booléenne. Il en va de même pour les instructions if()
et while()
. do...while()
Selon les résultats de ces conversions (c'est-à-dire vraies ou fausses), les valeurs JavaScript sont souvent appelées "vraies" ou "fausses valeurs". La façon la plus simple de le comprendre est: à moins que la valeur ne soit connue pour être une fausse valeur, la valeur est la vraie valeur;
(bien sûr!)-
false
-
undefined
-
null
(nombre zéro) -
0
(chaîne vide) -
""
(non-nombre) -
NaN
Les exceptions notables sont "0" (chaîne zéro) et tous les types d'objets - ce sont de vraies valeurs - cela inclut tous les constructeurs natifs
Résultats de calcul vrai! (Un peu déroutant, mais en pratique, vous n'avez jamais besoin de créer des valeurs indigènes comme ça.)
new Boolean(false)
Remarque: La comparaison de deux fausses valeurs ne produit pas toujours les résultats auxquels vous pouvez vous attendre, comme (
null != false
raccourci conditionnel
l'exemple que je vous ai montré au début convertit son expression en valeur booléenne, car l'objet est toujours évalué en vrai et
est évalué en faux, nous pouvons donc utiliser une telle condition pour tester le DOM L'existence de l'élément:
if()
null
Cela fonctionne toujours de manière fiable lors du traitement des éléments DOM, car la spécification DOM nécessite que les éléments qui n'existent pas de retour
if (foo) { }
Cependant, d'autres situations ne sont pas si claires, comme cet exemple: null
De telles conditions sont souvent utilisées pour indiquer
"Si le paramètre FOO est défini"var x = foo || bar;, mais il existe plusieurs situations qui peuvent provoquer une défaillance - c'est-à-dire que
est une fausse valeur. Ainsi, par exemple, s'il s'agit d'une valeur booléenne ou d'une chaîne vide, le code conditionnel n'est pas exécuté même si foo
est déjà false
défini. foo
Ce que nous voulons, c'est le suivant:
Le type de données des paramètres non définis (et autres variables) est "
". Par conséquent, nous pouvons utiliser le comparateurvar element = document.getElementById("whatever"); if (element) { // 元素存在 } else { // 元素不存在 }pour tester le type de données du paramètre, puis si
est entièrement défini, la condition passera toujours. Bien sûr, l'expression undefined
calcule toujours la valeur booléenne, mais la valeur booléenne qu'il calcule est le résultat typeof
de l'expression foo
. if()
typeof
Raccourci d'affectation
Le deuxième exemple que je vous ai montré au début utilise un opérateur logique pour déterminer lequel des deux valeurs doit être attribué à la variable:
Les opérateurs logiques ne renvoient pas les valeursbooléennes, mais ils s'attendent toujours à des valeurs booléennes
, de sorte que la conversion et les calculs se produiront en interne. Sifunction doStuff(foo) { if (foo) { ... } }est évalué à vrai, la valeur
de est renvoyée, sinon la valeur de est renvoyée. C'est très utile. Cette expression est généralement observée dans les gestionnaires d'événements et est utilisée pour définir les paramètres de l'événement basés sur des modèles pris en charge: Par conséquent,
).
cas non définis et cas où il est défini à tort comme des valeurs non corrigées. Dans ce cas, nous permettons également aux chaînes vides comme entrée valide, mais si nous voulons exclure les chaînes vides, nous devons ajouter une deuxième condition:
Principes généraux
est toujours en sécurité, bien que s'appuyer sur la conversion de type automatique n'est parfois pas sûr - alors pourquoi pas L'utilisation d'expressions plus courtes n'est pas une optimisation elle-même, ce n'est qu'un style de programmation, qui utilise pleinement les fonctionnalités linguistiques. (La section FAQ dans le texte d'origine est omise ici parce que le contenu de cette partie est faiblement lié au sujet de l'article et est plus long, il ne convient donc pas à la conservation des travaux pseudo-originaux.) if (foo) {
}
e
est calculé comme une valeur booléenne, qui est vraie (objet d'événement) si le modèle de paramètre de l'événement est pris en charge, sinon une fausse valeur (undefined
); Sinon, retournez e
. window.event
var x = foo || bar;
Par conséquent, chacune de ces références est évaluée à son tour (de gauche à droite) et le premier calcul est vrai sera retourné. Le premier cas gère le modèle standard, le deuxième cas est pour Internet Explorer et le troisième cas est pour Internet Explorer, lorsqu'un événement peut être déclenché sur un objet de fenêtre (sans la propriété srcElement
var element = document.getElementById("whatever");
if (element) {
// 元素存在
} else {
// 元素不存在
}
Maintenant, si vous êtes sûr que foo
est toujours ou , et si la chaîne vide doit être traitée comme undefined
, l'expression est sûre. Mais si ce n'est pas le cas, il doit être redéfini comme un contenu plus précis, par exemple: undefined
function doStuff(foo) {
if (foo) {
...
}
}
En testant le type contre "String", nous pouvons gérer une variété de cas - foo
function doStuff(foo) {
if (typeof foo != "undefined") {
...
}
}
Il existe d'autres situations étonnamment subtiles qui peuvent causer des problèmes. Par exemple, nous pourrions avoir une fonction de date qui crée un horodatage UNIX à moins que l'horodatage d'entrée ne soit éventuellement défini: var x = foo || bar;
Si l'entrée est 0, elle échouera - car zéro est une fausse valeur, mais c'est aussi un horodatage valide. typeof
toujours est clair? Bien sûr, si la raison de préférer une grammaire plus courte est simplement parce qu'elle tape plus rapidement, alors c'est une raison paresseuse et bâclée.
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!

JavaScript s'exécute dans les navigateurs et les environnements Node.js et s'appuie sur le moteur JavaScript pour analyser et exécuter du code. 1) Générer une arborescence de syntaxe abstraite (AST) au stade d'analyse; 2) Convertir AST en bytecode ou code machine à l'étape de compilation; 3) Exécutez le code compilé à l'étape d'exécution.

Les tendances futures de Python et JavaScript incluent: 1. Python consolidera sa position dans les domaines de l'informatique scientifique et de l'IA, 2. JavaScript favorisera le développement de la technologie Web, 3. Le développement de plate-forme multiplié deviendra un sujet brûlant, et 4. L'optimisation des performances sera le focus. Les deux continueront d'étendre les scénarios d'application dans leurs champs respectifs et de faire plus de percées dans les performances.

Les choix de Python et JavaScript dans les environnements de développement sont importants. 1) L'environnement de développement de Python comprend Pycharm, Jupyternotebook et Anaconda, qui conviennent à la science des données et au prototypage rapide. 2) L'environnement de développement de JavaScript comprend Node.js, VScode et WebPack, qui conviennent au développement frontal et back-end. Le choix des bons outils en fonction des besoins du projet peut améliorer l'efficacité du développement et le taux de réussite du projet.

Oui, le noyau du moteur de JavaScript est écrit en C. 1) Le langage C fournit des performances efficaces et un contrôle sous-jacent, qui convient au développement du moteur JavaScript. 2) Prendre le moteur V8 comme exemple, son noyau est écrit en C, combinant l'efficacité et les caractéristiques orientées objet de C. 3) Le principe de travail du moteur JavaScript comprend l'analyse, la compilation et l'exécution, et le langage C joue un rôle clé dans ces processus.

JavaScript est au cœur des sites Web modernes car il améliore l'interactivité et la dynamicité des pages Web. 1) Il permet de modifier le contenu sans rafraîchir la page, 2) manipuler les pages Web via Domapi, 3) prendre en charge les effets interactifs complexes tels que l'animation et le glisser-déposer, 4) Optimiser les performances et les meilleures pratiques pour améliorer l'expérience utilisateur.

C et JavaScript réalisent l'interopérabilité via WebAssembly. 1) Le code C est compilé dans le module WebAssembly et introduit dans un environnement JavaScript pour améliorer la puissance de calcul. 2) Dans le développement de jeux, C gère les moteurs de physique et le rendu graphique, et JavaScript est responsable de la logique du jeu et de l'interface utilisateur.

JavaScript est largement utilisé dans les sites Web, les applications mobiles, les applications de bureau et la programmation côté serveur. 1) Dans le développement de sites Web, JavaScript exploite DOM avec HTML et CSS pour réaliser des effets dynamiques et prend en charge des cadres tels que JQuery et React. 2) Grâce à la réactnative et ionique, JavaScript est utilisé pour développer des applications mobiles multiplateformes. 3) Le cadre électronique permet à JavaScript de créer des applications de bureau. 4) Node.js permet à JavaScript d'exécuter le côté du serveur et prend en charge les demandes simultanées élevées.

Python est plus adapté à la science et à l'automatisation des données, tandis que JavaScript est plus adapté au développement frontal et complet. 1. Python fonctionne bien dans la science des données et l'apprentissage automatique, en utilisant des bibliothèques telles que Numpy et Pandas pour le traitement et la modélisation des données. 2. Python est concis et efficace dans l'automatisation et les scripts. 3. JavaScript est indispensable dans le développement frontal et est utilisé pour créer des pages Web dynamiques et des applications à une seule page. 4. JavaScript joue un rôle dans le développement back-end via Node.js et prend en charge le développement complet de la pile.


Outils d'IA chauds

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

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

Undress AI Tool
Images de déshabillage gratuites

Clothoff.io
Dissolvant de vêtements AI

Video Face Swap
Échangez les visages dans n'importe quelle vidéo sans effort grâce à notre outil d'échange de visage AI entièrement gratuit !

Article chaud

Outils chauds

Listes Sec
SecLists est le compagnon ultime du testeur de sécurité. Il s'agit d'une collection de différents types de listes fréquemment utilisées lors des évaluations de sécurité, le tout en un seul endroit. SecLists contribue à rendre les tests de sécurité plus efficaces et productifs en fournissant facilement toutes les listes dont un testeur de sécurité pourrait avoir besoin. Les types de listes incluent les noms d'utilisateur, les mots de passe, les URL, les charges utiles floues, les modèles de données sensibles, les shells Web, etc. Le testeur peut simplement extraire ce référentiel sur une nouvelle machine de test et il aura accès à tous les types de listes dont il a besoin.

mPDF
mPDF est une bibliothèque PHP qui peut générer des fichiers PDF à partir de HTML encodé en UTF-8. L'auteur original, Ian Back, a écrit mPDF pour générer des fichiers PDF « à la volée » depuis son site Web et gérer différentes langues. Il est plus lent et produit des fichiers plus volumineux lors de l'utilisation de polices Unicode que les scripts originaux comme HTML2FPDF, mais prend en charge les styles CSS, etc. et présente de nombreuses améliorations. Prend en charge presque toutes les langues, y compris RTL (arabe et hébreu) et CJK (chinois, japonais et coréen). Prend en charge les éléments imbriqués au niveau du bloc (tels que P, DIV),

Version Mac de WebStorm
Outils de développement JavaScript utiles

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

Envoyer Studio 13.0.1
Puissant environnement de développement intégré PHP
