مجله خبری هاست ایران » طراحی و توسعه » ۷ نکته در مورد جاوا اسکریپت که احتمالاً نمی‌دانید
  • mag-telegram.jpg
  • landing96-300-420.jpg
توسعه وب طراحی و توسعه

۷ نکته در مورد جاوا اسکریپت که احتمالاً نمی‌دانید

۷ نکته در مورد جاوا اسکریپت که احتمالاً نمی‌دانید

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

۱- دو صفر وجود دارد

ما معمولاً از حالت مثبت صفر استفاده می‌کنیم؛ اما یک صفر منفی هم وجود دارد! به خاطر طرز رشته بندی شدنشان، نمی‌شود این علامت‌ها را در کنسول دید:

یعنی فرمان (-۰).toString() و (+۰).toString()، هردو خروجی صفر می‌دهند. اگر کمی در این نکته عمیق‌تر شویم، می‌بینیم که این صفر مثبت و صفر منفی در واقع باهم برابرند.

نکته این‌جاست که استفاده از فرمان indexOf روی خط‌ها هم کمک چندانی به ما نمی‌کند. چون این فرمان از مساوی سخت (===) استفاده می‌کند.

اما یک‌راه برای تشخیص صفر منفی وجود دارد. برای این کار باید یک عدد مثبت و متناهی را بر صفری که داریم تقسیم کنیم.

پس می‌توانیم به‌سادگی بگوییم:


مقاله مرتبط: راهنمای غیر فعال کردن JavaScript در مرورگر های مختلف


۲- NaN یک عدد ویژه است

ازآنجایی‌که NaN خلاصه‌شده‌ی کلمه‌ی Not a Number (غیر عدد) است، اصولاً انتظار داریم هر چیزی باشد به‌جز عدد؛ اما در جاوا اسکریپت NaN یک عدد ویژه است:

برای به دست آوردن NaN چندراه وجود دارد:

  • تقسیم کردن صفر بر صفر: فرمان ۰ / ۰
  • تبدیل کردن یک‌رشته‌ی غیر عدد به عدد: فرمان +’foo’
  • کم کردن بی‌نهایت از بی‌نهایت
  • و راه‌های دیگر…

واقعیت مهم این است که NaN یک عدد ویژه است. علاوه بر این، باید بدانید که NaN با خودش برابر نیست. پس اگر چیزی شبیه (x !== x) دیدید، باید بدانید که با چه پدیده‌ای مواجه شده‌اید. به‌طور خلاصه NaN با خودش برابر نیست.

یکی از تأثیرات جانبی این نکته این است که نمی‌توانید از فرمان indexOf برای فهمیدن ایندکس NaN در یک‌رشته استفاده کنید:

توجه داشته باشید که به‌جای فرمان x !== x برای این‌که بفهمید NaN با x برابر است یا نه، می‌توانید از فرمان isNaN(x) استفاده کنید. البته حالت دوم، کمی کندتر است.

می‌پرسید چرا؟ پاسخ ساده این است که چنین اتفاقی به خاطر IEEE ۷۵۴ می‌افتد: تمام NaN ها باید با همه‌چیز -ازجمله خودشان- به شکل نامساوی مقایسه شوند.

توصیه: اگر از ES۲۰۱۵ استفاده می‌کنید، فرمان includes به این شکل عمل می‌کند:

NaN یک عدد متناهی نیست. البته معنی این جمله این نیست که NaN بی‌نهایت است. درواقع باید گفت که NaN نه متناهی است و نه بی‌نهایت.

NaN نه مثبت است و نه منفی. چیزی مثل +NaN یا –NaN نداریم. هردوی این‌ها NaN هستند.

۳- استفاده از عملگر بیتی

این مسئله مستقل از زبان مورداستفاده است؛ اما چون عملگرهای بیتی در جاوا اسکریپت هم پشتیبانی می‌شوند، در ادامه به چند نکته‌ی جالب در مورداستفاده از آن‌ها اشاره خواهیم کرد.

ضرب و تقسیم سریع اعداد صحیح

یکی از موقعیت‌هایی که این امکان مفید واقع می‌شود، وقتی است که می‌خواهید یک مدل سه‌بعدی را روی یک صفحه‌ی بزرگ نمایش دهید. در چنین موقعیتی باید تک‌تک فریم‌ها را با بالاترین سرعت ممکن ایجاد کنید و سپس به نمایش درآورید. بیایید فرض کنیم که برای این کار به اعمال ریاضی هم احتیاج دارید. (که قطعاً دارید.)


مقاله مرتبط: چگونه پیام هشدار واکنش گرا را جایگزین JavaScript کنیم؟


هروقت که بخواهید عددی را در ۲، ۴، ۸، ۱۶ یا هر توان دیگری از ۲ ضرب کنید یا آن را بر یکی از این اعداد تقسیم کنید، عملگرهای بیتی بسیار مفیدند. استفاده از آن‌ها، بیت‌های اعداد را به راست (برای تقسیم) یا چپ (برای ضرب) می‌برد.

عملگر << تمام بیت‌ها را یک جایگاه به سمت چپ می‌برد. اعداد به شکل باینری نمایش داده می‌شوند. در نتیجه یک عدد صفر به سمت راست اضافه می‌شود:

استفاده از عملگر >> هم نتیجه‌ی مشابهی به همراه دارد.

بر اساس آزمایش‌های مختلف، استفاده از << به‌اندازه‌ی ۱٫۰۴ برابر از عملگر * سریع‌تر است. البته ممکن است نخواهید قابلیت خوانده شدن ساده‌ی کد توسط افراد دیگر را به خاطر این مقدار از افزایش سرعت از دست بدهید. ولی به‌هرحال دانستن این نکته می‌تواند به دردتان بخورد.

ارسال پیام‌های رمزگذاری شده

عملگر XOR (^) در رمزنگاری (کریپتوگرافی) استفاده می‌شود. شما می‌توانید با استفاده از این فرمان، پیام‌ها را رمزگذاری یا رمزگشایی کنید. نحوه‌ی عملکرد به این شکل است:

یک مثال ساده با رمزگذاری روی یک عدد و سپس رمزگشایی از آن، مسئله را کاملا نشان می‌دهد:

فهمیدن این‌که یک عنصر خاص جزء یک خط است یا نه

استفاده از عملگر بیتی NOT (~) به ما اجازه می‌دهد چک کنیم که آیا یک عنصر خاص در یک خط وجود دارد یا نه.

این عملگر، -۱ را به ۰ تبدیل می‌کند (به خاطر طبیعت باینری که ۰ را به ۱ و ۱ را به ۰ تبدیل می‌کند) اما برای اعداد دیگر یک خروجی غیر صفر نمایش می‌دهد. چون صفر یک مقدار نادرست است (!!۰ → false) وارد نتایج شرط تعیین‌شده‌ی شما نمی‌شود.


مقاله مرتبط: ١٩ تکنیک خلاصه نویسی JavaScript


توصیه: اگر از ES۲۰۱۵ استفاده می‌کنید، فرمان includes به این شکل عمل می‌کند:

۴- از کدهای هکس یا یونیکد به‌عنوان نماینده‌ی رشته‌ها استفاده کنید

اگر به دلیل خاصی می‌خواهید یک‌رشته از کد را بدون استفاده از توابع مخفی کنید، می‌توانید از جاوا اسکریپت استفاده کنید. از توالی‌های هکسادسیمال یا یونیکد استفاده کنید:

بیایید یک تابع ساده بسازیم که بتواند پیام‌های قابل خوانده شدن توسط انسان را تبدیل کند:

۵- دور زدن عملگرهای منطقی باینری

در زبان باینری اگر اپراند اول شرایط تعریف‌شده برای نتیجه را داشته باشد، اپراند دوم ارزیابی نمی‌شود. بیایید به چند مثال نگاه کنیم:

نکته‌ی جالب این است که این قضیه در مورد توابع هم صادق است.

اما جادوی اصلی در تابع جمع اتفاق می‌افتد! بیایید آن را بسط دهیم:

۶- اجرای فرمان Eval در حالت سخت آن‌قدرها هم بد نیست

بله فرمان Eval بد است! اما درعین‌حال فایده‌هایی هم دارد که می‌توانند به دردتان بخورند.

وقتی دارید این فرمان را در حالت سخت اجرا می‌کنید، اجازه‌ی ساختن متغیر در قلمروی مجاور را ندارید. Eval فقط کدی که وارد کرده‌اید را ترجمه و اجرا می‌کند:

حالا وقتی حالت سخت را فعال کنیم، فرمان دوم Eval هم درهرصورت کار می‌کند؛ اما متغیر y را خارج از محدوده‌ی Eval نمی‌سازد:

۷- توابع دینامیک بسازید

با استفاده از سازنده‌ی جدید توابع، می‌توانیم تابع دینامیک بسازیم.

یکی از موارد استفاده‌ی این نکته برای الگوسازی در کتابخانه‌ها (مثلاً ejs یا ajs و…) است. این کار، یک‌بار الگو را تجزیه می‌کند و تابعی می‌سازد که داده‌های الگو را در خود می‌پذیرد.

نکته: از فرمان Eval یا ساختن تابع برای مواردی مثل تجزیه‌ی داده‌های JSON یا به دست آوردن ارزش یک کلید هدف دینامیک استفاده نکنید.

امیدواریم که از این مقاله نکات جدیدی یاد گرفته باشید و اطلاعاتتان در مورد جاوا اسکریپت بالا رفته باشد. شما چه نکات کم‌تر شناخته‌شده‌ای در مورد جاوا اسکریپت می‌دانید؟ آن‌ها را در قسمت نظرات بنویسید.

ابزار بهینه سازی وب هاست ایران

افزودن دیدگاه

کلیک برای ثبت دیدگاه