11521 sujets

JavaScript, DOM et API Web HTML5

bonjour
J'avais déja posé quelle que questions à propos de javascript ( context scope) que je repose ici !!!

1) quelle est la difference entre null et undefined ?
si dans la console j'écris
>var val;
>val; // return undefined
donc je dois pouvoir écrire val= undefined ; mais j'ai lu ( ne me souvient plus) qu'il ne faut jamais initialiser une variable a undefined mais seulement a null !!! pourquoi ?
--undefined est elle une valeur de retour est utilisé par le système ou une fonction qui ne retourne pas de valeur (n 'utilise pas le terme return explicitement ) , utilisable par le programmeur qui ne doit pas l'utiliser !!
--null est une valeur de retour pour signifier que le nom de la propriété n'existe pas ou que la valeur de la propriété n'est pas disponible ! ( que signifie disponible ? non accessible, non définie, remis a zéro = null ) et une valeur utilisable par le programmeur ! .

2) en javascript Il n 'y a pas de garbage collector donc null n'entraine pas la destruction de l'emplacement mémoire et on doit utiliser delete .

3) la différence entre null et undefined est il lié à l'allocation de l'espace mémoire ?

4) quelles différences entre global object( head object), global properties , global variables ? ...Des examples ?

5) dans Object() , quelle est la nature du parametre explicite invisible passé en argument null ou undefined ?

6) Quelles différence entre Array.prototype et Object.prototype
Object.prototype.foo='foo';
var mystring='bar'
// var mystring= new String('bar');
mystring.foo

7) comment différencier function expression et function statement ?

Cordialement
Modifié par 75lionel (23 Dec 2017 - 12:01)
Modérateur
Bonjour!

Alors la grande différence est que null est une valeur, alors que undefined est une propriété de l'objet et aussi une valeur primitive.

Lorsque j'appelle une variable non définie:

value;

Celle-ci n'a pas d'allocation mémoire et javascript retourne la globale undefined.
Javascript retourne donc undefined lorsqu'on lui demande un retour mais qu'il ne reçoit rien il renvoie undefined, mais ce n'est en aucun car la valeur de l'objet.

value === undefined; // true

Mais null est une valeur, qui est stockée en mémoire. Si on affecte undefined à une variable on créée une allocation en mémoire avec la référence à undefined, à éviter comme la peste, ça ne sert à rien. undefined est un vieux bricolage qui fut créé pour éviter de lancer des erreurs proprement Smiley decu . Le mieux est de ne jamais l'utiliser.

a écrit :
2) en javascript Il n 'y a pas de garbage collector donc null n'entraine pas la destruction de l'emplacement mémoire et on doit utiliser delete .

Bien sur qu'il y a un garbage collector (et encore hereux), et attribuer null à une variable détruit bien la valeur précédente si elle n'a plus de références.
Delete est fait pour les propriétés, delete myvar génèrera une erreur en strict mode et est donc à éviter.

a écrit :
la différence entre null et undefined est il lié à l'allocation de l'espace mémoire ?

en partie oui.

a écrit :
quelles différences entre global object( head object), global properties , global variables ? ...Des examples ?

pas compris, mais de manière générale, évite tout ce qui est global :=)

a écrit :
5) dans Object() , quelle est la nature du parametre explicite invisible passé en argument null ou undefined ?

Pas de valeur, donc javascript retourne undefined au lieu de lever une erreur.

a écrit :
Quelles différence entre Array.prototype et Object.prototype

Le premier est le prototype de Array et le second de Object?
Mais à nouveau, de manière générale, ne jamais tripatouiller les prototypes des objets de base javascript.

a écrit :
7) comment différencier function expression et function statement ?

fonction statement:

function machin(){
  alert('yo');
}

àpeu près tout le reste c'est des function expression
Merci beaucoups pour vos réponses .
upload/1514026211-48731-alsacredocumentundefined.png .

Dernières questions en rapport a chrome et la console :


5) reformulation de ma question sur Object() est une fonction donc se comporte comme telle . il utilise arguments pour connaitre les paramètres passées en argument .arguments serait un tableau vide ? ici il n'y a rien mais rien n'existe pas en programmation ou beaucoups de chose sont implicite mais gérer par le language . donc que signifie dans Object() ce qui il y à l 'intérieur des parenthèse de Object ? Vous me direz rien et bien ma question est de savoir si rien signifie undefine ou null . Je parke de () dont en entrée et par la valeur de retour de "retour<--Object() " mais bien entrée " Object (<-- entre)" .

6) Quelles différence entre Array.prototype et Object.prototype
Object.prototype.foo='foo';
var mystring='bar'
// var mystring= new String('bar');
mystring.foo

un peu fou comme code non ? ou est le rapport entre mystring et foo ? la propriété foo ayant la valeur foo est associé a toutes les instances créé par new quelque soit le type/function passé à droite de new ?!!!! Que se serait passé si j'avais instancié avec une fonction qui avait déja la propriété ou la méthode foo . Un peu comme si String() avait une propriété ou une méthode foo . Quelle foo le moteur javascript va t il me retourner .....

Quand je parlais de Array.prototype et Object.prototype il me semble que le moteur javascript lors d'héritage et d 'appel de nom ( propriété method variable ) , le moteur cherche une succession de charactère qui match pour proposer une réponse qui vaut ce qu'elle vaut ...d' ou ma question .( difficile a expliquer en peu de mot )



8) quelle est le namespace de undefined si c'est une propriété . il est une propriété de quelque chose ? une peu comme Math.PI qui est une propriété de l'instance d'un obejct déja instancié par le navigateur et dont directement utilisable !! Ce serait "window" et "Window" alors !! PI est il une valeur primitive ? il me semble que ce soit window.undefined qui a pour valeur undefined mais comme tout en javascript return undefined si ne retourne rien !!!! difficile de savoir

9) pourquoi dans chrome y a t il 4 window "(>)(w|W)indow(s) " ? dont 2 sont identiques "window" = ">window" mais avec ">" en bleu dans le pop up !! La Flèche bleu serait il me semble serait l historique des commandes donc Windows avec un s n existe pas , ...alors comment ré initialisé effacer cette historique sans fermer chrome ? une CLI pour ça ?

10) undefined est une propriété qui existe pour Window et window et pas "windows". 11) Pourquoi Window et window ont tous les deux une propriété undefined ? 12) Quelle est la différence entre Window et window ?

13) Quellle différence entre "window.document" et "window.Document" . Je pensais que Document etait une fonction car retourne dan la console " f Window(){ native code }" donc a utiliser avec des parenthèses pour l'éxécuter comme Document() mais non .


14) vous écrivez :
"""Bien sur qu'il y a un garbage collector (et encore hereux), et attribuer null à une variable détruit bien la valeur précédente si elle n'a plus de références."""
14a) alors comment faire pour faire pour que la valeur n'est plus de référence ?
je pense que le mot valeur signifie variable mais la compréhension me sembme plus facile si on utilise explictement le terme l adresse mémoire et de la valeur stockée dans cette espace mémoire .
14b) ne serait ce pas
"""Bien sur qu'il y a un garbage collector (et encore hereux), et attribuer null à une variable détruit bien la variable ( memoire) précédente si elle n'a plus de références."""
En javascript le d''affectation ( signe =) dépend du type de la donnée passé à droite du signe et donc l'affectation se fait par valeur pour les types primitifs et par référence pour les objets ( pointe vers l' adressse memoire qui contient la valeur ) ....
14c) ou la réponse est il n'y a pas de delete pour les variables ( function = object ) et donc il y a 2 façons différentes de supprimer un espace mémoire :
--en utilisant delete pour les propriétés d'un object ( utilise new , pas primitive)
--en utilisant null pour une variable ( primitive pas de new )
Modifié par 75lionel (23 Dec 2017 - 12:48)
6) Quelles différence entre Array.prototype et Object.prototype
String est bien un Array !!?? et un Object ?!!!
tient null agit différemment selon que affectation après initialisation( sans affectation de valeur ) de valeur ou non !!
upload/1514030386-48731-alsenullcontext.png

15) le moteur javascript se comporte differemment avec String selon que l on utilise le mot clé new ? !!!
upload/1514031322-48731-alsanewkeyword.png
Modifié par 75lionel (23 Dec 2017 - 13:15)
Modérateur
a écrit :
arguments serait un tableau vide

arguments est un objet, qui se comporte à peu près comme un tableau, mais ce n'est pas un Array. Et oui il serait vide
a écrit :
donc que signifie dans Object() ce qui il y à l 'intérieur des parenthèse de Object ?

Rien est le terme qui me semble le plus adapté
a écrit :
Que se serait passé si j'avais instancié avec une fonction qui avait déja la propriété ou la méthode foo . Un peu comme si String() avait une propriété ou une méthode foo . Quelle foo le moteur javascript va t il me retourner

Celui le plus bas sur la chaine de l'héritage des prototypes (qui écrase celui de son parent), donc celui de String. C'est précisément pour cela qu'il ne faut jamais bbricoler les prototypes des objets de base du langage. Comme on ne contrôle pas les versions du javascript, une mise à jour pourrait ajouter une propriété ou une méthode sur un objet qui casserait votre code.

a écrit :
le moteur cherche une succession de charactère qui match pour proposer une réponse qui vaut ce qu'elle vaut

heuu.. je suggère d'en lire plus sur l'héritage en javascript

a écrit :
8) quelle est le namespace de undefined si c'est une propriété .

C'est une propriété globale. Mais j'aurais plutôt dut écrire caractéristique pour éviter toute confusion.

a écrit :
pourquoi dans chrome y a t il 4 window "(>)(w|W)indow(s) " ? dont 2 sont identiques "window" = ">window" mais avec ">" en bleu dans le pop up !!

parce que window est une instance de Window (f pour function)
a écrit :
11) Pourquoi Window et window ont tous les deux une propriété undefined ?

Aucun des deux n'a de telle propriété
> 'undefinded' in window => false

a écrit :
Quellle différence entre "window.document" et "window.Document"

Document est une interface. Et ne peut s'utiliser qu'avec new:
https://developer.mozilla.org/fr/docs/Web/API/Document
a écrit :
alors comment faire pour faire pour que la valeur n'est plus de référence ?

Toutes les mettre à null, et faire du code propre Smiley smile
Mais javascript n'est pas du C, il n'y a pas de delete pour les variables.

a écrit :
String est bien un Array !!??

Non String n'est pas un array, même si on peut accéder à une valeur en [] ou qu'elle a une propriété length.

a écrit :
le moteur javascript se comporte differemment avec String selon que l on utilise le mot clé new ? !!!

Oui, un constructeur d'objet est une fonction. Si on utilise juste la fonction, on appelle celle-ci sans construire d'objet.
Ouah merci beaucoups .
votre première réponse etait
Alors la grande différence est que null est une valeur, alors que undefined est une propriété de l'objet et aussi une valeur primitive.

A) pour le undefined
--window.undefined en complétion existe dans la console chrome => undefined
--Window.en complétion n'existe dans la console chrome mais écrire Window.undefined retourne aussi undefined => undefined
Commment expliqué ce comportement de undefined ?



B) type of de 2 "2" Number(2) Number("2") retourne un Number !!
je décourve d 'autres choses en plus avec isNaN() en rapport a IEEE 754 ( simple /double precision pour nombre float/double ) .
!iisNaN( ici ) est un nombre pour
-----a) tous boolean cad true false
------b) plusieurs espaces au début ou a la fin
------c) nbre avec séparateur un point coller a un nbre ( come 45.65 pas ",")
------d) null
------e) tout texte cad dire avec guillemet début et fin si c) et b) mais pas a) et d)

C) undefined et null
je pense que connaitre la fonction isNaN() et typeof allume le feu
a) !window.isNaN(undefined) => n'est pas une valeur mais typeof(undefined)=> undefined
b) !window.isNaN(null) ..............=> est une valeur mais typeof(null)=> object aieh
le point b) est un bug car null n'est pas un objet !! corrigé dans ECMAScript 6).
>typeof null === 'object'

undefined = “no value”=> Uninitialized variables, missing parameters , unknown variable ( launch exception here ) .
null = “no value”="void"=> use by programmer , parameter to a function.

D)Si Window est une classe et window est son instance . Cela respecte bien le fait que toute classe en programmation commence avec une majuscule ce qui n est cas le cas de l instance d'une classe !! Donc le navigateur instancie pour nous l instance window de la classe Window ?? Est ce exacte ?


E) objet de type String et string
selon ce qui se trouve a droite du égale "=" cad new String("text"), "text" , String("text")
pour String() qui se comporte comme un array mais n'est pas un Array et se comporte selon les cas comme un Object de type "string" ou "Object" . D ou ma question entre la différence entre un string et object !!!! IL semble qu il n 'y ai pas de différence au nivea ude la complétion dans la console chrome ( voir capture ) upload/1514166370-48731-nullstringstringobject.png donc ou se trouve la différence ( a part que typeof retourne des valeur différentes ) ?
String()..................... => ""
a= new String("") => String{"", length: 0 }
b=a .......................... // b pointe a l adresse de a
a[0]...............................=>undefined
a[0]="a" ....................=> "c" mais rien ne se change immutable
typeof a.................... => "object"
a="bred" ................ // dans le meme espace mémoire on remplace la valeur et le type
typeof a ....................=> "string" // ce n'est plus un objet
a[0]=>"b" ................ // mais supporte la syntaxe [] !!!!

F)vous écrivez ; " Document est une interface. Et ne peut s'utiliser qu'avec new"
par interface vous entendez une fonction qui est / définit une classe a instancier ?
Document contient il une implementation des fonction qu il contient ou vraiment que les noms ( des propriete methode) qu il faudra implémenter soi même ?
JQuery utilise pas l' interface Document ou Window mais window et document pour tester le chargmenet de la page ? Quelle est la différence entre document et windows dans ce contexte ? document est bien déja une instance de Document ?
pourtant en etudiant la completion de document et Document je n'ai pas le même nombre d item entre les deux !!! pourquoi doc ( doc=new Document()) à moins d items que document ?
https://stackoverflow.com/questions/9895202/what-is-the-difference-between-window-screen-and-document-in-javascript

G) Je me perds les pinceaux entre window et Window et document Document
y a t il pas un editeur avec completion pour le nom mais aussi pour la doc !!
La console Google ne me renseigne ma sur la nature des noms ( instance interface fonction method ... )
Modifié par 75lionel (25 Dec 2017 - 04:47)
Modérateur
a écrit :
--window.undefined en complétion existe dans la console chrome =>

Au temps pour moi, j'avais commis une typo Smiley smile : 'undefined' in window => true

a écrit :
Window.en complétion n'existe dans la console chrome mais écrire Window.undefined retourne aussi undefined => undefined

parce que justement il n'existe pas il retourne undefined. Pour tester l'existence il faut utiliser «in». undefined est plutôt un accident de parcours que quelque chose que l'on devrait tester:


'undefined' in window
'undefined' in Window


a écrit :
je décourve d 'autres choses en plus avec isNaN()

isNaN converti d'abord le paramètre en un Number avant de l'évaluer. Se référer donc à la conversion automatique de chaines en nombres pour les détails.

a écrit :
je pense que connaitre la fonction isNaN() et typeof allume le feu

à nouveau histoire de conversion, null est convertit à 0 alors qu'undefined devient NaN. Assez logique finalement.

a écrit :
Cela respecte bien le fait que toute classe en programmation commence avec une majuscule ce qui n est cas le cas de l instance d'une classe !! Donc le navigateur instancie pour nous l instance window de la classe Window ?? Est ce exacte ?

Oui. La majuscule est une convention, mais les objets de base du javascript et leurs instance la respectent en effet.

a écrit :
D ou ma question entre la différence entre un string et object !!!! IL semble qu il n 'y ai pas de différence au nivea ude la complétion

Le type primitif string n'a pas de propriété ni de méthode et n'est pas un objet. Seulement lorsque l'on accède à une propriété sur celui-ci, le moteur auto-box le type primitif: il crée un objet temporaire (ici de type String) pour accéder à la propriété.
La grosse différence est la suivante:


var a = 'a';
a.bidule = 'yo';
a.bidule; // => undefined

var b = new String('a');
b.bidule = 'yo';
b.bidule; // => 'yo'


Comme new String ne sert presqu'à faire du pas très Charlie et est moins performant que le type primitif, le mieux est de ne pas y avoir recours.

a écrit :
vous écrivez ; " Document est une interface. Et ne peut s'utiliser qu'avec new"
par interface vous entendez une fonction qui est / définit une classe a instancier ?
Document contient il une implementation des fonction qu il contient ou vraiment que les noms ( des propriete methode) qu il faudra implémenter soi même ?

C'est «conceptuellement» une interface, mais il contient les implémentations oui.
par ailleurs document n'est pas de type Document mais HTMLDocument ou XMLDocument. n'utilise que rarement

Pour les détails:
https://www.w3.org/TR/2015/REC-dom-20151119/#interface-document

a écrit :
JQuery utilise pas l' interface Document ou Window mais window et document pour tester le chargmenet de la page ?

en effet, créer une nouvelle instance de HTMLDocument ou Document ne sert qu'à des cas très particuliers. dans 99% des situations on utilise window et document sans se soucier de tout cela.
Modifié par kustolovic (25 Dec 2017 - 22:33)