تو استادی ایتم 2 با حالت های خاص و استثنا های JS بیشتر آشنا شدم. چند تا از این حالت ها برام خیلی جالب بود که جلوتر توضیحشون دادم:
?شباهت ظاهری String و Array ها:
در نگاه اول به نظر میاد ساختار دو تایپ String و Array یکی هستن فقط از نظر نحوه تعریف شدن با هم فرق دارن. String به نظر میاد نوعی Array of characters هستش، این دو شباهت های کدی زیادی هم با هم دارن:
let a = "Hello" let b = ["H", "e", "l", "l", "o"]; console.log(a.length); // 5 console.log(b.length); // 5 console.log(a.indexOf("e")); // 1 console.log(b.indexOf("e")); // 1 console.log(a.concat("!")); // "Hello!" console.log(b.concat(["!"])); //["H", "e", "l", "l", "o", "!"]
ولی این شباهت فقط از نوع ظاهری هستش. اگه بیشتر ریز بشیم میبینیم تفاوت های ساختاری مهمی با هم دارن.
تو Array اجازه داریم مقدار متغیر وسط زنجیره رو تغییر بدیم ولی تو String چنین اجازه ای نداریم، باید String جدیدی بسازیم و اون رو جایگذین String قبلی بکنیم تا مقدار متغیر وسط زنجیره رو بتونیم عوض کنیم:
a[1] = "a" b[1] = "a" console.log(a); // "Hello" console.log(b); // ["H", "a", "l", "l", "o"]
این تفاوت ساختاری مهم و نحوه ی رفتار متفاوتشون نسبت به هم، باعث شناخته شدنشون به عنوان دو تایپ مجزا از هم میشه.
?تو JS روابط زیر برقرار هستش:
23.toFixed(3); //syntaxError 23..toFixed(3); //23.000 23 .toFixed(3); //23.000
- وقتی نقطه ای سمت راست عدد میذاریم، کامپایلر نقطه رو ممیز حساب میکنه و بعدش انتظار عدد داره، وقتی به جای عدد عبارت toFixed رو میبینه، به ما ارور syntaxError تحویل میده.
- رابطه دومی بدون مشکل اجرا میشه. کامپایلر اولین نقطه جلوی 23 رو نماد اعشار میخونه و چون بعد نقطه اول عددی گذاشته نشده و دستور غیر متعارفی هم جلوش نیستش (مثل toFixed قبلی)، JS خودش یه صفر بعد نقطه میذاره و در واقع چنین کدی رو اجرا میکنه:
23.0.toFixed(3); //23.000
- رابطه سوم هم بدون مشکل اجرا میشه چون با قرار دادن فاصله، انگار داریم به JS نشون میدیم که عددی که میخوام روش toFixed اعمال کنی، فقط عدد صحیح 23 هستش.
?تو JS روابط عجیب غریب زیر برقرار هستش:
const a = 10 / "ali" console.log(a); // NaN console.log(typeof a); // number !!! console.log(a === NaN); // false !!! console.log(a == NaN); // false !!! console.log(NaN == NaN); // false !!!
تو زبان JS تایپ NaN (مخفف Not a Number) Number هستش و دو تا NaN هم هیچوقت برابر با هم نیستن!
#cs_internship
#step7
#web