recherche
Maisoninterface Webjs tutorielConversion de type automatique dans le monde réel

Automatic Type Conversion In The Real World

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

Mais que se passe-t-il s'ils ne sont pas de simples valeurs booléennes - et si

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
, ce qui signifie

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 (

), même si les deux sont de fausses valeurs. Il existe des algorithmes assez complexes qui déterminent le fonctionnement des évaluations de l'égalité, et en discuter dépasse le cadre de cet article. Mais si vous êtes intéressé par les détails, vous pouvez consulter l'algorithme de comparaison d'égalité abstrait dans ECMAScript 5.1.

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 comparateur
var 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 valeurs

booléennes, mais ils s'attendent toujours à des valeurs booléennes

, de sorte que la conversion et les calculs se produiront en interne. Si
function 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:

if (foo) {
}

Par conséquent, 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

Les expressions du même type sont également souvent utilisées pour attribuer des attributs d'événements, en trouvant des attributs pris en charge en évaluant chaque possibilité:

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

Cependant, cette expression est également sujette à l'échec, sans connaître la vérité des données. Par exemple, un autre cas d'utilisation courant consiste à définir des valeurs par défaut pour les paramètres facultatifs, mais ce n'est pas bon:

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 -

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: 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.

Principes généraux

La leçon générale tirée de tout cela est simple - réfléchissez à la façon dont les conversions de type affecteront l'évaluation et veillez à ne pas tomber dans les pièges que nous rencontrons. Avec une attention et une attention appropriées, vous pouvez toujours utiliser la conversion de type automatique pour raccourcir les conditions et les expressions logiques, le cas échéant.

Mais cela soulève la question - si nous savons que l'utilisation de

est toujours en sécurité, bien que s'appuyer sur la conversion de type automatique n'est parfois pas sûr - alors pourquoi pas 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.

Mais la vérité est que JavaScript est généralement exécuté sur un réseau public, auquel cas la taille du fichier est importante. Les fichiers plus petits se chargent plus rapidement et utilisent moins de bande passante, et les petits raccourcis de syntaxe peuvent en effet s'accumuler.

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.)

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!

Déclaration
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
Dans les coulisses: quel langage alimente JavaScript?Dans les coulisses: quel langage alimente JavaScript?Apr 28, 2025 am 12:01 AM

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.

L'avenir de Python et Javascript: tendances et prédictionsL'avenir de Python et Javascript: tendances et prédictionsApr 27, 2025 am 12:21 AM

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.

Python vs JavaScript: environnements et outils de développementPython vs JavaScript: environnements et outils de développementApr 26, 2025 am 12:09 AM

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.

JavaScript est-il écrit en C? Examiner les preuvesJavaScript est-il écrit en C? Examiner les preuvesApr 25, 2025 am 12:15 AM

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.

Rôle de JavaScript: rendre le Web interactif et dynamiqueRôle de JavaScript: rendre le Web interactif et dynamiqueApr 24, 2025 am 12:12 AM

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: la connexion expliquéeC et JavaScript: la connexion expliquéeApr 23, 2025 am 12:07 AM

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.

Des sites Web aux applications: les diverses applications de JavaScriptDes sites Web aux applications: les diverses applications de JavaScriptApr 22, 2025 am 12:02 AM

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 vs JavaScript: cas d'utilisation et applications comparéesPython vs JavaScript: cas d'utilisation et applications comparéesApr 21, 2025 am 12:01 AM

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.

See all articles

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

Video Face Swap

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 !

Outils chauds

Listes Sec

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

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

Version Mac de WebStorm

Outils de développement JavaScript utiles

SublimeText3 version Mac

SublimeText3 version Mac

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

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP