اشتباهات متداول در JavaScript
یادگیری JavaScriptاین فصل برخی از اشتباهات معمول جاوا اسکریپت را نشان می دهد.
به طور تصادفی با استفاده از اپراتور تخصیص
برنامه های جاوا اسکریپت ممکن است نتایج غیر منتظره ای ایجاد کند اگر یک برنامه نویس به طور تصادفی از اپراتور تخصیص (=)، به جای اپراتور مقایسه (==) در عبارت if استفاده کند.
دستور if نتیجه false را بر می گرداند زیرا x برابر با 10 نیست.
var x = 0;
if (x == 10)
مشاهده مثالدستور if نتیجه true را بر می گرداند (شاید نه به عنوان انتظار)، زیرا 10 درست است:
var x = 0;
if (x = 10)
مشاهده مثالدستور if نتیجه false را بر می گرداند (شاید نه به عنوان انتظار)، زیرا 0 نادرست است:
var x = 0;
if (x = 0)
مشاهده مثالمقایسه
در مقایسه منظم، نوع داده مهم نیست. این عبارت اگر true باشد:
var x = 10;
var y = "10";
if (x == y)
مشاهده مثالدر مقایسه منظم، نوع داده مهم نیست. این عبارت اگر false باشد:
var x = 10;
var y = "10";
if (x === y)
مشاهده مثالاشتباه رایج این است که فراموش کنیم که اظهارات سوئیچ از مقایسه دقیق استفاده می کنند:
var x = 10;
switch(x) {
case 10: alert("Hello");
}
مشاهده مثالاین سوئیچ مورد هشدار را نمایش نمی دهد:
var x = 10;
switch(x) {
case "10": alert("Hello");
}
مشاهده مثالاختلاط اضافی و تلفیق
علاوه بر این در مورد اضافه کردن اعداد است.
ترکیب بندی در مورد اضافه کردن رشته ها است.
در جاوا اسکریپت هر دو عملیات از اپراتور + استفاده می کنند.
به این دلیل، اضافه کردن یک عدد به عنوان یک عدد نتیجه دیگری از اضافه کردن یک عدد به عنوان یک رشته است:
var x = 10 + 5; // the result in x is 15
var x = 10 + "5"; // the result in x is "105"
مشاهده مثالهنگام اضافه کردن دو متغیر، پیش بینی نتایج ممکن است دشوار باشد.
var x = 10;
var y = 5;
var z = x + y; // the result in z is 15
var x = 10;
var y = "5";
var z = x + y; // the result in z is "105"
مشاهده مثالمتوجه شدن اشتباهی
تمام اعداد در جاوا اسکریپت به عنوان 64 بیت تعداد اعداد شناور (شناورها) ذخیره می شوند.
تمام زبان های برنامه نویسی، از جمله جاوا اسکریپت، با مقادیر دقیق نقطه شناور مشکل دارند:
var x = 0.1;
var y = 0.2;
var z = x + y // the result in z will not be 0.3
مشاهده مثالبرای حل مشکل فوق، ضرب و تقسیم کمک می کند.
var z = (x * 10 + y * 10) / 10; // z will be 0.3
مشاهده مثالBreak یک رشته جاوا اسکریپت
جاوا اسکریپت به شما اجازه می دهد یک بیانیه را به دو خط تقسیم کنید:
var x =
"Hello World!";
مشاهده مثالاما شکستن یک بیانیه در وسط یک رشته کار نخواهد کرد:
var x = "Hello
World!";
مشاهده مثالاگر یک رشته را در یک رشته ی دیگر شکست میدهید باید از یک "backslash" استفاده کنید
var x = "Hello \
World!";
مشاهده مثالسمیکالن ناپیوسته
از آنجا که از سمیکالن استفاده می شود، این بلوک صرف نظر از مقدار x اجرا می شود:
if (x == 19);
{
// code block
}
مشاهده مثالشکستن دستور بازگشتی
این یک رفتار پیش فرض جاوا اسکریپت است که بطور خودکار در پایان یک خط به صورت خودکار بسته می شود.
از این جهت، این دو مثال نتیجه مشابهی را به دست می آورند:
function myFunction(a) {
var power = 10
return a * power
}
مشاهده مثالfunction myFunction(a) {
var power = 10;
return a * power;
}
مشاهده مثالجاوا اسکریپت نیز به شما امکان می دهد یک بیانیه را به دو خط تقسیم کنید.
به همین دلیل، مثال 3 همان نتایج را نیز به دست می آورد:
function myFunction(a) {
var
power = 10;
return a * power;
}
مشاهده مثالاما، اگر بندهای بازگشت را در دو خط مانند این بگذارید، چه اتفاقی خواهد افتاد:
function myFunction(a) {
var
power = 10;
return
a * power;
}
مشاهده مثالنتیجه تعریف نشده در تابع
function myFunction(a) {
var
power = 10;
return;
a * power;
}
مشاهده مثالتوضیح
اگر بیانیه ای ناقص است مانند:
جاوا اسکریپت با تکمیل این بیانیه با خواندن خط بعدی تلاش خواهد کرد:
اما از آنجا که این بیانیه کامل است:
جاوا اسکریپت به طور خودکار آن را مانند کد زیر می بندد:
این اتفاق می افتد زیرا بسته شدن (پایان دادن) اظهارات با semicolon در جاوا اسکریپت اختیاری است.
جاوا اسکریپت عبارت بازگشت را در انتهای خط بسته می کند، زیرا یک بیانیه کامل است.
دسترسی به آرایه ها با نام های نامگذاری شده
بسیاری از زبان های برنامه نویسی آرایه ها با شاخص هایی نامیده می شوند.
آرایه های با نام های نامیده می شوند که آرایه های انجمنی نامیده می شوند.
جاوا اسکریپت از آرایه ها با شاخص های نامگذاری پشتیبانی نمی کند.
در جاوا اسکریپت، آرایه ها از شاخص های عددی استفاده می کنند:
var person = [];
person[0] = "John";
person[1] = "Doe";
person[2] = 46;
var x = person.length; // person.length will return 3
var y = person[0]; // person[0] will return "John"
مشاهده مثالدر جاوا اسکریپت، اشیاء به عنوان شاخص استفاده می شود.
اگر شما از یک index نام استفاده می کنید، هنگام دسترسی به یک آرایه، جاوا اسکریپت آرایه را به شیء استاندارد باز تعریف می کند.
پس از تعریف مجدد خودکار، روش های آرایه و خواص نتیجه های نامشخص یا نادرستی را تولید می کنند:
var person = [];
person["firstName"] = "John";
person["lastName"] = "Doe";
person["age"] = 46;
var x = person.length; // person.length will return 0
var y = person[0]; // person[0] will return undefined
مشاهده مثالپایان تعاریف با یک کاما
کاما زدن در تعریف شیء و آرایه در ECMAScript 5 قانونی است.
مثال شی:
مثال آرایه:
هشدار!
در اینترنت اکسپلورر 8 کار خواهد کرد.
JSON اجازه نمی دهد کاما در کنار هم قرار بگیرد.
مثال json:
مثال json:
تعریف نشده(Undefined) ، Not Null محسوب می شود
اشیاء جاوا اسکریپت، متغیرها، خواص ها و روش ها می تواند نامشخص باشد.
علاوه بر این، اشیاء جاوا اسکریپت خالی می توانند مقدار صفر باشند.
این می تواند آن را کمی ترسیم کند اگر یک شیء خالی باشد.
شما می توانید امتحان کنید اگر یک شیء با آزمایش وجود داشته باشد اگر نوع تعریف نشده باشد:
if (typeof myObj === "undefined")
مشاهده مثالاما شما نمیتوانید تست کنید اگر یک شی از صفر باشد، زیرا اگر یک شیء نامشخص باشد خطایی رخ خواهد داد:
غلط:
برای حل این مشکل، شما باید تست کنید اگر یک شی نه صفر و نه تعریف نشده است.
اما هنوز هم می تواند یک خطا را پر کند:
غلط:
به این دلیل، قبل از اینکه بتوانید برای خالی بودن تست کنید، باید بدون تعریف تست کنید:
if (typeof myObj !== "undefined" && myObj !== null)
مشاهده مثال
نظر شما
>