Table des matières
Stranger Things
Quand un nombre devient une chaîne
Quelle est la signification de [object Object] en JavaScript ?
等于还是不等于?
Maison interface Web js tutoriel Introduction à la conversion de type forcée en JavaScript

Introduction à la conversion de type forcée en JavaScript

Apr 12, 2019 am 10:55 AM
javascript 前端 类型转换

Cet article vous apporte une introduction à la méthode de conversion de type forcée en JavaScript. Il a une certaine valeur de référence. Les amis dans le besoin peuvent s'y référer.

JavaScript Primitives

JavaScript est construit sur une série d'unités de base. Certains d'entre eux devraient déjà vous être familiers, comme les chaînes et les nombres :

var greet = "Hello";
var year = 89;
Copier après la connexion
Copier après la connexion

Les chaînes et les nombres font partie des soi-disant "primitives du langage". La liste complète est :

  • String
  • Number
  • Boolean
  • Null
  • Undefined
  • Object
  • Symbole (ajouté dans ES6, non présenté ici)

Les valeurs booléennes sont utilisées pour représenter des valeurs qui peuvent être vraies ou fausses. null n'est intentionnellement pas attribué. Il est généralement attribué à une variable pour indiquer que la liaison est terminée et sera remplie d'un contenu significatif plus tard.

var maybe = null;
Copier après la connexion

puis undefined, ce qui signifie que la variable n'est toujours pas attachée :

var name;
console.log(name)
undefined
Copier après la connexion

null et undefined se ressemblent beaucoup, mais ce sont deux entités distinctes , et de nombreux développeurs ne savent toujours pas lequel utiliser.

Si vous souhaitez déterminer le type d'une instance JavaScript, vous pouvez utiliser l'opérateur typeof. Essayons avec des chaînes :

typeof "alex"
> "string"
Copier après la connexion

Et avec des nombres :

typeof 9
> "number"
Copier après la connexion

Pour les booléens :

typeof false
> "boolean"
Copier après la connexion

undefined :

typeof undefined
> "undefined"
Copier après la connexion

et nul :

typeof null
> "object"
Copier après la connexion

Le résultat est surprenant ! null ressemble à un objet, mais il s'agit en fait d'un bug historique de JavaScript qui existe depuis la naissance du langage. JavaScript a eu une mauvaise réputation à cause de ces problèmes. Mais ce n'est que le début.

Stranger Things

En JavaScript, il existe des règles étranges lors de la conversion entre deux types. Permettez-moi de vous donner quelques informations générales. Donnons d'abord un exemple utilisant Python. L'exécution de la commande suivante en Python :

'hello' + 89
Copier après la connexion
Copier après la connexion
Copier après la connexion

vous donnera une erreur claire :

TypeError: can only concatenate str (**not** "int") to str
Copier après la connexion

En JavaScript, il n'y a pas de limite :

'hello' + 89
Copier après la connexion
Copier après la connexion
Copier après la connexion

donne en fait :

"hello89"
Copier après la connexion
Copier après la connexion

Cela aura l'air encore plus bizarre si nous essayons d'ajouter un tableau à la chaîne :

'hello' + []
Copier après la connexion

obtiendra

1. 'hello'
Copier après la connexion

Aussi

1. 'hello' + [89]
Copier après la connexion

vous surprendra :

1. "hello89"
Copier après la connexion

On dirait qu'il y a une certaine logique derrière ce changement. Cela fonctionne même pour les tableaux où il y a plus d'éléments :

1. 'hello' + [89, 150.156, 'mike']
Copier après la connexion

résultant en :

1. "hello89,150.156,mike"
Copier après la connexion

Ces deux lignes de JavaScript suffisent à faire fuir les programmeurs Java. Mais ce comportement est logique à 100% en JavaScript. Par conséquent, cette conversion implicite, également connue sous le nom de cast mérite d'être explorée.

Quand un nombre devient une chaîne

Certains langages de programmation ont un concept appelé Conversion de type, ce qui signifie : Si je veux convertir un nombre ou une instance en un autre tapez, alors je dois faire conversion explicite en . Cela fonctionne également avec JavaScript. Voir l'exemple suivant :

var greet = "Hello";
var year = 89;
Copier après la connexion
Copier après la connexion

Si je souhaite rendre la conversion explicite, je peux indiquer l'intention dans le code :

var greet = "Hello";
var year = 89;

var yearString = year.toString()
Copier après la connexion

Ou faire ceci :

var greet = "Hello";
var year = 89;

var yearString = String(year)
Copier après la connexion

Je peux alors concaténer les deux variables :

greet + yearString;
Copier après la connexion

Mais en JavaScript il existe un mécanisme subtil appelé conversion implicite, fourni par le moteur JavaScript. Le langage ne nous empêche pas d'ajouter des nombres et des chaînes :

'hello' + 89
Copier après la connexion
Copier après la connexion
Copier après la connexion

obtiendrait :

"hello89"
Copier après la connexion
Copier après la connexion

Mais quelle est la logique derrière cette conversion ? Vous serez peut-être surpris de savoir que l'opérateur d'addition en JavaScript + convertit automatiquement l'un de ses deux opérandes en chaîne si au moins l'un d'eux est une chaîne  !

Ce que vous trouverez encore plus surprenant, c'est que cette règle est cohérente dans la spécification ECMAScript. La section 11.6.1 définit le comportement de l'opérateur d'addition, je l'ai résumé pour vous ici :

Si x est une chaîne ou y est une chaîne, retournez ToString(x), puis retournez ToString(y)

Cette astuce ne fonctionne-t-elle qu'avec des chiffres ? Pas vraiment. Les tableaux et les objets seront également soumis à la même conversion  :

'hello' + [89, 150.156, 'mike']
Copier après la connexion

obtiendront :

"hello89,150.156,mike"
Copier après la connexion

Alors, qu'obtiendra le code suivant :

'hello' + { name: "Jacopo" }
Copier après la connexion

Pour le savoir, vous pouvez faire un test rapide en convertissant l'objet en chaîne :

String({ name: "Jacopo" })
Copier après la connexion

obtiendra :

"[object Object]"
Copier après la connexion

Donc j'ai un sentiment :

1. 'hello' + { name: "Jacopo" }
Copier après la connexion

Obtiendra :

1. "hello[object Object]"
Copier après la connexion

Arrêtez ça ! Qu'est-ce que c'est?

Quelle est la signification de [object Object] en JavaScript ?

« [object Object] » est l’une des « bizarreries » JavaScript les plus courantes.

Presque toutes les instances JavaScript ont une méthode nommée toString(), et certaines méthodes sont fournies par Object.prototype.toString.
Certains types, tels que les tableaux, implémentent une version personnalisée de toString() pour convertir la valeur en chaîne lorsque la méthode est appelée. Par exemple, Array.prototype.toString remplace Object.toString() (également connu sous le nom d'observation de méthode).

但是当你在普通的 JavaScript 对象上调用 toString() 时,引擎会给出“[object Object]”,因为 Object.toString()默认行为是由实体类型(在这种情况下为Object)返回字符串 object

现在让我们把注意力集中在 JavaScript 比较运算符上,它们与算术运算符一样奇怪。

等于还是不等于?

JavaScript 中有两个主要的比较运算符。

第一个我们称之为“弱比较”。这是抽象比较运算符(双等号):==

另一个是“强比较”,可以通过三等号进行识别:=== 也称为严格比较运算符。它们两者的行为方式完全不同。

来看一些例子。首先,如果我们将两个字符串与两个运算符进行比较,我们得到相同的结果

"hello" == "hello"
> true

"hello" === "hello"
> true
Copier après la connexion

看上去一切都还好。

现在尝试比较两种不同的类型,数字和字符串。首先是“强比较”:

1. "1" === 1
2. false
Copier après la connexion

这说得通!字符串“1”与数字1是不同的。但是“弱比较”会发生什么?

1. "1" == 1
2. true
Copier après la connexion

居然是true!它没有任何意义,除非这种行为与我们之前看到的隐式转换有关。

如果适用相同的规则怎么办?没错! ECMAScript spec 再次罢工。结果抽象比较运算符在比较它们之前在类型之间进行自动转换。这是规范的摘要:

比较 x == y 执行如下:

如果 x 是 String 且 y 是Number,则返回比较结果 ToNumber(x)== y

规范说:如果第一个操作数是一个字符串,第二个操作数是一个数字,那么将第一个操作数转换为数字。有趣。

JavaScript 规范充满了这个疯狂的规则,我强烈鼓励大家对它深入挖掘。

在此期间除非你有充分的理由否则在 JavaScript 代码中避免使用抽象比较运算符。你以后会感谢自己的。

那么“强势比较”怎么样?规范中的说 严格相等比较在把值与三等 === 进行比较之前没有进行自动转换。在代码中使用严格相等比较可以避免愚蠢的 bug。

总结

JavaScript 中有七个构建块,即 StringNumberBooleanNullUndefinedObjectSymbol。这些类型被称为基元

JavaScript 开发人员可以使用算术和比较运算符来操作这些类型。但是我们要特别注意加法运算符 +抽象比较运算符 ==,它本质上倾向于在类型之间进行转换。

JavaScript 中的隐式转换称为强制类型转换,并在 ECMAScript 规范中定义。无论什么时候你的代码都要使用严格的比较运算符 === 而不是 ==

作为最佳实践,当你打算在两种类型之间进行转换时,请务必明确操作。JavaScript 有一堆内置对象,它们反映了原始类型:StringNumberBoolean。这些内置类型可用于在不同类型之间进行显式转换。

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

PHP et Vue : une combinaison parfaite d'outils de développement front-end PHP et Vue : une combinaison parfaite d'outils de développement front-end Mar 16, 2024 pm 12:09 PM

PHP et Vue : une combinaison parfaite d'outils de développement front-end À l'ère actuelle de développement rapide d'Internet, le développement front-end est devenu de plus en plus important. Alors que les utilisateurs ont des exigences de plus en plus élevées en matière d’expérience des sites Web et des applications, les développeurs front-end doivent utiliser des outils plus efficaces et plus flexibles pour créer des interfaces réactives et interactives. En tant que deux technologies importantes dans le domaine du développement front-end, PHP et Vue.js peuvent être considérés comme une arme parfaite lorsqu'ils sont associés. Cet article explorera la combinaison de PHP et Vue, ainsi que des exemples de code détaillés pour aider les lecteurs à mieux comprendre et appliquer ces deux éléments.

Questions fréquemment posées par les enquêteurs front-end Questions fréquemment posées par les enquêteurs front-end Mar 19, 2024 pm 02:24 PM

Lors des entretiens de développement front-end, les questions courantes couvrent un large éventail de sujets, notamment les bases HTML/CSS, les bases JavaScript, les frameworks et les bibliothèques, l'expérience du projet, les algorithmes et les structures de données, l'optimisation des performances, les requêtes inter-domaines, l'ingénierie front-end, les modèles de conception et les nouvelles technologies et tendances. Les questions de l'intervieweur sont conçues pour évaluer les compétences techniques du candidat, son expérience en matière de projet et sa compréhension des tendances du secteur. Par conséquent, les candidats doivent être parfaitement préparés dans ces domaines pour démontrer leurs capacités et leur expertise.

Conversion de type de la fonction golang Conversion de type de la fonction golang Apr 19, 2024 pm 05:33 PM

La conversion de type en fonction permet de convertir les données d'un type en un autre type, étendant ainsi la fonctionnalité de la fonction. Utilisez la syntaxe : type_name:=variable.(type). Par exemple, vous pouvez utiliser la fonction strconv.Atoi pour convertir une chaîne en nombre et gérer les erreurs si la conversion échoue.

Tutoriel JavaScript simple : Comment obtenir le code d'état HTTP Tutoriel JavaScript simple : Comment obtenir le code d'état HTTP Jan 05, 2024 pm 06:08 PM

Tutoriel JavaScript : Comment obtenir le code d'état HTTP, des exemples de code spécifiques sont requis Préface : Dans le développement Web, l'interaction des données avec le serveur est souvent impliquée. Lors de la communication avec le serveur, nous devons souvent obtenir le code d'état HTTP renvoyé pour déterminer si l'opération a réussi et effectuer le traitement correspondant en fonction de différents codes d'état. Cet article vous apprendra comment utiliser JavaScript pour obtenir des codes d'état HTTP et fournira quelques exemples de codes pratiques. Utilisation de XMLHttpRequest

Django est-il front-end ou back-end ? Vérifiez-le! Django est-il front-end ou back-end ? Vérifiez-le! Jan 19, 2024 am 08:37 AM

Django est un framework d'application Web écrit en Python qui met l'accent sur un développement rapide et des méthodes propres. Bien que Django soit un framework Web, pour répondre à la question de savoir si Django est un front-end ou un back-end, vous devez avoir une compréhension approfondie des concepts de front-end et de back-end. Le front-end fait référence à l'interface avec laquelle les utilisateurs interagissent directement, et le back-end fait référence aux programmes côté serveur. Ils interagissent avec les données via le protocole HTTP. Lorsque le front-end et le back-end sont séparés, les programmes front-end et back-end peuvent être développés indépendamment pour mettre en œuvre respectivement la logique métier et les effets interactifs, ainsi que l'échange de données.

Conversion de type implicite : une exploration de différentes variantes de types et de leurs applications en programmation Conversion de type implicite : une exploration de différentes variantes de types et de leurs applications en programmation Jan 13, 2024 pm 02:54 PM

Explorez les différents types de conversions de types implicites et leur rôle dans la programmation Introduction : En programmation, nous devons souvent traiter différents types de données. Parfois, nous devons convertir un type de données en un autre type afin d'effectuer une opération spécifique ou de répondre à des exigences spécifiques. Dans ce processus, la conversion de type implicite est un concept très important. La conversion de type implicite fait référence au processus dans lequel le langage de programmation effectue automatiquement une conversion de type de données sans spécifier explicitement le type de conversion. Cet article explorera les différents types de conversions de types implicites et leur rôle dans la programmation,

Explorer la technologie front-end du langage Go : une nouvelle vision du développement front-end Explorer la technologie front-end du langage Go : une nouvelle vision du développement front-end Mar 28, 2024 pm 01:06 PM

En tant que langage de programmation rapide et efficace, le langage Go est très populaire dans le domaine du développement back-end. Cependant, peu de gens associent le langage Go au développement front-end. En fait, l’utilisation du langage Go pour le développement front-end peut non seulement améliorer l’efficacité, mais également ouvrir de nouveaux horizons aux développeurs. Cet article explorera la possibilité d'utiliser le langage Go pour le développement front-end et fournira des exemples de code spécifiques pour aider les lecteurs à mieux comprendre ce domaine. Dans le développement front-end traditionnel, JavaScript, HTML et CSS sont souvent utilisés pour créer des interfaces utilisateur.

Combinaison de Golang et de technologie front-end : découvrez comment Golang joue un rôle dans le domaine front-end Combinaison de Golang et de technologie front-end : découvrez comment Golang joue un rôle dans le domaine front-end Mar 19, 2024 pm 06:15 PM

Combinaison de Golang et de la technologie front-end : pour explorer le rôle de Golang dans le domaine front-end, des exemples de code spécifiques sont nécessaires. Avec le développement rapide d'Internet et des applications mobiles, la technologie front-end est devenue de plus en plus importante. Dans ce domaine, Golang, en tant que puissant langage de programmation back-end, peut également jouer un rôle important. Cet article explorera comment Golang est combiné avec la technologie front-end et démontrera son potentiel dans le domaine front-end à travers des exemples de code spécifiques. Le rôle de Golang dans le domaine front-end est celui d'un outil efficace, concis et facile à apprendre.

See all articles