Erstatt en verdi hvis den er null eller udefinert i JavaScript
Jeg har et krav om å bruke ?? C#-operatoren i JavaScript, og jeg vet ikke hvordan. Tenk på dette i C#:
int i?=null;
int j=i ?? 10;//j is now 10
Nå har jeg dette satt opp i 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
Hvordan gjør jeg det riktig?
Takk.
REDIGER: Jeg oppdaget halve problemet: Jeg kan ikke bruke 'indekserings'-notasjonen på objekter (my_object[0]). Finnes det en måte å omgå dette på? (Jeg kjenner ikke navnene på filteregenskapene på forhånd og vil ikke iterere over dem).
Svar #1
Her er den tilsvarende JavaScript-koden:
var i = null;
var j = i || 10; //j is now 10
Merk at den logiske operatoren || ikke returnerer en boolsk verdi, men den første verdien som kan konverteres til true.
I tillegg bruk et array av objekter i stedet for ett enkelt objekt:
var options = {
filters: [
{
name: 'firstName',
value: 'abc'
}
]
};
var filter = options.filters[0] || ''; // is {name:'firstName', value:'abc'}
var filter2 = options.filters[1] || ''; // is ''
Det kan nås via indeks.
Svar #2
ES2020 Svar
Den nye nullish coalescing-operatoren er endelig tilgjengelig i JavaScript. Vær imidlertid oppmerksom på nettleserstøtten. Du må kanskje bruke en JavaScript-kompilator som Babel for å konvertere den til noe mer bakoverkompatibelt.
I følge dokumentasjonen,
Den nullsammenkoblingsoperatoren (??) er en logisk operator som returnerer operandet på høyre side når operandet på venstre side er null eller udefinert, og ellers returnerer operandet på venstre side.
const options={
filters:{
firstName:'abc'
}
};
const filter = options.filters[0] ?? '';
const filter2 = options.filters[1] ?? '';
Dette vil sikre at begge variablene dine vil ha en reserveverdi på '' hvis filters[0] eller filters[1] er null eller undefined.
Merk at nullish coalescing-operatoren ikke returnerer standardverdien for andre typer falske verdier som 0 og ''. Hvis du ønsker å ta hensyn til alle falske verdier, bør du bruke ELLER-operatoren ||.
Svar #3
Logisk nullish-tilordning, 2020+ løsning
En ny operator har blitt lagt til, ??=. Dette tilsvarer value=value ?? defaultValue.
||= og &&= er lignende, lenker nedenfor.
Dette sjekker om venstre side er udefinert eller null, og avbryter hvis det allerede er definert. Hvis ikke, blir venstre side tildelt verdien fra høyre side.
Grunnleggende eksempler
let a // undefined
let b = null
let c = false
a ??= true // true
b ??= true // true
c ??= true // false
// Equivalent to
a = a ?? true
Objekt/Array-eksempler
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" }
Funksjonelt eksempel
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 }
??= Nettleserstøtte nov '24 - 95%
??= Mozilla-dokumentasjon
||= Mozilla-dokumentasjon
&&= Mozilla-dokumentasjon
