javascript - Care este diferența dintre următoarele condiții în TypeScript?
if (!value || value.length<1)
if (value.length<1)
Care este diferența dintre cele două condiții? Nu ar fi la fel?
Răspuns #1
Nu, ele sunt absolut diferite.
!value
aceasta verifică dacă un element este prezent și nu este nedefinit, dar ![] și de asemenea ![3] acest lucru este întotdeauna fals. practic verifică prezența.
și chiar [] este întotdeauna adevărat.
length
calculază numărul de elemente din acel tablou și se aplică exclusiv tablourilor.
pentru [] , value.length<1 acesta returnează adevărat.
Răspunsul #2
Dacă value este null sau undefined, al doilea if va arunca o eroare afirmând că nu poți accesa length al null/undefined.
Primul previne acest lucru, deoarece va accesa value.length doar dacă value este adevărat. În caz contrar, prima condiție (!value) este satisfăcută, deci a doua (value.length < 1) nici măcar nu va fi evaluată.
const arr1 = null;
const arr2 = [];
// Satisfies first condition:
if (!arr1 || arr1.length < 1) console.log('No values in arr1.');
// Satisfies second condition:
if (!arr2 || arr2.length < 1) console.log('No values in arr2.');
// Breaks:
if (arr1.length < 1) console.log('No values in arr1.');Oricum, asta nu este specific pentru TS, așa funcționează JS-ul normal.
