Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

comparaison de "string"

2 réponses
Avatar
unbewusst.sein
j'ai été surpris de constater qu'il faut utiliser "==" et non pas "==="
dans la comparaison de "string" suivante :

String.prototype.isNamedColor=function(){
for(var i in colors_map){if(i == this) return true;}
return false;
}

la raison en est que i est de typeof "string" tandis que "this" est de
typeof "object".

mon array colors_map est de la forme :

colors_map['yellowgreen']='rgb(154,205,50)';
etc...

est-ce que ça signifie que string est un type "primitif" en javascript
???

--
Une Bévue

2 réponses

Avatar
Elegie
Une Bévue wrote:

<snip>

est-ce que ça signifie que string est un type "primitif" en javascript
???


Oui, en effet. Les valeurs primitives, en javascript, sont: undefined,
null, boolean, number et string (ECMAScript 262, 4.3.2). Elles peuvent
être utilisées directement à l'aide de "litterals" (ECMAScript, 7.8.4).

Les constructeurs Boolean, Number et String existent également, et
permettent respectivement d'obtenir des objets Boolean, Number et
String, chacun possédant diverses propriétés et méthodes liées à leur
type, ainsi qu'une propriété implicite, [[value]] contenant la valeur
primitive, et une méthode 'valueOf', retournant cette valeur primitive.

L'opérateur "typeof" permet de bien faire la différence (ECMAScript
11.4.3). Par exemple:

var s1="Hello"; alert(typeof s1); // 'string'
var s2=new String("Hello"); alert(typeof s2); // 'object'

ECMAScript, en outre, possède un mécanisme qui substitue à une valeur
primitive un objet du même type, créé à la volée, lorsque le contexte le
requiert. Exemple:

var foo="hello, world";
foo=foo.replace(/^h/,"H");

Normalement, cela devrait être illégal, car une valeur primitive n'a pas
de méthodes (ce n'est pas un objet). ECMAScript va donc substituer
temporairement 'new String(foo)' (un objet string) à 'foo' (une valeur
primitive) puis appeler la méthode 'replace' sur l'objet temporaire. Cet
objet disparaît une fois le statement exécuté.


HTH,
Elegie.

Avatar
Thoraval Yvon
Une Bévue wrote:

<snip>

est-ce que ça signifie que string est un type "primitif" en javascript
???


Oui, en effet. Les valeurs primitives, en javascript, sont: undefined,
null, boolean, number et string (ECMAScript 262, 4.3.2). Elles peuvent
être utilisées directement à l'aide de "litterals" (ECMAScript, 7.8.4).

Les constructeurs Boolean, Number et String existent également, et
permettent respectivement d'obtenir des objets Boolean, Number et
String, chacun possédant diverses propriétés et méthodes liées à leur
type, ainsi qu'une propriété implicite, [[value]] contenant la valeur
primitive, et une méthode 'valueOf', retournant cette valeur primitive.

L'opérateur "typeof" permet de bien faire la différence (ECMAScript
11.4.3). Par exemple:

var s1="Hello"; alert(typeof s1); // 'string'
var s2=new String("Hello"); alert(typeof s2); // 'object'

ECMAScript, en outre, possède un mécanisme qui substitue à une valeur
primitive un objet du même type, créé à la volée, lorsque le contexte le
requiert. Exemple:

var foo="hello, world";
foo=foo.replace(/^h/,"H");

Normalement, cela devrait être illégal, car une valeur primitive n'a pas
de méthodes (ce n'est pas un objet). ECMAScript va donc substituer
temporairement 'new String(foo)' (un objet string) à 'foo' (une valeur
primitive) puis appeler la méthode 'replace' sur l'objet temporaire. Cet
objet disparaît une fois le statement exécuté.


HTH,
Elegie.






mais c'est de "l'auto-boxing" ça )))