คำตอบสั้น ๆ :
ไม่พวกเขาไม่เหมือนกัน
แต่นี่:
if (!fields) {
...
}
เหมือนกับสิ่งนี้:
if ((fields === null) || (fields === undefined) || (fields === 0) || (fields === '') || (fields === NaN) || (fields === flase)) {
...
}
ยาว (และดีกว่า) คำตอบ:
ก่อนอื่นเรามาพูดเกี่ยวกับค่าความจริงและความเท็จ
มันคือทั้งหมดที่เกี่ยวกับสิ่งที่เกิดขึ้นเมื่อคุณประเมินบางสิ่งเป็นบูลีน ใน JavaScript สิ่งนี้เกิดขึ้นเมื่อคุณใช้สิ่งต่าง ๆ เช่นifข้อความสั่ง ดำเนินการทางตรรกะชอบ||, !หรือ&&; หรือBoolean()ฟังก์ชั่น
Boolean()ฟังก์ชั่นรับค่าและผลตอบแทนอย่างใดอย่างหนึ่งหรือtruefalse
ตัวอย่างเช่น:
var age = 1; // Let's evaluate age as a boolean
Boolean(age); // true
ไปข้างหน้าและลองสิ่งนี้ในการจำลองโหนด
บูลีนจะไม่สามารถtrueหรือfalseเพื่อให้ค่าตอบแทนของBoolean() ต้องเป็นได้ทั้งหรือtrue falseในกรณีนี้เราผ่านในค่า1และเมื่อประเมินเป็นแบบบูล, คือ1true
สำคัญ: เมื่อประเมินเป็นบูลีนค่าต้องเป็นจริงหรือเท็จ นี่เป็นเพียงสองทางเลือกเท่านั้น
ใน 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