Înlocuiește o valoare dacă este null sau undefined în JavaScript


Am o cerință de a aplica operatorul ?? din C# în JavaScript și nu știu cum. Luați în considerare acesta în C#:

int i?=null;
int j=i ?? 10;//j is now 10

Acum am acest lucru configurat în JavaScript:

var options={
       filters:{
          firstName:'abc'
       } 
    };
var filter=options.filters[0]||'';//should get 'abc' here, it doesn't happen
var filter2=options.filters[1]||'';//should get empty string here, because there is only one filter

Cum fac asta corect?

Mulțumesc.

EDIT: Am identificat jumătate din problemă: nu pot folosi notația 'indexer' pentru obiecte (my_object[0]). Există vreo modalitate de a o ocoli? (Nu cunosc numele proprietăților filtrelor în prealabil și nu vreau să le parcurg).

Răspuns #1

Iată echivalentul în JavaScript:

var i = null;
var j = i || 10; //j is now 10

Rețineți că operatorul logic || nu returnează o valoare booleană, ci prima valoare care poate fi convertită în true.

De asemenea, folosește un șir de obiecte în loc de un singur obiect:

var options = {
    filters: [
        {
            name: 'firstName',
            value: 'abc'
        }
    ]
};
var filter  = options.filters[0] || '';  // is {name:'firstName', value:'abc'}
var filter2 = options.filters[1] || '';  // is ''

Asta poate fi accesat prin index.

Răspunsul #2

Răspuns ES2020

Noul Operator Nullish Coalescing este în sfârșit disponibil în JavaScript. Totuși, rețineți suportul pentru browsere. Este posibil să fie necesar să folosiți un compilator JavaScript precum Babel pentru a-l converti într-un format mai compatibil cu versiunile anterioare.

Conform documentației,

Operatorul de coalescență nulă (??) este un operator logic care returnează operandul din partea dreaptă atunci când operandul din partea stângă este null sau undefined, și altfel returnează operandul din partea stângă.

const options={
  filters:{
    firstName:'abc'
  } 
};
const filter = options.filters[0] ?? '';
const filter2 = options.filters[1] ?? '';

Acest lucru va asigura că ambele variabile vor avea o valoare de rezervă de '' dacă filters[0] sau filters[1] sunt null sau undefined.

Rețineți că operatorul de coalescență nullish nu returnează valoarea implicită pentru alte tipuri de valori falsy, cum ar fi 0 și ''. Dacă doriți să țineți cont de toate valorile falsy, ar trebui să folosiți operatorul OR ||.

Răspunsul #3

Atribuire nulă logică, soluție din 2020+

A fost adăugat un nou operator, ??=. Acesta este echivalent cu value=value ?? defaultValue.

||= și &&= sunt similare, link-urile mai jos.

Acest lucru verifică dacă partea stângă este nedefinită sau null, întrerupând procesul dacă este deja definită. Dacă nu, partea stângă primește valoarea părții drepte.

Exemple de bază

let a          // undefined
let b = null
let c = false

a ??= true  // true
b ??= true  // true
c ??= true  // false

// Equivalent to
a = a ?? true

Exemple de obiect/tablou

let x = ["foo"]
let y = { foo: "fizz" }

x[0] ??= "bar"  // "foo"
x[1] ??= "bar"  // "bar"

y.foo ??= "buzz"  // "fizz"
y.bar ??= "buzz"  // "buzz"

x  // Array [ "foo", "bar" ]
y  // Object { foo: "fizz", bar: "buzz" }

Exemplu funcțional

function config(options) {
    options.duration ??= 100
    options.speed ??= 25
    return options
}

config({ duration: 555 })   // { duration: 555, speed: 25 }
config({})                  // { duration: 100, speed: 25 }
config({ duration: null })  // { duration: 100, speed: 25 }

??= Suport pentru browsere Nov '24 - 95%

??= Documentația Mozilla

||= Documentația Mozilla

&&= Documentația Mozilla