ฉันจะตรวจสอบค่าว่างใน JavaScript ได้อย่างไร


573

ฉันจะตรวจสอบค่าว่างใน JavaScript ได้อย่างไร ฉันเขียนโค้ดด้านล่าง แต่มันไม่ทำงาน

if (pass == null || cpass == null || email == null || cemail == null || user == null) {      

    alert("fill all columns");
    return false;  

}   

และฉันจะหาข้อผิดพลาดในโปรแกรม JavaScript ได้อย่างไร


คุณแน่ใจหรือว่าค่าที่คุณกำลังทดสอบนั้นไม่มีค่าจริงและไม่ใช่แค่สตริงว่างเปล่า?
Jan-Peter Vos

72
การทดสอบnullใน js ควรทำกับตัวดำเนินการที่เข้มงวด===
davin

3
@davin - จริง แต่ไม่ใช่ปัญหาที่นี่เพราะถ้ามันเป็นคำสั่งจะยังคงทำงานได้
Mark Kahn

3
@ หมาป่าถ้าฉันคิดว่ามันเป็นปัญหาที่ฉันจะทำให้ความเห็นที่ตอบ ตรวจสอบถ้อยคำของฉันฉันทำคำสั่งทั่วไปเกี่ยวกับภาษาที่ชัดเจนเกี่ยวกับการปฏิบัติของ OP และไม่เสนอว่านี่จะช่วยแก้ปัญหาของเขาได้
davin

2
@TRiG การเปลี่ยนแปลงที่เสนอนั้นแก้ไขลักษณะของคำถามไปยังจุดที่คำตอบ (ไม่ใช่ของฉัน) สูญเสียบริบทและไม่สมเหตุสมผล การแก้ไขควรเป็นความคิดเห็น
ic3b3rg

คำตอบ:


741

Javascript มีความยืดหยุ่นสูงในเรื่องการตรวจสอบค่า "null" ฉันเดาว่าคุณกำลังมองหาสตริงว่างเปล่าซึ่งในกรณีนี้รหัสที่ง่ายกว่านี้จะทำงาน:

if(!pass || !cpass || !email || !cemail || !user){

ซึ่งจะตรวจสอบสำหรับสตริงว่าง ( "") null, undefined, falseและตัวเลข0และNaN

โปรดทราบว่าหากคุณกำลังตรวจสอบหมายเลขโดยเฉพาะมันเป็นความผิดพลาดทั่วไปที่จะพลาด0ด้วยวิธีนี้และnum !== 0เป็นที่ต้องการ ( num !== -1หรือ~num( หรือ(แฮ็กโค้ดที่ตรวจสอบด้วย-1)) สำหรับฟังก์ชั่นที่ส่งคืน-1เช่นindexOf)


4
มันจะมีประโยชน์มากในการทราบว่าส่วนใดของแบบทดสอบนี้สำหรับค่าใด บางครั้งคุณกำลังมองหาสิ่งใดสิ่งหนึ่งโดยเฉพาะ
อนินทรีย์

2
คำสั่งที่ล่าช้า แต่ใช่คุณสามารถทำการทดสอบกับแต่ละ @inorganik ดูคำตอบของฉันด้านล่าง
WebWanderer

28
ผู้อ่านโปรดใช้ความระมัดระวังเมื่อใช้การทดสอบประเภทนี้กับข้อมูลตัวเลข อย่าใช้!หรือ!!เพื่อทดสอบnullหรือใช้undefinedกับข้อมูลที่เป็นตัวเลขเว้นแต่ว่าคุณต้องการที่จะทิ้งค่า 0
NickS

4
คำตอบระบุว่า: "... และตัวเลข0... " ฉันเชื่อว่าคำตอบนี้เหมาะสมอย่างยิ่งสำหรับคำถามตามบริบท (ซึ่งฉันถือว่าเป็น "ชื่อผู้ใช้รหัสผ่านอีเมล") พวกเขาไม่ได้ตรวจสอบ0ค่า อย่างไรก็ตามด้วยความนิยมของคำถามและคำตอบนี้ฉันยอมรับว่ามันคุ้มค่าที่จะกล่าวถึงในคำตอบ
Mark Kahn

4
@Hendeca - กลอกตาไปอ่านรหัสในคำถามจริง มันถามอย่างชัดเจนเกี่ยวกับชื่อผู้ใช้และรหัสผ่าน ฉันไม่ได้คาดเดาอะไรเลยฉันแค่สุภาพ คุณใส่ใจกับความจริงที่ว่าฉันตอบสิ่งที่พวกเขาต้องการไม่ใช่สิ่งที่พวกเขาถามซึ่งไร้สาระ นี่คือดังนั้นส่วนใหญ่เวลาที่คนไม่รู้ว่าพวกเขาควรจะถาม ในบริบทของคำถามเดิมคำตอบนี้ถูกต้อง ตอนนี้หยุดเพิ่มเสียงรบกวน
Mark Kahn

418

เพื่อตรวจสอบ null เฉพาะที่คุณจะใช้นี้

if (variable === null)

การทดสอบนี้จะเฉพาะผ่านสำหรับnullและจะไม่ผ่านสำหรับ"", undefined, false, หรือ0NaN

นอกจากนี้ฉันได้ให้การตรวจสอบที่แน่นอนสำหรับค่า "เหมือนจริง" แต่ละรายการ (รายการหนึ่งที่จะส่งกลับค่าจริงสำหรับ!variable)

หมายเหตุสำหรับบางส่วนของการตรวจสอบแน่นอนคุณจะต้องดำเนินการใช้และabsolutely equals: ===typeof

ฉันได้สร้างJSFiddleที่นี่เพื่อแสดงการทดสอบแต่ละรายการที่ใช้การได้

นี่คือผลลัพธ์ของการตรวจสอบแต่ละครั้ง:

Null Test:

if (variable === null)

- variable = ""; (false) typeof variable = string

- variable = null; (true) typeof variable = object

- variable = undefined; (false) typeof variable = undefined

- variable = false; (false) typeof variable = boolean

- variable = 0; (false) typeof variable = number

- variable = NaN; (false) typeof variable = number



Empty String Test:

if (variable === '')

- variable = ''; (true) typeof variable = string

- variable = null; (false) typeof variable = object

- variable = undefined; (false) typeof variable = undefined

- variable = false; (false) typeof variable = boolean

- variable = 0; (false) typeof variable = number

- variable = NaN; (false) typeof variable = number




Undefined Test:

if (typeof variable == "undefined")

-- or --

if (variable === undefined)

- variable = ''; (false) typeof variable = string

- variable = null; (false) typeof variable = object

- variable = undefined; (true) typeof variable = undefined

- variable = false; (false) typeof variable = boolean

- variable = 0; (false) typeof variable = number

- variable = NaN; (false) typeof variable = number



False Test:

if (variable === false)

- variable = ''; (false) typeof variable = string

- variable = null; (false) typeof variable = object

- variable = undefined; (false) typeof variable = undefined

- variable = false; (true) typeof variable = boolean

- variable = 0; (false) typeof variable = number

- variable = NaN; (false) typeof variable = number



Zero Test:

if (variable === 0)

- variable = ''; (false) typeof variable = string

- variable = null; (false) typeof variable = object

- variable = undefined; (false) typeof variable = undefined

- variable = false; (false) typeof variable = boolean

- variable = 0; (true) typeof variable = number

- variable = NaN; (false) typeof variable = number



NaN Test:

if (typeof variable == 'number' && !parseFloat(variable) && variable !== 0)

-- or --

if (isNaN(variable))

- variable = ''; (false) typeof variable = string

- variable = null; (false) typeof variable = object

- variable = undefined; (false) typeof variable = undefined

- variable = false; (false) typeof variable = boolean

- variable = 0; (false) typeof variable = number

- variable = NaN; (true) typeof variable = number

ขณะที่คุณสามารถดูจะเล็ก ๆ น้อย ๆ ที่ยากขึ้นไปทดสอบกับNaN;


9
วัตถุประสงค์ของการตรวจสอบประเภทคืออะไรหากคุณใช้===ความเท่าเทียมอย่างเข้มงวด? ขอบคุณ นอกจากนี้สำหรับการทดสอบ NaN คุณสามารถใช้isNaN(value)ที่จะกลับมาtrueเฉพาะในกรณีที่ตัวแปรเท่ากับ NaN
Michael Malinovskij

16
มีกรณีที่variable === nullแต่ไม่ใช่ประเภท "วัตถุ" หรือไม่? ถ้าไม่มีทำไมไม่ลดความซับซ้อนของการตรวจสอบที่จะvariable === nullโยนออกร่วมสอง? ขอบคุณ
หูหนาน Rostomyan

7
@HunanRostomyan คำถามที่ดีและตรงไปตรงมาไม่ฉันไม่คิดว่ามี คุณน่าจะปลอดภัยพอที่จะใช้variable === nullที่ฉันเพิ่งทดสอบที่นี่ใน JSFiddleนี้ เหตุผลที่ฉันใช้ `&& typeof variable === 'object' 'ไม่เพียง แต่จะแสดงให้เห็นถึงข้อเท็จจริงที่น่าสนใจว่าnullค่าเป็น typeof objectแต่ยังเพื่อให้สอดคล้องกับการไหลของเช็คอื่น ๆ แต่ใช่ในการสรุป, variable === nullคุณมีความปลอดภัยที่จะใช้เพียงแค่
WebWanderer

1
jsfiddle.net/neoaptt/avt1cgem/1นี่คือคำตอบนี้แบ่งออกเป็นฟังก์ชั่น ไม่ค่อยมีประโยชน์เท่าไหร่ แต่ฉันก็ทำไปแล้ว
Neoaptt

1
ฉันจะทำบางสิ่งที่แทบจะไม่เป็นความคิดที่ดีเลย: เปลี่ยนรหัสในคำตอบนี้ เอาการทดสอบชนิดวัตถุที่ไม่จำเป็นออกโดยสิ้นเชิงเมื่อทำการตรวจสอบ null นี่เป็นข้อมูลโค้ดพื้นฐาน : ไม่ใช่ความคิดที่ดีที่จะมีแม้แต่ผู้เริ่มต้นเพียงคนเดียวที่เรียนรู้ผิดว่าพวกเขาจำเป็นต้องทำการทดสอบ verbose
ToolmakerSteve

59

เพียงแทนที่==ด้วย===ในทุกสถานที่

== เป็นการเปรียบเทียบความเท่าเทียมหรือหลวม

=== เป็นการเปรียบเทียบความเท่าเทียมอย่างเข้มงวด

ดูบทความ MDN เกี่ยวกับการเปรียบเทียบความเท่าเทียมกันและความเหมือนกันสำหรับรายละเอียดเพิ่มเติม


2
นี้จะทำงานเฉพาะถ้าคุณพิจารณาที่จะไม่undefined nullมิฉะนั้นจะนำไปสู่พฤติกรรมที่ไม่คาดคิดมากมาย โดยทั่วไปหากคุณสนใจทั้งในและnull/ undefinedหรือค่าที่ไม่ถูกต้องให้ใช้==(หนึ่งในสองสามกรณีที่คุณควรทำ)
Andrew เหมา

2
@AndrewMao undefined ไม่ได้ null : stackoverflow.com/a/5076962/753237
ic3b3rg

2
ฉันเชื่อว่านั่นคือสิ่งที่ @AndrewMao พูดจริง ๆ ประโยคแรกของเขาอาจถูกเขียนใหม่ "ทำงานได้เฉพาะในสถานการณ์ที่ไม่ได้กำหนดและไม่มีค่าเท่ากันในทางปฏิบัติ"
BobRodes

1
ขอบคุณสำหรับคำชี้แจง @BobRodes เขียนที่น่าสงสารของฉันฉันขอบคุณมัน :)
แอนดรูเหมา

@AndrewMao คุณจะยินดีมาก และฉันจะไม่เรียกการเขียนของคุณว่าแย่ ฉันว่ามันดีกว่าค่าเฉลี่ย :)
BobRodes

30

ตัวดำเนินการที่เท่าเทียมกันอย่างเข้มงวด: -

เราสามารถตรวจสอบโมฆะโดย ===

if ( value === null ){

}

เพียงแค่ใช้ if

if( value ) {

}

จะประเมินค่าเป็นจริงหากค่าไม่ใช่ :

  • โมฆะ
  • ไม่ได้กำหนด
  • น่าน
  • สตริงว่าง ("")
  • เท็จ
  • 0

9

ปรับปรุงคำตอบที่ได้รับการยอมรับโดยการตรวจสอบอย่างชัดเจนnullแต่ใช้ไวยากรณ์ที่ง่ายขึ้น:

if ([pass, cpass, email, cemail, user].every(x=>x!==null)) {
    // your code here ...
}

// Test
let pass=1, cpass=1, email=1, cemail=1, user=1; // just to test

if ([pass, cpass, email, cemail, user].every(x=>x!==null)) {
    // your code here ...
    console.log ("Yayy! None of them are null");
} else {
    console.log ("Oops! At-lease one of them is null");
}


6

ประการแรกคุณมีคำสั่ง return โดยไม่มีส่วนของฟังก์ชั่น โอกาสที่จะเกิดข้อผิดพลาด

วิธีที่สะอาดกว่าในการทำเช็คของคุณคือใช้! ผู้ประกอบการ:

if (!pass || !cpass || !email || !cemail || !user) {

    alert("fill all columns");

}

12
รหัสนั้นน่าจะอยู่ในฟังก์ชั่นเขาก็ไม่ได้แสดงให้เห็น)
Mark Kahn

4

คุณสามารถใช้ลองจับได้ในที่สุด

 try {
     document.getElementById("mydiv").innerHTML = 'Success' //assuming "mydiv" is undefined
 } catch (e) {

     if (e.name.toString() == "TypeError") //evals to true in this case
     //do something

 } finally {}   

คุณสามารถthrowแก้ไขข้อผิดพลาดของคุณเอง ดูนี่สิ


1
ฉันคิดว่านี่มีคุณสมบัติเป็นรหัส 'หวาดระแวง' ถ้าคุณเขียนอะไรแบบนี้จริง ๆ มันจะเป็นไปได้ด้วยความเข้าใจว่า "mydiv" นั้นอาจไม่มี เราไม่ควรเข้าถึงรหัสนี้เว้นแต่ว่าเรามั่นใจว่าเป็นกรณีนี้และเรามีช่องทางมากมายเช่นรหัสตอบกลับเพื่อให้แน่ใจว่าเรามั่นใจก่อนที่จะลองใช้สายดังกล่าว
calql8edkos

อย่าใช้ลองและจับเพื่อควบคุมการไหล นี่ไม่ใช่ทางออกที่ดี
Andrew S

4

ใน JavaScript nullสตริงไม่เท่ากับ

บางทีคุณอาจคาดหวังว่าpass == nullจะเป็นจริงเมื่อpassเป็นสตริงว่างเปล่าเพราะคุณทราบว่าตัว==ดำเนินการความเท่าเทียมกันแบบหลวมนั้นมีการข่มขู่ประเภทบางประเภท

ตัวอย่างเช่นการแสดงออกนี้เป็นจริง:

'' == 0

ในทางตรงกันข้ามผู้ดำเนินการความเท่าเทียมอย่างเข้มงวด===กล่าวว่าสิ่งนี้เป็นเท็จ

'' === 0

ระบุว่า''และ0มีความเท่าเทียมกันอย่างหลวม ๆ คุณอาจมีเหตุผลการคาดเดาว่า''และnullมีความเท่าเทียมกันอย่างหลวม ๆ อย่างไรก็ตามพวกเขาไม่ได้

การแสดงออกนี้เป็นเท็จ:

'' == null

ผลลัพธ์ของการเปรียบเทียบสตริงใด ๆ กับnullเป็นเท็จ ดังนั้นpass == nullและการทดสอบอื่น ๆ ทั้งหมดของคุณเป็นเท็จเสมอและผู้ใช้จะไม่ได้รับการแจ้งเตือน

ในการแก้ไขรหัสของคุณให้เปรียบเทียบแต่ละค่ากับสตริงว่าง:

pass === ''

หากคุณแน่ใจว่าpassเป็นสตริงpass == ''ก็จะทำงานได้เช่นกันเพราะมีเพียงสตริงว่างเปล่าเท่านั้นที่เท่ากับสตริงว่าง ในทางกลับกันผู้เชี่ยวชาญบางคนบอกว่าเป็นแนวปฏิบัติที่ดีที่จะใช้ความเสมอภาคที่เข้มงวดใน JavaScript เสมอเว้นแต่คุณต้องการทำแบบบังคับชนิดที่ตัวดำเนินการความเท่าเทียมกันแบบหลวมทำมาโดยเฉพาะ

หากคุณต้องการทราบว่าค่าใดที่มีค่าเท่ากันให้ดูตาราง "การเปรียบเทียบแบบ Sameness" ในบทความ Mozilla ในหัวข้อนี้


4

เพื่อตรวจสอบundefinedและnullใน javascript คุณต้องเขียนดังนี้:

if (!var) {
        console.log("var IS null or undefined");
} else {
        console.log("var is NOT null or undefined");
}

6
! var เป็นจริงด้วย 0, "", NaN และเท็จเช่นกัน
แมตต์

3

นี่คือความคิดเห็นเกี่ยวกับวิธีแก้ปัญหาของ WebWanderer เกี่ยวกับการตรวจสอบสำหรับ NaN (ฉันยังไม่มีตัวแทนมากพอที่จะแสดงความคิดเห็นอย่างเป็นทางการ) การแก้ปัญหาอ่านว่า

if(!parseInt(variable) && variable != 0 && typeof variable === "number")

แต่นี้จะล้มเหลวสำหรับตัวเลขที่มีเหตุผลซึ่งจะปัดเศษเช่น0 variable = 0.1การทดสอบที่ดีกว่าคือ:

if(isNaN(variable) && typeof variable === "number")

1
ขอบคุณที่ชี้ให้เห็นข้อผิดพลาดของกาเบรียลฉันได้ใส่การแก้ไขลงในคำตอบของฉัน นอกเหนือจากนั้นฉันสามารถแก้ไขการทดสอบโดยเปลี่ยนparseIntเป็นparseFloat (ซึ่งควรเห็นได้ชัดตั้งแต่แรก) ฉันหลีกเลี่ยงการใช้isNanฟังก์ชั่นนี้เพราะฉันรู้สึกราวกับว่านักพัฒนาหลายคนดูฟังก์ชั่นเช่นisNaN"กล่องวิเศษ" ที่ค่าเข้าไปและบูลีนออกมาและฉันต้องการทดสอบในเชิงลึกมากขึ้น แต่ใช่การทดสอบที่แนะนำของคุณจะใช้งานได้ดีและใช้งานได้อย่างสมบูรณ์แบบ ขออภัยฉันไม่ได้สังเกตโพสต์ของคุณจนกระทั่งตอนนี้
WebWanderer

1
เยี่ยมมากดูเหมือนว่าจะได้ผล ขอบคุณสำหรับความคิดเห็นเกี่ยวกับสาเหตุที่คุณหลีกเลี่ยงisNaNเช่นกันฉันสามารถทำตามตรรกะนั้นได้ นอกจากนี้ยังมีวิธี Underscore.js ซึ่งดูเหมือนจะทำให้เกิดความสับสน / blackbox มากขึ้น แต่ก็ไม่ควรNaN !== NaNลืมเพราะมันใช้ประโยชน์จาก Object.prototype.toString.call(variable) === '[object Number]' && variable !== +variable
Gabriel

2

ที่จริงฉันคิดว่าคุณอาจต้องใช้ if (value !== null || value !== undefined) เพราะถ้าคุณใช้if (value)คุณอาจกรอง 0 หรือค่าเท็จ

พิจารณาทั้งสองฟังก์ชั่น:

const firstTest = value => {
    if (value) {
        console.log('passed');
    } else {
        console.log('failed');
    }
}
const secondTest = value => {
    if (value !== null && value !== undefined) {
        console.log('passed');
    } else {
        console.log('failed');
    }
}

firstTest(0);            // result: failed
secondTest(0);           // result: passed

firstTest(false);        // result: failed
secondTest(false);       // result: passed

firstTest('');           // result: failed
secondTest('');          // result: passed

firstTest(null);         // result: failed
secondTest(null);        // result: failed

firstTest(undefined);    // result: failed
secondTest(undefined);   // result: failed

ในสถานการณ์ของฉันฉันแค่ต้องตรวจสอบว่าค่าเป็นโมฆะและไม่ได้กำหนดและฉันไม่ต้องการที่จะกรอง0หรือfalseหรือ''ค่า ดังนั้นฉันจึงใช้การทดสอบครั้งที่สอง แต่คุณอาจต้องกรองพวกเขาด้วยซึ่งอาจทำให้คุณใช้การทดสอบครั้งแรก


1

ฉันพบวิธีอื่นในการทดสอบว่าค่าเป็นโมฆะหรือไม่:

if(variable >= 0 && typeof variable === "object")

nullทำหน้าที่เป็นnumberและobjectในเวลาเดียวกัน เปรียบเทียบnull >= 0หรือผลลัพธ์ในnull <= 0 trueเปรียบเทียบnull === 0หรือnull > 0หรือnull < 0จะส่งผลให้การเท็จ แต่nullก็ยังเป็นวัตถุที่เราสามารถตรวจพบว่ามันเป็นโมฆะ

ฉันทำฟังก์ชั่นที่ซับซ้อนมากขึ้นnatureofแม่มดจะทำดีกว่า typeof และสามารถบอกสิ่งที่ประเภทเพื่อรวมหรือให้จัดกลุ่ม

/* function natureof(variable, [included types])
included types are 
    null - null will result in "undefined" or if included, will result in "null"
    NaN - NaN will result in "undefined" or if included, will result in "NaN"
    -infinity - will separate negative -Inifity from "Infinity"
    number - will split number into "int" or "double"
    array - will separate "array" from "object"
    empty - empty "string" will result in "empty" or
    empty=undefined - empty "string" will result in "undefined"
*/
function natureof(v, ...types){
/*null*/            if(v === null) return types.includes('null') ? "null" : "undefined";
/*NaN*/             if(typeof v == "number") return (isNaN(v)) ? types.includes('NaN') ? "NaN" : "undefined" : 
/*-infinity*/       (v+1 === v) ? (types.includes('-infinity') && v === Number.NEGATIVE_INFINITY) ? "-infinity" : "infinity" : 
/*number*/          (types.includes('number')) ? (Number.isInteger(v)) ? "int" : "double" : "number";
/*array*/           if(typeof v == "object") return (types.includes('array') && Array.isArray(v)) ? "array" : "object";
/*empty*/           if(typeof v == "string") return (v == "") ? types.includes('empty') ? "empty" : 
/*empty=undefined*/ types.includes('empty=undefined') ? "undefined" : "string" : "string";
                    else return typeof v
}

// DEMO
let types = [null, "", "string", undefined, NaN, Infinity, -Infinity, false, "false", true, "true", 0, 1, -1, 0.1, "test", {var:1}, [1,2], {0: 1, 1: 2, length: 2}]

for(i in types){
console.log("natureof ", types[i], " = ", natureof(types[i], "null", "NaN", "-infinity", "number", "array", "empty=undefined")) 
}


1

ฉันสร้างฟังก์ชั่นง่าย ๆ ที่ใช้งานได้ดีมาก:

function safeOrZero(route) {
  try {
    Function(`return (${route})`)();
  } catch (error) {
    return 0;
  }
  return Function(`return (${route})`)();
}

เส้นทางเป็นสิ่งที่มีค่าที่สามารถระเบิดได้ ฉันใช้สำหรับ jQuery / cheerio และวัตถุและเช่น

ตัวอย่างที่ 1: const testObj = {items: [{ val: 'haya' }, { val: null }, { val: 'hum!' }];};วัตถุง่ายๆเช่นนี้

แต่มันอาจเป็นวัตถุที่มีขนาดใหญ่มากที่เราไม่ได้ทำ ดังนั้นฉันผ่านมันไป:

let value1 = testobj.items[2].val;  // "hum!"
let value2 = testobj.items[3].val;  // Uncaught TypeError: Cannot read property 'val' of undefined

let svalue1 = safeOrZero(`testobj.items[2].val`)  // "hum!"
let svalue2 = safeOrZero(`testobj.items[3].val`)  // 0

แน่นอนถ้าคุณต้องการคุณสามารถใช้nullหรือ'No value'... สิ่งที่เหมาะกับความต้องการของคุณ

โดยปกติแล้วแบบสอบถาม DOM หรือตัวเลือก jQuery อาจมีข้อผิดพลาดหากไม่พบ แต่ใช้สิ่งที่ชอบ:

const bookLink = safeOrZero($('span.guidebook > a')[0].href);
if(bookLink){
  [...]
}

1

คุณสามารถใช้โมดูลบ้านพักเพื่อตรวจสอบค่าเป็นโมฆะหรือไม่ได้กำหนด

_.isNil(value)
Example 

 country= "Abc"
    _.isNil(country)
    //false

   state= null
    _.isNil(state)
    //true

city= undefined
    _.isNil(state)
    //true

   pin= true
    _.isNil(pin)
    // false   

ลิงค์อ้างอิง: https://lodash.com/docs/#isNil


0

สิ่งนี้จะไม่ทำงานในกรณีที่ค่าบูลีนมาจากฐานข้อมูลเช่น:

 value = false

 if(!value) {
   // it will change all false values to not available
   return "not available"
 }

0

AFAIK ในJAVASCRIPTเมื่อตัวแปรประกาศundefinedแต่ยังไม่ได้รับมอบหมายค่าชนิดของมันคือ เพื่อให้เราสามารถตรวจสอบตัวแปรแม้ว่ามันจะเป็นobjectบางคนถือเช่นในสถานที่ของมูลค่า

สร้างวิธีการช่วยเหลือสำหรับการตรวจสอบความว่างเปล่าที่ส่งคืนtrueและใช้ใน API ของคุณ

ฟังก์ชั่นผู้ช่วยเพื่อตรวจสอบว่าตัวแปรว่างเปล่า:

function isEmpty(item){
    if(item){
        return false;
    }else{
        return true;
    }
}

ลองเรียก API พิเศษ:

try {

    var pass, cpass, email, cemail, user; // only declared but contains nothing.

    // parametrs checking
    if(isEmpty(pass) || isEmpty(cpass) || isEmpty(email) || isEmpty(cemail) || isEmpty(user)){
        console.log("One or More of these parameter contains no vlaue. [pass] and-or [cpass] and-or [email] and-or [cemail] and-or [user]");
    }else{
        // do stuff
    }

} catch (e) {
    if (e instanceof ReferenceError) {
        console.log(e.message); // debugging purpose
        return true;
    } else {
        console.log(e.message); // debugging purpose
        return true;
    }
}

กรณีทดสอบบางส่วน:

var item = ""; // isEmpty? true
var item = " "; // isEmpty? false
var item; // isEmpty? true
var item = 0; // isEmpty? true
var item = 1; // isEmpty? false
var item = "AAAAA"; // isEmpty? false
var item = NaN; // isEmpty? true
var item = null; // isEmpty? true
var item = undefined; // isEmpty? true

console.log("isEmpty? "+isEmpty(item));

1
อะไร? คำตอบนี้ไม่มีส่วนเกี่ยวข้องกับโพสต์นี้ คุณโพสต์คำตอบนี้บนกระทู้นี้โดยบังเอิญหรือไม่?
WebWanderer

นี้ฟังก์ชั่นทำงานเหมือนกันisEmpty !ไม่จำเป็นต้องคิดค้นฟังก์ชั่น if (!pass || !cpass || !email ...)เพียงแค่ทำ (ซึ่งแสดงให้เห็นแล้วในคำตอบที่ยอมรับ) และตามความคิดเห็นของ WebWanderer ซึ่งอยู่ตรงกลางของโพสต์นี้ "การลองใช้ API พิเศษที่เรียกว่าจับได้" ดูเหมือนจะไม่เกี่ยวข้องกับคำถามนี้ โปรดอธิบายความตั้งใจของคุณ - มันมีประโยชน์เมื่อไหร่? มันเกี่ยวข้องกับคำถามอย่างไร
ToolmakerSteve

0

การตรวจสอบเงื่อนไขข้อผิดพลาด:

// Typical API response data
let data = {
  status: true,
  user: [],
  total: 0,
  activity: {sports: 1}
}

// A flag that checks whether all conditions were met or not
var passed = true;

// Boolean check
if (data['status'] === undefined || data['status'] == false){
  console.log("Undefined / no `status` data");
  passed = false;
}

// Array/dict check
if (data['user'] === undefined || !data['user'].length){
  console.log("Undefined / no `user` data");
  passed = false;
}

// Checking a key in a dictionary
if (data['activity'] === undefined || data['activity']['time'] === undefined){
   console.log("Undefined / no `time` data");
   passed = false;
}

// Other values check
if (data['total'] === undefined || !data['total']){
  console.log("Undefined / no `total` data");
  passed = false;
}

// Passed all tests?
if (passed){
  console.log("Passed all tests");
}

-1

ลองสิ่งนี้:

if (!variable && typeof variable === "object") {
    // variable is null
}

null เป็นสิ่งเดียวที่เป็น "เท็จ" และ typeof ส่งคืน "วัตถุ"
user5520516

2
ดีกว่าif (variable === null)ไง? นอกจากนี้ยังมีคนอยู่แล้วให้คำตอบว่าปีที่แล้ว: stackoverflow.com/a/27550756/218196
เฟลิกซ์ลิ่ง
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.