برنامه نویسی

لحظات غیرمنتظره جاوا اسکریپت که درک شما از زبان را به چالش می کشد

به عنوان یکی از محبوب ترین زبان های برنامه نویسی در جهان، جاوا اسکریپت به طور گسترده برای ساخت وب سایت های پویا و تعاملی، برنامه های کاربردی وب و حتی برنامه های دسکتاپ و موبایل استفاده می شود. جاوا اسکریپت است دروازه ای برای سایر فناوری های وب، به دلیل استفاده گسترده و سازگاری با پلتفرم های مختلف. این زبان به یک زبان اساسی در توسعه وب مدرن تبدیل شده است. همچنین یک زبان پیچیده با لحظات غیرمنتظره بسیاری است که می تواند حتی باتجربه ترین توسعه دهندگان را نیز در سر خود بیاندازد.

در این مقاله، لحظات مختلف جاوا اسکریپت غیرمنتظره ای را مشاهده خواهیم کرد که می توانند گیج شوند، محدودیت های شما را آزمایش کنند و شما را ناامید کنند. همچنین به شما کمک می کند تا نحوه کدنویسی خود را تغییر دهید.

آماده اید که مغزتان را منفجر کنید🤯؟ اگر اینطور است، بیایید وارد جنگل شویم..


1️⃣

2 == [2] // true
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

== اپراتور در JS نوع اجباری را انجام می دهد به این معنی که سعی می کند قبل از انجام مقایسه، مقادیر مقایسه شده را به یک نوع داده رایج تبدیل کند.

در این مثال، عدد 2 به یک رشته و آرایه تبدیل می شود [2] به رشته ای نیز تبدیل می شود. در نتیجه هر دو ارزش وجود دارد 2. به همین دلیل، مقایسه به ارزیابی می شود true.

به طور کلی توصیه می شود از عملگر برابری دقیق استفاده کنید === بجای == برای جلوگیری از نتایج غیرمنتظره به دلیل اجبار نوع..

کاوش بیشتر:

'123' == 123        // true 
'foo' == NaN        // false
undefined == null   // true 
NaN === NaN         // false
NaN == NaN          // false
0 == null           // false
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید


2️⃣

[] == ![] // true
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

مقایسه یک آرایه خالی [] با یک boolean ارزش ایجاد شده با نفی (با استفاده از ! عملگر) یک آرایه غیر خالی []. نتیجه این مقایسه است true، که ممکن است در نگاه اول غیرمنتظره به نظر برسد..

در JS، هر مقدار می تواند یکی باشد true یا false در یک boolean متن نوشته. یک آرایه خالی یک مقدار حقیقت است، به این معنی که در نظر گرفته شده است true در یک boolean متن نوشته. هنگامی که ما را اعمال می کنیم ! اپراتور به آن تبدیل شده است false.

از طرف دیگر، boolean مقدار ایجاد شده با نفی یک آرایه غیر خالی است false. وقتی یک آرایه خالی (درست) را با a مقایسه می کنیم false مقدار (نادرست) با استفاده از == عملگر، JS محدودیت نوع را انجام می دهد به این معنی که سعی می کند قبل از مقایسه مقادیر را به یک نوع معمولی تبدیل کند. بنابراین، آرایه خالی به تبدیل می شود false که منجر به بودن هر دو طرف می شود false. در پایان، مقایسه برمی گردد true.

کاوش بیشتر:

['a', 'b'] !== ['a', 'b']   // true
['a', 'b'] == ['a', 'b']    // false
[1, 2] + [3, 4]             // "1,23,4" 
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید


3️⃣

null == undefined // true
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

دو برابر است == عملگر برای مقایسه دو مقدار برای برابری استفاده می شود، در حالی که نوع داده آنها را نادیده می گیرد. هنگام مقایسه مقادیر null و undefined با استفاده از عملگر دو برابر مساوی در نظر گرفته شده و نتیجه مقایسه خواهد بود true. این به این دلیل است که هر دو null و undefined نشان دهنده فقدان یک ارزش هستند و در این زمینه بسیار با یکدیگر معادل هستند.

با اپراتور برابری دقیق:

null === undefined // false
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید


4️⃣

typeof NaN   // number
typeof null  // object
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

در JS، typeof عملگری است که برای تعیین نوع یک مقدار یا متغیر استفاده می شود.

NaN مخفف یک عدد نیست و یک مقدار ویژه در JS است که نشان دهنده an است undefined یا unrepresentable مقدار عددی

وقتی استفاده می کنید typeof با NaN، باز می گردد number. این ممکن است عجیب به نظر برسد اما به این دلیل است NaN از نظر فنی یک نوع داده عددی در JS است حتی اگر چیزی را نشان دهد که در واقع یک عدد نیست.

چه زمانی typeof اعمال می شود null، رشته را برمی گرداند object. این بخاطر این است که null به عنوان یک مقدار ویژه در نظر گرفته می شود که یک مرجع شی خالی را نشان می دهد. null خود یک شی نیست بلکه یک مقدار اولیه است. این امر در طراحی زبان JS یک چیز عجیب و غریب یا عجیب در نظر گرفته می شود.

کاوش بیشتر:

typeof function(){}     // "function"
null instanceof Object  // false
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید


5️⃣

true == "1"  // true
false == "0" // true
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

JS رشته را تبدیل می کند 1 به boolean ارزش true و رشته 0 به false زیرا هر رشته غیر خالی در نظر گرفته می شود صداقت و در طرف دیگر تقلبی. بنابراین، مقایسه می شود true == true که هست true و false == false که هست true.

کاوش بیشتر:

1 + true      // 2
1 - true      // 0
'' == false   // true
0 == false    // true
true + false  // 1
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید


6️⃣

"1" + 1    // "11"
2 + "2"    // "22"
"5" - 3    // 2
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

وقتی از عملگر + با a استفاده می کنید string و الف number، عدد به یک رشته تبدیل شده و به رشته الحاق می شود.

اگر string را می توان به صورت a تجزیه کرد number، آن را کم می کند number از string.

بنابراین،
"1" + 1 رشته می شود "11"
2 + "2" رشته می شود "22"
"5" - 3 به عدد تبدیل می شود 2

کاوش بیشتر:

+"1"                  // 1
-"1"                  // -1

+true                 // 1
-true                 // -1

+false                // 0
-false                // -0

+null                 // 0
+undefined            // NaN

1 / "2"               // 0.5
"2" / 1               // 2

1 / 0                 // Infinity
-1 / 0                // -Infinity

3 * "abc"             // NaN

true > false          // true  

undefined + 1         // NaN
undefined - 1         // NaN
undefined - undefined // NaN
undefined + undefined // NaN

null + 1              // 1
null - 1              // -1
null - null           // 0
null + null           // 0

Infinity + 1          // Infinity
Infinity - 1          // Infinity
Infinity - Infinity   // NaN
Infinity + Infinity   // Infinity
Infinity / Infinity   // NaN
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید


7️⃣

"b" + "a" + + "a" + "a" // "baNaNa"
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

رشته را به هم متصل می کند b، رشته a، رشته حاصل از عبارت +"a" و رشته a.

+"a" به زور رشته a به عددی که به آن ارزیابی می شود NaN (عدد نیست) زیرا a عدد معتبری نیست

وقتی به هم می پیوندیم b، a، NaN (به عنوان یک رشته خالی نمایش داده می شود) و a، رشته را می گیریم baNaNa.


8️⃣

!{}       // false
{} == !{} // false
{} == {}  // false
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

وقتی، یک شی خالی را مقایسه می کنیم {} به یک شی خالی نفی شده !{}. علامت تعجب ! یک عملگر منطقی است که مقدار شی را نفی می کند !{} برمی گرداند false از آنجایی که یک شی در JS صدق در نظر گرفته می شود. ما در واقع داریم مقایسه می کنیم {} به false که منجر به الف false ارزش، زیرا از نظر مقدار یا نوع داده برابر نیستند.

در آخرین عبارت، دو شی خالی را با هم مقایسه می کنیم {}. با وجود این واقعیت که ممکن است به نظر یکسان باشند، آنها دو شی مجزا با ارجاعات مجزا در حافظه هستند، بنابراین از نظر مقدار یا نوع داده برابر نیستند. در پایان مقایسه نیز منجر به a false ارزش.

وقتی از اپراتور پلاس + بین دو جسم پیچیده شده در پرانتزهای مجعد {}، سعی می کند اشیاء را به صورت رشته ای به هم متصل کند.

کاوش بیشتر:

{} + [] === ""  // false
!!{}            // true 
!![]            // true 
[] + []         // ""
[] + {}         // "[object Object]"
{} + []         // "[object Object]"
{} + {}         // "[object Object][object Object]"
[] == false     // true
!!''            // false
!!0             // false
!!null          // false
!!undefined     // false 
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید


9️⃣

7 > 6 > 5 // false
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

اولین، 7 > 6 ارزیابی می کند true زیرا 7 بزرگتر از 6 است.
بعد، true > 5 ارزیابی می شود. در JS، true نیرو وارد عدد است 1 و false به زور وارد می شود 0. بنابراین 1 > 5 است false، از آنجا که 1 بزرگتر از 5.

بنابراین در پایان، 7 > 6 > 5 برابر است با true > 5 که هست false.

کاوش بیشتر:

5 < 6 < 7  // true
0 > null   // false
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید


1️⃣0️⃣

Math.max() // -Infinity
Math.min() // Infinity
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

Math.max() & Math.min() توابعی هستند که می توان از آنها برای یافتن بزرگترین و کوچکترین مقادیر در مجموعه ای از اعداد استفاده کرد.

وقتی بدون هیچ استدلالی فراخوانی می شود، Math.max() برمی گرداند -Infinity که نشان دهنده کوچکترین ممکن است number در JS، از طرف دیگر، Math.min() برمی گرداند Infinity که نشان دهنده بزرگترین ممکن است number در JS

این رفتار منطقی است زیرا اگر عددی ارائه نشده باشد، بزرگترین عددی برای بازگشت وجود ندارد Math.max() و به همین ترتیب، کوچکترین عددی برای بازگشت وجود ندارد Math.min()


1️⃣1️⃣

parseInt('08')       // 8
parseInt('08', 10)   // 8 
parseInt('0x10')     // 16 
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

parseInt('08') رشته را تبدیل می کند 08 به عدد صحیح 8. اگر قرار بود بنویسی parseInt('08', 10)، عملکرد همچنان باز خواهد گشت 8.

دلیل این امر این است که پارامتر دوم از parseInt تابع ریشه ای است که سیستم شماره گذاری مورد استفاده را مشخص می کند. بیایید بگوییم: binary، octal، decimal، hexadecimal و غیره. اگر ریشه مشخص نشده باشد parseInt سعی خواهد کرد ریشه را بر اساس قالب رشته تشخیص دهد. در مورد فوق، 08 یک عدد اکتالی در نظر گرفته می شود زیرا با آن شروع می شود 0 بنابراین تبدیل به 8 به عنوان یک عدد اعشاری

parseInt('0x10') را تبدیل می کند hexadecimal رشته 0x10 به عدد صحیح 16. ریشه نیز مشخص نشده است، اما پیشوند 0x نشان می دهد که عدد باید به عنوان یک در نظر گرفته شود hexadecimal عدد تا تبدیل به عدد شود 16 به عنوان یک عدد اعشاری

کاوش بیشتر:

parseFloat('3.14.15')  // 3.14 
parseFloat('0.0')      // 0 
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید


1️⃣2️⃣

(function(x) { delete x; return x; })(1);   // 1
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

یک تابع ناشناس که یک آرگومان می گیرد x. در داخل تابع سعی می کند تا را حذف کند x متغیری که امکان پذیر نیست زیرا x یک آرگومان تابع است و نمی توان آن را حذف کرد. سپس تابع مقدار را برمی گرداند x.

وقتی این تابع با آرگومان فراخوانی شود 1، ارزش x در داخل تابع تنظیم شده است 1. در این حالت، عملیات حذف هیچ تاثیری ندارد، تابع به سادگی مقدار را برمی گرداند x که هست 1


کار عالی برای کاوش و درک این مفاهیم جاوا اسکریپت!!! این دانش قطعا در مصاحبه ها به شما کمک می کند و شما را قادر می سازد تا مهارت های نامزدهای بالقوه را به عنوان مصاحبه گر ارزیابی کنید. به کار خوب خود ادامه دهید و به یادگیری چیزی ادامه دهید Ctrl+N


❤ انگیزه:

انگیزه


🍀حمایت کنید

لطفا با عضویت در کانال ما را دنبال کنید و از ما حمایت کنید. حمایت شما بسیار قابل قدردانی است و به ما کمک می کند تا به تولید محتوا برای لذت بردن شما ادامه دهیم. از شما برای پیشبرد حمایتتان سپاسگزاریم!

یوتیوب
GitHub
توییتر

دور دارسل #8740

نوشته های مشابه

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

دکمه بازگشت به بالا