// Error prone-version, could throw.
const nameLength = db.user.name.length;
// Less error-prone, but harder to read.
let nameLength;
if (db && db.user && db.user.name)
nameLength = db.user.name.length;
se va putea scrie cam asa
// Still checks for errors and is much more readable.
const nameLength = db?.user?.name?.length;
Object.prototype.hasOwnProperty() verifica doar proprietatile directe pe obiectul respectiv, insa nu cauta pe prototype-ul obiectului.
@Cosmin_PopescuObject.prototype.hasOwnProperty() NU intoarce false daca proprietatea are valoarea null. Nu verifica valoarea proprietatii.
Tu ai cautat daca exista proprietatea coupon pe obiectul global Object Ar fi trebuit sa folosesti in forma urmatoare Object.prototype.hasOwnProperty.call(obj, 'coupon')
null este un tip de date in JavaScript, care este folosit in mod intentionat ca valoare a unei variabile/proprietati. In cazul in care accesezi variabila/proprietatea respectiva, ti se va returna valoarea acesteia, adica null;
In cazul in care accesezi proprietate care nu exista (lipsa), ti se va returna undefined, care este un tip de date diferit fata de null !
In al 3lea rand, exista conceptul de undeclared care presupune sa accesezi o variabila care nu a fost declarata, caz in care ti se returneaza o eroare de forma ReferenceError in care ti se spune ca variabila nu a fost definita (declarata).
Faptul ca atat null cat si undefined sunt falsy values nu inseamna ca ele sunt echivalente, asa cum nici empty string si 0 (zero) nu sunt echivalente, desi sunt tot falsy values.
Object.prototype.hasOwnProperty() returneaza true daca daca proprietatea exista definita pe obiect, indiferent de valoarea sa (poate fi chiar si null sau undefined setat in mod explicit).
In schimb, returneaza false daca proprietatea nu este definita pe obiect.
MDN zice asa
The value null represents the intentional absence of any object value. It is one of JavaScript’s
primitive values.
Asta inseamna ca proprietatea/variabila exista doar ca are valoarea null setata in mod intentionat.
Daca nu ar fi avut nicio valoare, ar fi returnat undefined (ceea ce e diferit fata de null).
(A) Accesarea de tip Right Hand Side a unei variabile nedeclarate returneaza eroare indiferent daca exista strict mode setat sau nu.
(B) In schimb, referinta de tip Left Hand Side (asignarea valorii unei variabile) functioneaza doar daca strict modenu e setat. Daca strict mode este setat, nu functioneaza nici referinta LHS.
Pe scurt, (A) nu poti citi ceva ce nu exista, insa (B) se poate defini o variabila la runtime in cazul in care nu avem strict mode.
Ai afirmat ca null si lipsa unei variabile/proprietati ar fi echivalente. In niciun caz nu este asa.
As always a new version of the V8 JavaScript engine brings performance tweaks and improvements as well as keeping Node.js up with the ongoing improvements in the language and runtime. This time we also have some naming fun with it being version 8 of V8 (“V8 of V8”).
Highlights of the new JavaScript features include: