Site Overlay

Forståelse Null og Udefineret i JavaScript

Før du dykker dybere, lad os først dække det grundlæggende:

undefined returneres, hvis en variabel kun var erklæret, men ikke er tildelt en værdi.

For eksempel:

var ab

Dette vil logge undefined:

log(ab)

undefined variable er variable, der er uden værdier., Lad os sige, at miljøet er repræsenteret som dette:

environmentVariable = {}

JS engine ville fortolke VariableDeclaration var ab som:

environmentVariable = {
ab: undefined
}

Så når det er adgang til den undefined vil blive returneret., Nu, når ab er tildelt en værdi:

ab = 90

undefined vil blive ændret til den værdi 90:

environmentVariable = {
ab: 90
}

Når vi erklærede ab det var angivet i miljøvariablen tabellen som undefined, som betyder, at den værdi, der er på den måde, når nu vi ab til værdi 90 undefined blev ændret til 90.,ab207″>

undefined kan også opstå, hvis et objekts egenskab findes ikke

let myDetails = {
age: 27
}log(myDetails.name)
// undefined

eller en funktion har en manglende parameter:

function getMyDetails(a) {
l(a)
}getMyDetails()
// undefined

undefined er en primitiv data type i JS:

Boolean
Undefined
Number
String
Symbolvar ab
typeof ab
// undefined

Du kan kontrollere, om den type ved hjælp af typeof søgeord:

if(typeof ab == 'undefined') {
// ...
}

undefined kan angives eksplicit:

var ab = undefined
l(ab)
// undefinedab = 90
l(ab)
// 90

null

null er en datatype i JS, der erklærer nogen værdi eller ikke-eksisterende værdi., null kan betragtes som et forsætligt fravær af nogen objektværdi.

var ab = null
l(ab)
// null

Ligheder

Lad os se på deres ligheder.

begge er falsy-værdier

nullog undefined løser altid til en falsk værdi., De er blandt de falsy værdier i JS:

  • null
  • udefineret
  • false
  • 0
  • Tom streng -> “”
  • NaN

Hvis de er i den tilstand af en if-else erklæring, else-sætning vil altid udføres:

if (null) {
l('yes')
} else {
l('no')
}

ovenstående vil log “nej”.

if (undefined) {
l('yes')
} else {
l('no')
}

vil også logge “Nej”.,

Både er primitive værdier

I JS vi har Komplekse og Primitive data-typer, null og udefineret er blandt de primitive data-typer:

  • null
  • udefineret
  • Symbol
  • String
  • Antal
  • Boolean

Primitive data-typer er løst ved value-for-reference.

forskelle

nullogundefined betyder ingen værdi, men de løser problemet. værdier:

l(typeof null)
// objectl(typeof undefined)
// undefined

du forventede typeof null ville returnere “null”? Ikke?, Dette er en fejl i JS i næsten to årtier, men sagen er, at den ikke kan løses. Dette skyldes, at tusinder af websebsteder er afhængige af denne buggy-opførsel, fastsættelse af det vil få dem til at gå i stykker.

null er en tildelt værdi, den skal udtrykkeligt tildeles af programmøren., HVIS ikke, der er tildelt variablen bliver undefined:

var ab = null
var a // undefined

i modsætning til ikke-defineret som kan være udtrykkeligt er tildelt eller ikke-tildelt:

var ab = undefined
var bc l(ab)
// undefinedl(bc)
// undefined

Test for null

så Vi, at undefined beslutter at “undefined”, men null beslutter at “objekt”.,

Vi kan nemt teste for undefined:

var abif(typeof ab == "undefined") {
// ...
}

null, vi kan ikke gøre dette:

var ab = nullif(typeof ab == "null") {
// ...
}

typeof null returnerer “objekt”, og vi kan være fristet til at omskrive ovenstående som dette:

var ab = nullif(typeof ab == "object") {
// ...
}

Mange Komplekse data typer vende tilbage objekter, den type, som 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 et Array eller en Genstand kan være værdien af ab.,

hvordan tester vi korrekt for null, da null er en falsk værdi, kombinerer vi dens kontrol med typenaf check.

var ab = nullif(!ab && typeof ab == "object") {
// ...
}

Abstract/Løs og Strenge Ligestilling på null og udefineret

Lad os se, hvad der sker, når en stram og løs ligestilling er udført på begge typer. Men før det-en hurtig gennemgang af den løse ligestillingsspecifikation:

7.2.14 abstrakt Ligestillingssammenligning

sammenligningen = = = y, hvor and og y er værdier, producerer sandt eller falsk., En sådan sammenligning udføres som følger:

se på 2 og 3

  1. hvis If er null og y er udefineret, returner true.
  2. hvis true er udefineret og y er null, returner true.

2 siger, at hvis LHS er null, og RHS er udefineret, returneres true., Dette er grunden til, hvis vi gør dette:

log(null == undefined)

det logs true

log(null == undefined)
// true

og siger, at hvis LHS er udefineret, og RHS er null, skal det også returnere true

log(undefined == null)
// true

Dette betyder, at der kan være nul og udefineret er løst lige, ja, det er forståeligt, fordi de alle repræsenterer et fravær af ingen værdi, som i en nøgle-værdi-par, nøglen er til stede, men værdien er ikke til stede/ ikke er til stede.

lad os se om streng ligestilling:

7.2.,15 streng Ligestillingssammenligning

sammenligningen = = = = y, hvor and og y er værdier, producerer sandt eller falsk. En sådan sammenligning er udført som følger:

kigger på ovenstående, strenge ligestilling returnerer false, hvis de RHS og LHS typer er forskellige.

Nu, i tilfælde af

null === undefined

Dette vil være falske, fordi de typer, der vil være object og undefined se de er forskellige, så det vil return false.

log(null === undefined)

så,

null !== undefined

vil være sandt. Hvorfor?, Det skyldes, at null => object ikke er den samme type somundefined => undefined.

null != undefined

dette spørger, om LHS ikke er lig med RHS. Dette er ikke, de er lige, fordi Abstrakt Lighed siger at returnere sand(de er ens), hvis LHS er enten null eller undefined og RHS er enten null eller undefined.,

Passing null og ikke defineret som en funktion argument

Vi skal være forsigtig, når erklære default argument værdi som dette:

function defFunc(name = "nnamdi") {
return name
}

Denne funktion kun returnerer et navn, der videregives til det, se argumentet name har en default værdi nnamdi argumentet vil tage nnamdi som værdi, når funktionen kaldes uden parametre:

log(defFunc())
// nnamdi

Det kan siges sådan, når argumentet navn er udefineret det forudsætter nnamdi værdi., Så hvis vi passerer en udefineret værdi defFunc navn vil være nnamdi:

var ab
log(defFunc(ab))
// nnamdi

Nu, hvad sker der, hvis vi går i nul-til den funktion? Tror du, at det vil logge nnamdi, fordi null betyder fraværet af en værdi, eller vil den logge null, fordi null er en værdi? Lad os se:

log(defFunc(null))
// null

Wowo!!! det logget null. Det skal skyldes, at null er et objekt. Jeg vil sige et tomt objekt, men stadig repræsenterer fraværet af en værdi(er).,

Hvis du prøver at kontrollere, om null argument, husk don;t gøre dette:

function defFunc(name = "nnamdi") {
if(typeof name == "null")
return "nnamdi"
return name
}

gøre dette:

function defFunc(name = "nnamdi") {
if(!name && typeof name == "object")
return "nnamdi"
return name
}

eller du kan uddelegere null check til en funktion:

function isNull(val) {
return !val && typeof val == "object"
}

du kan bruge isNull funktion hvor som helst i dit program:

function defFunc(name = "nnamdi") {
if(isNull(name))
return "nnamdi"
return name
}

Konklusion

jeg tror, vi er klar på forskelle og ligheder mellem null og undefined. Så når du næste gang ser den fejl, vil du vide, hvad du skal gøre.

Skriv et svar

Din e-mailadresse vil ikke blive publiceret. Krævede felter er markeret med *