ฉันจะตรวจสอบตัวแปรได้อย่างไรว่ามันเป็น
null
หรือundefined
และสิ่งที่เป็นความแตกต่างระหว่างnull
และundefined
?อะไรคือความแตกต่างระหว่าง
==
และ===
(มันยากที่จะค้นหา Google สำหรับ "===")?
ฉันจะตรวจสอบตัวแปรได้อย่างไรว่ามันเป็นnull
หรือundefined
และสิ่งที่เป็นความแตกต่างระหว่างnull
และundefined
?
อะไรคือความแตกต่างระหว่าง==
และ===
(มันยากที่จะค้นหา Google สำหรับ "===")?
คำตอบ:
ฉันจะตรวจสอบตัวแปรได้อย่างไรว่ามันเป็น
null
หรือundefined
...
เป็นตัวแปรnull
:
if (a === null)
// or
if (a == null) // but see note below
... แต่ทราบหลังจะยังเป็นความจริงถ้ามีa
undefined
มันคือundefined
:
if (typeof a === "undefined")
// or
if (a === undefined)
// or
if (a == undefined) // but see note below
... แต่อีกครั้งโปรดทราบว่าอันสุดท้ายนั้นคลุมเครือ มันจะเป็นจริงถ้าa
เป็นnull
เช่นนั้น
ตอนนี้แม้จะมีวิธีการข้างต้นแล้ว แต่ วิธีการปกติในการตรวจสอบสิ่งเหล่านั้นก็คือการใช้ความจริงที่ว่าพวกเขาเข้าใจผิด :
if (!a) {
// `a` is falsey, which includes `undefined` and `null`
// (and `""`, and `0`, and `NaN`, and [of course] `false`)
}
สิ่งนี้ถูกกำหนดโดยToBooleanในสเป็ค
... และอะไรคือความแตกต่างระหว่าง
null
และundefined
?
พวกเขาทั้งสองค่ามักจะใช้เพื่อบ่งบอกถึงการขาดอะไรบางอย่าง undefined
เป็นรูปแบบทั่วไปที่มากกว่าซึ่งใช้เป็นค่าเริ่มต้นของตัวแปรจนกว่าพวกเขาจะกำหนดค่าอื่น ๆ เนื่องจากค่าของอาร์กิวเมนต์ของฟังก์ชันที่ไม่ได้ให้ไว้เมื่อเรียกใช้ฟังก์ชันและเป็นค่าที่คุณได้รับเมื่อคุณถามวัตถุ สำหรับคุณสมบัติที่ไม่มี แต่มันสามารถใช้อย่างชัดเจนในทุกสถานการณ์เหล่านั้น (มีความแตกต่างระหว่างวัตถุที่ไม่มีคุณสมบัติและมีคุณสมบัติที่มีค่าundefined
นั้นมีความแตกต่างระหว่างการเรียกฟังก์ชันที่มีค่าundefined
สำหรับอาร์กิวเมนต์และปล่อยให้อาร์กิวเมนต์นั้นปิดทั้งหมด)
null
มีความเฉพาะเจาะจงมากกว่าundefined
: มันเป็นการอ้างอิงวัตถุเปล่า แน่นอนว่า JavaScript ถูกพิมพ์อย่างหลวม ๆ แต่ไม่ใช่ทุกสิ่งที่ JavaScript โต้ตอบกับที่จะพิมพ์อย่างหลวม ๆ หาก API เช่น DOM ในเบราว์เซอร์ต้องการอ้างอิงวัตถุที่ว่างเปล่าที่เราใช้ไม่ได้null
undefined
และในทำนองเดียวกันการgetElementById
ดำเนินการของ DOM จะส่งคืนการอ้างอิงวัตถุ - อันที่ถูกต้อง (หากพบองค์ประกอบ DOM) หรือnull
(หากไม่พบ)
ที่น่าสนใจ (หรือไม่) พวกเขาเป็นประเภทของตัวเอง ซึ่งจะกล่าวว่าnull
เป็นค่าเฉพาะในประเภท Null และundefined
เป็นค่าเดียวในประเภทไม่ได้กำหนด
อะไรคือความแตกต่างระหว่าง "==" และ "==="
ข้อแตกต่างระหว่างพวกเขาเพียงอย่างเดียวคือ==
จะใช้การบีบบังคับเพื่อพยายามให้ได้ค่าที่ตรงกันและ===
จะไม่ ดังนั้นสำหรับตัวอย่างเช่น"1" == 1
เป็นความจริงเพราะ"1"
coerces 1
ไป แต่"1" === 1
เป็นเท็จเพราะประเภทไม่ตรงกัน ( "1" !== 1
เป็นจริง) ขั้นตอนแรก (จริง) ของ===
คือ "ประเภทของตัวถูกดำเนินการเหมือนกันหรือไม่" และถ้าคำตอบคือ "ไม่" false
ผลที่ได้คือ ถ้าประเภทที่เหมือนกันก็ไม่ตรงกับสิ่ง==
ที่ไม่
การข่มขู่ประเภทใช้กฎที่ค่อนข้างซับซ้อนและอาจมีผลลัพธ์ที่น่าแปลกใจ (เช่น"" == 0
เป็นจริง)
เพิ่มเติมใน spec:
==
หรือที่เรียกว่าความเท่าเทียม "หลวม")===
)if (a) { ... }
จะหมายถึง "ถ้าa
เป็นความจริง" โดยที่ "ความจริง" เป็นค่าที่ไม่ใช่ศูนย์, ไม่เป็นโมฆะ, ไม่ได้กำหนด, ไม่เป็นเท็จ, ไม่ใช่ค่าสตริงที่ไม่ว่างเปล่า :-)
null
ไม่ใช่วัตถุแต่เป็นความหมายอ้างอิงวัตถุ "ไม่มีวัตถุ" สิ่งนี้มีความสำคัญเนื่องจากเป็นสิ่งที่ใช้กับอินเทอร์เฟซที่โฮสต์ให้เมื่อพวกเขาให้การอ้างอิงวัตถุ แต่ไม่มีหนึ่งที่จะให้ (เช่นnode.nextSibling
เมื่อnode
เป็นองค์ประกอบสุดท้ายในแม่ของมันหรือgetElementById
เมื่อไม่มีองค์ประกอบที่มี ID นั้น) เทคโนโลยีที่โฮสต์ใช้สำหรับสิ่งนี้อาจไม่ยืดหยุ่นเท่ากับ JavaScript เกี่ยวกับตัวแปร / คุณสมบัติประเภทดังนั้นจึงจำเป็นต้องมีการnull
อ้างอิง obj (ตรงข้ามกับundefined
)
typeof null
กลับมา "วัตถุ" ทำให้รู้สึก มูลค่าเพียงอื่น ๆ ที่จะทำให้ความรู้สึกจะเป็น "โมฆะ" typeof undefined
เพราะมันแน่นอนควรจะกลับมาบางสิ่งบางอย่างที่แตกต่างจาก null หมายถึงการอ้างอิงออบเจ็กต์ null ซึ่งอย่างน้อยที่สุดก็หมายความว่าตัวแปรที่เก็บไว้นั้นมีความหมายสำหรับ 'object' บางประเภท ถ้ามันเป็นความผิดพลาดมันเป็นความผิดพลาดที่ดี อย่างไรก็ตามในส่วนที่เกี่ยวกับคำตอบนั้นคำแนะนำเกี่ยวกับundefined
! == undefined
ระหว่างการเขียนสคริปต์ข้ามหน้าต่างเป็นการดีที่จะรู้โดยเฉพาะอย่างยิ่งสำหรับการดีบัก
ความแตกต่างนั้นลึกซึ้ง
ใน JavaScript undefined
ตัวแปรเป็นตัวแปรที่ไม่เคยมีการประกาศหรือไม่เคยกำหนดค่า สมมติว่าคุณประกาศvar a;
เช่นนั้นa
จะเป็นundefined
เพราะไม่เคยกำหนดค่าใด ๆ
แต่ถ้าคุณแล้วกำหนดa = null;
แล้วในขณะนี้จะa
null
ใน JavaScript null
เป็นวัตถุ (ลองtypeof null
ใช้คอนโซล JavaScript หากคุณไม่เชื่อฉัน) ซึ่งหมายความว่า null เป็นค่า (อันที่จริงแล้วundefined
คือค่า)
ตัวอย่าง:
var a;
typeof a; # => "undefined"
a = null;
typeof null; # => "object"
สิ่งนี้สามารถพิสูจน์ได้ว่ามีประโยชน์ในฟังก์ชันอาร์กิวเมนต์ คุณอาจต้องการที่จะมีค่าเริ่มต้น แต่พิจารณา null จะยอมรับได้ ในกรณีนี้คุณสามารถทำได้:
function doSomething(first, second, optional) {
if (typeof optional === "undefined") {
optional = "three";
}
// do something
}
หากคุณละเว้นoptional
พารามิเตอร์doSomething(1, 2) then
ตัวเลือกจะเป็น"three"
สตริง แต่ถ้าคุณผ่านแล้วไม่จำเป็นจะdoSomething(1, 2, null)
null
สำหรับตัวเปรียบเทียบที่เท่ากัน==
และเคร่งครัดเท่ากัน===
ตัวแรกนั้นจะเป็นประเภทที่อ่อนแอในขณะที่ผู้ที่เท่าเทียมกันอย่างเคร่งครัดจะตรวจสอบประเภทของค่าด้วยเช่นกัน นั่นหมายความว่า0 == "0"
จะกลับมาจริง ในขณะที่0 === "0"
จะคืนค่าเท็จเนื่องจากตัวเลขไม่ใช่สตริง
คุณอาจจะใช้ประกอบการเหล่านั้นเพื่อตรวจสอบระหว่าง ตัวอย่างเช่น:undefined
null
null === null # => true
undefined === undefined # => true
undefined === null # => false
undefined == null # => true
กรณีสุดท้ายน่าสนใจเพราะช่วยให้คุณตรวจสอบว่าตัวแปรไม่ได้กำหนดหรือเป็นโมฆะและไม่มีอะไรอื่น:
function test(val) {
return val == null;
}
test(null); # => true
test(undefined); # => true
ข้อมูลจำเพาะเป็นที่สำหรับตอบคำถามเหล่านี้อย่างสมบูรณ์ นี่คือบทสรุป:
x
คุณสามารถ:null
===
ตัวอย่าง:x === null
undefined
โดยทั้งสองวิธีการขั้นพื้นฐาน: การเปรียบเทียบโดยตรงด้วยหรือundefined
typeof
สำหรับเหตุผลต่างๆtypeof x === "undefined"
ผมชอบnull
และundefined
โดยการใช้==
และอาศัยกฎบังคับประเภท arcane เล็กน้อยซึ่งหมายความว่าx == null
ทำสิ่งที่คุณต้องการ==
และ===
คือถ้าตัวถูกดำเนินการเป็นประเภทที่แตกต่างกัน===
จะกลับมาเสมอfalse
ในขณะที่==
จะแปลงตัวถูกดำเนินการหนึ่งหรือทั้งสองเป็นประเภทเดียวกันโดยใช้กฎที่นำไปสู่พฤติกรรมที่ไม่คุ้นเคยบางอย่างเล็กน้อย หากตัวถูกดำเนินการเป็นประเภทเดียวกัน (เช่นทั้งคู่เป็นสตริงเช่นในการtypeof
เปรียบเทียบด้านบน) ==
และ===
จะทำงานเหมือนกันทุกประการอ่านเพิ่มเติม:
ฉันจะตรวจสอบตัวแปรได้อย่างไรว่ามันเป็นโมฆะหรือไม่ได้กำหนด
ตรวจสอบว่าตัวแปรมีค่าที่ถูกต้องเช่นนี้หรือไม่:
if(variable)
มันจะกลับมาจริงถ้าตัวแปรไม่ประกอบด้วย:
ไม่ได้กำหนด
มันหมายความว่าตัวแปรยังไม่ได้ปรับตำแหน่ง
ตัวอย่าง:
var x;
if(x){ //you can check like this
//code.
}
เท่ากับ (==)
ตรวจสอบค่าเท่านั้นไม่เท่ากับประเภทข้อมูล
ตัวอย่าง:
var x = true;
var y = new Boolean(true);
x == y ; //returns true
เพราะมันจะตรวจสอบค่าเท่านั้น
เท่ากับเข้มงวด (===)
ตรวจสอบค่าและประเภทข้อมูลที่ควรจะเหมือนกัน
ตัวอย่าง:
var x = true;
var y = new Boolean(true);
x===y; //returns false.
เพราะมันตรวจสอบประเภทข้อมูล x เป็นชนิดดั้งเดิมและ y เป็นวัตถุบูลีน
โฆษณา 1. null
ไม่ใช่ตัวระบุสำหรับคุณสมบัติของวัตถุทั่วโลกเช่นundefined
สามารถ
โฆษณา 2. การ===
ตรวจสอบค่าและประเภท ==
Dont ต้องประเภทเดียวกันและทำให้การแปลงนัยก่อนที่จะเปรียบเทียบ (โดยใช้.valueOf()
และ.toString()
) ที่นี่คุณมีทั้งหมด ( src ):
ถ้า
== (การปฏิเสธของมัน! = )
=== (การปฏิเสธ! == )
document.all == null
และdocument.all !== null
หากการตรวจสอบ (เชิงตรรกะ) ของคุณเป็นการปฏิเสธ (!) และคุณต้องการจับทั้ง JS null
และundefined
(เนื่องจากเบราว์เซอร์ที่แตกต่างกันจะให้ผลลัพธ์ที่แตกต่างกัน) คุณจะใช้การเปรียบเทียบที่ จำกัด น้อยลงเช่น:
var ItemID = Item.get_id();
if (ItemID != null)
{
//do stuff
}
นี้จะจับทั้งnull
และundefined
ลองด้วยเหตุผลที่แตกต่างกัน คุณสามารถใช้รหัสร้องเพื่อตรวจสอบเงื่อนไขทั้งสี่ (4) สำหรับการตรวจสอบเช่นไม่เป็นโมฆะไม่ว่างไม่ได้ไม่ได้กำหนดและไม่เป็นศูนย์เท่านั้นใช้รหัสนี้ (! (! (ตัวแปร))) ใน javascript และ jquery
function myFunction() {
var data; //The Values can be like as null, blank, undefined, zero you can test
if(!(!(data)))
{
//If data has valid value
alert("data "+data);
}
else
{
//If data has null, blank, undefined, zero etc.
alert("data is "+data);
}
}
==
และ===
เป็นที่อธิบายไว้ที่นี่