ก่อนอื่นนิพจน์ประกอบไปด้วยการแทนที่ไม่ใช่สำหรับการสร้าง if / else มันเทียบเท่ากับการสร้าง if / else ที่ส่งคืนค่า นั่นคือประโยค if / else คือรหัสนิพจน์ประกอบไปด้วยคือนิพจน์ซึ่งหมายความว่าจะส่งคืนค่า
นี่หมายถึงหลายสิ่ง:
- ใช้นิพจน์ประกอบไปด้วยก็ต่อเมื่อคุณมีตัวแปรทางด้านซ้ายของค่า
=
นั้นเพื่อกำหนดค่าส่งคืน
- ใช้นิพจน์ประกอบไปด้วยก็ต่อเมื่อค่าที่ส่งคืนเป็นหนึ่งในสองค่า (หรือใช้นิพจน์ที่ซ้อนกันหากเหมาะสม)
- เป็นส่วนหนึ่งของการแสดงออก (หลังและหลัง?) แต่ละคนควรกลับค่าไม่มีผลข้างเคียง (การแสดงออก
x = true
ผลตอบแทนที่แท้จริงเป็นนิพจน์ทั้งหมดกลับค่าที่ผ่านมา แต่ยังมีการเปลี่ยนแปลงโดยไม่ต้อง x x มีผลกระทบใด ๆ กับค่าส่งกลับ)
ในระยะสั้น - การใช้ 'ถูกต้อง' ของนิพจน์ประกอบไปด้วยคือ
var resultofexpression = conditionasboolean ? truepart: falsepart;
แทนที่จะเป็นตัวอย่างของคุณcondition ? x=true : null ;
ซึ่งคุณใช้นิพจน์ประกอบไปด้วยเพื่อตั้งค่าx
คุณสามารถใช้สิ่งนี้:
condition && (x = true);
นี่ยังคงเป็นนิพจน์และอาจไม่ผ่านการตรวจสอบดังนั้นวิธีการที่ดียิ่งขึ้นก็คือ
void(condition && x = true);
อันสุดท้ายจะผ่านการตรวจสอบ
แต่จากนั้นอีกครั้งหากค่าที่คาดหวังคือบูลีนให้ใช้ผลลัพธ์ของนิพจน์เงื่อนไขในตัวเอง
var x = (condition); // var x = (foo == "bar");
ปรับปรุง
ในส่วนที่เกี่ยวข้องกับตัวอย่างของคุณนี้น่าจะเหมาะสมกว่า:
defaults.slideshowWidth = defaults.slideshowWidth || obj.find('img').width()+'px';
condition ? x = true : null;
x = (condition ? true : null);
นอกจากนี้ในจาวาสคริปต์null
จะประเมินผลเป็นเท็จดังนั้นในกรณีนี้คุณสามารถทำได้x = (condition);
และได้ผลลัพธ์เดียวกัน