Site Overlay

Forstå Null og Undefined i JavaScript

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 –

– >

  1. Hvis x er null og y er udefinert, returnere true.
  2. 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.

Legg igjen en kommentar

Din e-postadresse vil ikke bli publisert. Obligatoriske felt er merket med *