คำตอบสั้น ๆ :
ไม่พวกเขาไม่เหมือนกัน
แต่นี่:
if (!fields) {
...
}
เหมือนกับสิ่งนี้:
if ((fields === null) || (fields === undefined) || (fields === 0) || (fields === '') || (fields === NaN) || (fields === flase)) {
...
}
ยาว (และดีกว่า) คำตอบ:
ก่อนอื่นเรามาพูดเกี่ยวกับค่าความจริงและความเท็จ
มันคือทั้งหมดที่เกี่ยวกับสิ่งที่เกิดขึ้นเมื่อคุณประเมินบางสิ่งเป็นบูลีน ใน JavaScript สิ่งนี้เกิดขึ้นเมื่อคุณใช้สิ่งต่าง ๆ เช่นif
ข้อความสั่ง ดำเนินการทางตรรกะชอบ||
, !
หรือ&&
; หรือBoolean()
ฟังก์ชั่น
Boolean()
ฟังก์ชั่นรับค่าและผลตอบแทนอย่างใดอย่างหนึ่งหรือtrue
false
ตัวอย่างเช่น:
var age = 1; // Let's evaluate age as a boolean
Boolean(age); // true
ไปข้างหน้าและลองสิ่งนี้ในการจำลองโหนด
บูลีนจะไม่สามารถtrue
หรือfalse
เพื่อให้ค่าตอบแทนของBoolean()
ต้องเป็นได้ทั้งหรือtrue
false
ในกรณีนี้เราผ่านในค่า1
และเมื่อประเมินเป็นแบบบูล, คือ1
true
สำคัญ: เมื่อประเมินเป็นบูลีนค่าต้องเป็นจริงหรือเท็จ นี่เป็นเพียงสองทางเลือกเท่านั้น
ใน JavaScript มีค่าเท็จเพียง6ค่า ค่าที่จะถูกfalse
ประเมินเมื่อเป็นบูลีน พวกเขาจะ: false
, 0
, ""
, null
, และundefined
NaN
ดังนั้นหากค่าใด ๆ เหล่านี้ถูกประเมินว่าเป็นบูลีนค่าเหล่านั้นจะเป็นเท็จ:
Boolean(false) // false
Boolean(0) // false
Boolean("") // false
Boolean(null) // false
Boolean(undefined) // false
Boolean(NaN) // false
ซึ่งหมายความว่าค่าอื่น ๆ ใน JavaScript จะถูกtrue
ประเมินเมื่อเป็นบูลีน ดังนั้นคุณค่าอื่น ๆ ใน JavaScript จึงเป็นจริง
อีกวิธีง่าย ๆ ในการประเมินบางสิ่งบางอย่างตามboolean
คือโดยใช้ตัว!
ดำเนินการ เช่นเดียวกับBoolean
ฟังก์ชั่นนี้ประเมินค่าเป็นบูลีน แต่ค่า truthy กลายเป็นfalse
และค่า falsy true
กลายเป็น
!false // true
!0 // true
!"" / true
!null // true
!undefined // true
!NaN // true
ลองอีกครั้งในการจำลองโหนดหรือบางสิ่งเพื่อให้แน่ใจว่าคุณเข้าใจ
ดังนั้นคำสั่งนี้:
if (!fields) {
...
}
กำลังพูดถึงสิ่งต่อไปนี้: "ถ้าfields
เมื่อประเมินว่าเป็นบูลีนเป็นเท็จให้รันโค้ดภายในคำสั่ง if นี้"
สำหรับข้อความแรกของคุณ:
var fields = options.fields || ['id', 'query'];
คุณกำลังทำงานกับโอเปอเรเตอร์หรือตรรกะซึ่งควรค่าแก่การอ่านเพื่อให้แน่ใจว่าคุณเข้าใจ https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Logical_Operators