اول از همه بگم که
[] یا {} یک مقدار falsy نیست این خط کد زیر وارد بلوک ایف میشه
let arr = [];
if (arr) {
alert('true');
}
ولی اگ همین شرطو با == یا arr.length چک کنی نتیجه false میشه و وارد بلوک ایف نمیشه
مقایسه اولی جفتشون ارایه هستن و توی جاوا اسکریپت شی حساب میشن و مقدار اصلی(Primitive ) نیستن و رفرنس تایپ حساب میشن رفرنسشون یکی نیست بر اساس رفرنسشون مقایسه میشن (اطلاعات تکمیلی در آینده)
مقایسه دومی وقتی دوتا مقدار از نوع متقاوت رو با عملگر == برسی میکنی توسط این عملگر تبدیل میشن به نوع نامبر
اینجا یه مقدار اصلی داریم و یک شی ک اینجا شی تبدیل میشه به مقدار اصلی و بعد به رشته خالی تبدیل میشه و رشته خالی تبدیل میشه به 0
و 0== 0 ترو هستش
مقایسه سومی یکم گیج کننده به نظر میرسه
عملگر یگانه ! الویت بالاتری داره پس اول [] تبدیل میشه به یک مقدار بولی و false اش میکنه باز چون دو نوع متفاوت حساب میشن ارایه سمت چپ تبدیل به رشته خالی و 0 میشه و در نهایت نتیجه true هستش
[] یا {} یک مقدار falsy نیست این خط کد زیر وارد بلوک ایف میشه
let arr = [];
if (arr) {
alert('true');
}
ولی اگ همین شرطو با == یا arr.length چک کنی نتیجه false میشه و وارد بلوک ایف نمیشه
مقایسه اولی جفتشون ارایه هستن و توی جاوا اسکریپت شی حساب میشن و مقدار اصلی(Primitive ) نیستن و رفرنس تایپ حساب میشن رفرنسشون یکی نیست بر اساس رفرنسشون مقایسه میشن (اطلاعات تکمیلی در آینده)
مقایسه دومی وقتی دوتا مقدار از نوع متقاوت رو با عملگر == برسی میکنی توسط این عملگر تبدیل میشن به نوع نامبر
اینجا یه مقدار اصلی داریم و یک شی ک اینجا شی تبدیل میشه به مقدار اصلی و بعد به رشته خالی تبدیل میشه و رشته خالی تبدیل میشه به 0
و 0== 0 ترو هستش
مقایسه سومی یکم گیج کننده به نظر میرسه
عملگر یگانه ! الویت بالاتری داره پس اول [] تبدیل میشه به یک مقدار بولی و false اش میکنه باز چون دو نوع متفاوت حساب میشن ارایه سمت چپ تبدیل به رشته خالی و 0 میشه و در نهایت نتیجه true هستش