سلام، تو استادی ایتم 1 با مفهموم تایپ تو JS آشنا شدم، یه مسعله ی باحال با ترکیب تایپ ها ساختم، ببینم کی میتونه بدون اینکه جواب رو بخونه درست حل بکنتش ?
کد زیر چه چیزی رو تو کنسول نشون میده؟
console.log(+(!!typeof null === !!!null) == (typeof null === typeof []));
.
.
.
.
.
.
جواب : true
راه حل:
برای ساده سازی console.log رو کنار میذاریم:
+(!!typeof null === !!!null) == (typeof null === typeof [])
میبینیم کد از دو قسمت تشکیل شده، اول بریم سمت چپ رو بررسی کنیم:
+(!!typeof null === !!!null)
میدونیم وقتی پشت نوشته ای !! میذاریم، درواقع میخوایم بر اساس falsy/truthy بسنجیمش. typeof null در زبان JS به ما عبارت Object رو میده و Object چون یه مقداری داره، truthy حساب میشه پس سمت چپ به ما true میده.
سمت راست null!!! رو داریم. این درواقع این عبارت null!! ! هستش. اول null رو بر اساس falsy/truthy میسنجیم. چون null در واقع هیچی نیست، پس مقدار false رو به ما میده و به عبارت false! میرسیم. وقتی ! پشت عبارتی میاد یعنی میخوایم معکوسش کنیم، معکوس false هم true میشه.
پس عبارت سمت چپ در نهایت اینجوری میشه:
+(true === true)
دو تا true هم با هم برابر هستند و عبارت true از پرانتز خارج میشه. پشت پرانتز + هستش. میدونیم وقتی پشت عبارتی + میذاریم، در واقع میخوایم به عدد تبدیلش بکنیم، مقدار عددی true هم 1 هستش پس کل عبارت سمت چپ به ما عدد 1 رو میده.
بریم حالا سمت راست رو ببینیم:
(typeof null === typeof [])
عبارت سمت راست از دو typeof تشکیل شده. میدونیم typeof null در زبان JS مقدار Object رو به ما میده. سمت چپ هم همینطور، میدونیم array در واقع نوعی Object هستش، پس عبارت (Object === Object) رو داریم که به ما مقدار true رو میده.
در کل ساختار کد به صورت
1 == true
در میاد و میدونیم جواب این عبارت هم مقدار true هستش چون داریم از == استفاده میکنیم و true بدون توجه به نوع داده درواقع همون عدد 1 هستش (و برعکس)، پس در نهایت در کنسول عبارت true نشون داده میشه :)
#cs_internship
#step7
#web