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.