ويشير هذا الفصل بعض الأخطاء جافا سكريبت المشتركة.
عن طريق عن طريق الخطأ في عامل التعيين
برامج جافا سكريبت قد تولد نتائج غير متوقعة إذا مبرمج يستخدم عن طريق الخطأ عامل التعيين (=) ، بدلا من عامل مقارنة (==) في تعليمة if.
هذا if بيان بإرجاع false (كما هو متوقع) لس لا تساوي 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
if (z == 0.3)
// this if test will fail
انها محاولة لنفسك » لحل المشكلة أعلاه، فإنه يساعد على يضرب ويقسم:
كسر سلسلة جافا سكريبت
سوف جافا سكريبت يسمح لك لكسر بيان إلى سطرين:
ولكن، وكسر بيان في وسط سلسلة لن تعمل:
يجب عليك استخدام "مائل" إذا كان يجب كسر بيان في سلسلة:
خطأ في وضع الفاصلة المنقوطة
بسبب فاصلة منقوطة في غير محله، وهذا كتلة التعليمات البرمجية تنفيذ بغض النظر عن قيمة x:
if (x == 19);
{
// code block
}
انها محاولة لنفسك » كسر بيان العودة
ومن جافا سكريبت السلوك الافتراضي لإغلاق بيان تلقائيا في نهاية السطر.
وبسبب هذا، فإن هذين المثالين يعود إلى نفس النتيجة:
سوف جافا سكريبت تسمح لك أيضا لكسر بيان إلى سطرين.
وبسبب هذا، ومثال 3 أيضا إرجاع نفس النتيجة:
ولكن، ماذا سيحدث إذا كسر بيان عودة في سطرين من هذا القبيل:
سوف الدالة بإرجاع غير معروف!
لماذا؟ نظرا لأن جافا سكريبت يعتقد يعني لك:
شرح
إذا كان البيان هو مثل غير مكتملة:
var
سيحاول جافا سكريبت لاستكمال بيان عن طريق قراءة السطر التالي:
power = 10;
ولكن لأن هذا البيان هو الكامل:
return
سوف جافا سكريبت إغلاق تلقائيا مثل هذا:
return;
يحدث هذا بسبب إغلاق (إنهاء) البيانات مع منقوطة هو اختياري في جافا سكريبت.
سوف جافا سكريبت إغلاق بيان عودة في نهاية السطر، لأنها ليست بيانا كاملا.
أبدا كسر بيان العودة.
الوصول إلى صفائف مع مؤشرات الاسم
العديد من لغات البرمجة تدعم المصفوفات مع الفهارس اسمه.
وتسمى المصفوفات مع الفهارس اسمه المصفوفات الترابطية (أو التجزئة).
جافا سكريبت لا يدعم المصفوفات مع الفهارس اسمه.
في جافا سكريبت، صفائف استخدام مؤشرات مرقمة:
مثال
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"
انها محاولة لنفسك » في جافا سكريبت، واستخدام الكائنات المسماة الفهارس.
إذا كنت تستخدم مؤشر اسمه، عند الوصول إلى مجموعة واسعة، وجافا سكريبت سيعيد تعريف مجموعة إلى كائن القياسية.
بعد إعادة تعريف التلقائي، وأساليب مجموعة وخصائص تسفر عن نتائج غير محددة أو غير صحيحة:
مثال:
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
انها محاولة لنفسك » انهاء تعريف صفيف مع الفاصلة
غير صحيح:
points = [40, 100, 1, 5, 25, 10,];
سوف تفشل بعض محركات JSON وجافا سكريبت، أو تتصرف بشكل غير متوقع.
صحيح:
points = [40, 100, 1, 5, 25, 10];
انهاء تعريف كائن مع الفاصلة
غير صحيح:
person = {firstName:"John", lastName:"Doe", age:46,}
سوف تفشل بعض محركات JSON وجافا سكريبت، أو تتصرف بشكل غير متوقع.
صحيح:
person = {firstName:"John", lastName:"Doe", age:46}
غير معرف غير NULL
مع جافا سكريبت، لاغية والكائنات، غير معروف هو للمتغيرات، والخصائص والأساليب.
لاغيا، كائن أن تكون محددة، وإلا سيتم غير معرفة ذلك.
إذا كنت ترغب في اختبار ما إذا كان يوجد كائن، وهذا سوف رمي خطأ إذا كان الكائن غير معرف:
غير صحيح:
if (myObj !== null && typeof myObj !== "undefined")
وبسبب هذا، يجب اختبار تشير typeof () أولا:
صحيح:
if (typeof myObj !== "undefined" && myObj !== null)
تتوقع نطاق كتلة مستوى
جافا سكريبت لا إنشاء نطاق جديد لكل كتلة التعليمات البرمجية.
صحيح في كثير من لغات البرمجة، ولكن ليس صحيحا في جافا سكريبت.
وهو خطأ شائع، بين المطورين جافا سكريبت الجديد، إلى الاعتقاد بأن هذا رمز إرجاع غير معروف: