Før dykking dypere, la oss først dekke grunnleggende:
undefined
returneres hvis en variabel bare ble forkynt, men ikke tilordnet en verdi.
For eksempel slik:
var ab
Dette vil logge undefined
:
log(ab)
udefinerte variabler variabler som er med ingen verdier., La oss si at miljøet er representert som dette:
environmentVariable = {}
JS motoren ville tolke VariableDeclaration var ab
annet:
environmentVariable = {
ab: undefined
}
Så når det er åpnet undefined
vil bli returnert., Nå, når ab
er tilordnet en verdi:
ab = 90
undefined
endres til verdi 90
:
environmentVariable = {
ab: 90
}
Når vi erklært ab
det ble satt i miljø-variabelen tabell som undefined
, som betyr at verdien er på vei, nå når vi ab-verdi 90
, undefined
ble endret til 90
.,ab207″>
undefined
kan også oppstå hvis et objekt eiendom ikke eksisterer
let myDetails = {
age: 27
}log(myDetails.name)
// undefined
eller en funksjon har en manglende parameter:
function getMyDetails(a) {
l(a)
}getMyDetails()
// undefined
undefined
er en primitiv datatype i JS:
Boolean
Undefined
Number
String
Symbolvar ab
typeof ab
// undefined
Du kan sjekke for den typen bruk av typeof
søkeord:
if(typeof ab == 'undefined') {
// ...
}
undefined
kan stilles inn eksplisitt:
var ab = undefined
l(ab)
// undefinedab = 90
l(ab)
// 90
ugyldig
null
er en datatype i JS som erklærer ingen verdi eller ikke-eksisterende verdi., null kan være tenkt som en tilsiktet fravær av en gjenstand verdi.
var ab = null
l(ab)
// null
Likheter
La oss se på deres likheter.
Begge er falsy verdier
null
og undefined
alltid fører til en falsy verdi., De er blant de falsy verdier i JS:
- ugyldig
- udefinert
- false
- 0
- Tom streng -> «»
- NaN
Hvis de er i en tilstand av en if-else
statement, den andre uttalelsen vil alltid være utført:
if (null) {
l('yes')
} else {
l('no')
}
Den ovenfor vil logge deg «nei».
if (undefined) {
l('yes')
} else {
l('no')
}
vil også logge «nei».,
Begge er primitive verdier
I JS vi har Komplekse og Primitive datatyper, null og undefined er blant de primitive datatypene:
- ugyldig
- udefinert
- Symbolet
- String
- Antall
- Boolean
Primitive datatyper er løst av verdien-av-referanse.
Forskjeller
null
og undefined
betyr ingen-verdi, men de løse for å diff. verdier:
l(typeof null)
// objectl(typeof undefined)
// undefined
Du har ventet på typeof null
ville vende tilbake «null»? Høyre?, Dette er en bug i JS for nesten to tiår, men tingen er at det ikke kan bli løst. Dette er fordi tusenvis av nettsteder, avhenger dette buggy atferd, fikse det vil gjøre dem til pause.
null
er en tilordnet verdi, det må være uttrykkelig tildelt av programmereren., HVIS det ikke er tilordnet den variabelen blir undefined
:
var ab = null
var a // undefined
i motsetning til udefinert som kan være uttrykkelig er tildelt eller som ikke er tilordnet:
var ab = undefined
var bc l(ab)
// undefinedl(bc)
// undefined
Test for null
– Vi så at undefined
løser til «udefinert» men null
løser til «objekt».,
Vi kan enkelt test for undefined
:
var abif(typeof ab == "undefined") {
// ...
}
For null
, vi kan ikke gjøre dette:
var ab = nullif(typeof ab == "null") {
// ...
}
typeof null
returnerer «objektet», og vi kan bli fristet til å omskrive ovenfor som dette:
var ab = nullif(typeof ab == "object") {
// ...
}
Mange Komplekse datatyper tilbake objekter, typen kan kontrolleres via typeof
:
let obj = {}
let arr =
class D {}
const d = new D()l(typeof obj)
l(typeof arr)
l(typeof d)// object
// object
// object
Så det ville mislykkes fordi en Matrise eller et Objekt kan være verdien av ab.,
Nå hvordan gjør vi riktig test for null, som null er en falsy verdi vi vil kombinere sin sjekk med typeof sjekk.
var ab = nullif(!ab && typeof ab == "object") {
// ...
}
Abstrakt/Løs og Strenge Likestilling på null og undefined
La oss se hva som skjer når streng og løs likestilling er utført på begge typer. Men før det — en rask gjennomgang av de løse likestilling spesifikasjon:
7.2.14 Abstrakt Likestilling Sammenligning
Den sammenligningen x == y, der x og y er verdier, produserer sant eller usant., En slik sammenligning er utført som følger:
Se på 2-og 3 –
– >
- Hvis x er null og y er udefinert, returnere true.
- Hvis x er udefinert og y er null, returnerer sann.
2 sier om LHS er null og RHS er udefinert, true returneres., Dette er grunnen, hvis vi gjør dette:
log(null == undefined)
den logger seg true
log(null == undefined)
// true
og sier at hvis det LHS er udefinert og RHS er null, det skulle også returnere true
log(undefined == null)
// true
Dette betyr at null og undefined er løst lik, ja, det er forståelig fordi de alle representerer et fravær av ingen verdi, som i en nøkkel / verdi-par, nøkkelen er til stede, men den verdien ikke finnes/ er fraværende.
La oss se om Strenge Likestilling:
7.2.,15 Strenge Likestilling Sammenligning
Den sammenligningen x === y, der x og y er verdier, produserer sant eller usant. En slik sammenligning er utført som følger:
ser på ovenfor, strenge likestilling returnerer usann hvis RHS og LHS er forskjellige typer
Nå, i tilfelle av
null === undefined
Dette vil være falsk fordi typer vil være object
og undefined
, se de er forskjellige så det vil returnere false.
log(null === undefined)
Så,
null !== undefined
vil være til stede. Hvorfor?, Det er fordi null => object
er ikke det samme type som undefined => undefined
.
null != undefined
Dette er å spørre om LHS er ikke lik RHS. Dette er ingen, de er like fordi Abstrakt Likestilling sier for å returnere sann(at de er like) hvis LHS er enten null
eller undefined
og RHS er enten null
eller undefined
.,
Passerer null og undefined som en funksjon et argument
Vi bør være forsiktig når erklære standard argument verdi som dette:
function defFunc(name = "nnamdi") {
return name
}
Denne funksjonen bare returnerer et navn som sendes, se argumentet name
har en default-verdi nnamdi
, argumentet vil ta nnamdi
som verdi når funksjonen er kalt med noen parametere:
log(defFunc())
// nnamdi
Det kan bli sagt som dette, når argumentet navn er udefinert det forutsetter nnamdi
verdi., Så hvis vi passerer en udefinert verdi til defFunc
navn nnamdi
:
var ab
log(defFunc(ab))
// nnamdi
Nå, hva skjer hvis vi går i null til funksjonen? Tror du det vil logge nnamdi fordi null betyr fravær av en verdi eller vil det logg null fordi null, er en verdi? La oss se:
log(defFunc(null))
// null
Wow!! det logget null. Det bør være fordi null er et objekt. Jeg vil si et tomt objekt, men fortsatt representerer fravær av en verdi(s).,
Hvis du prøver å se etter null argument, husker ikke;t gjøre dette:
function defFunc(name = "nnamdi") {
if(typeof name == "null")
return "nnamdi"
return name
}
gjør dette:
function defFunc(name = "nnamdi") {
if(!name && typeof name == "object")
return "nnamdi"
return name
}
eller du kan delegere null sjekk til en funksjon:
function isNull(val) {
return !val && typeof val == "object"
}
du kan bruke isNull
funksjon hvor som helst i programmet:
function defFunc(name = "nnamdi") {
if(isNull(name))
return "nnamdi"
return name
}
Konklusjon
jeg tror vi er klare på forskjeller og likheter mellom null
og undefined
. Så når neste du ser at en feil, vil du vite hva du skal gjøre.