الأخطاء الشائعة في JavaScript
- الصفحة السابقة أفضل الممارسات لـ JS
- الصفحة التالية أداء JS
هذه الفصل تشير إلى بعض الأخطاء الشائعة في JavaScript.
استخدام عمود التخصيص غير المتوقع
إذا استخدم البرمجي if
استخدام عمود التخصيص غير المتوقع في=
)، وليس عمود التحقق (====
)، قد ينتج برنامج JavaScript بعض النتائج غير المتوقعة.
هذه if
الجملة تعود false
(كما توقعتم)، لأن x لا يساوي 10:
var x = 0; if (x == 10)
هذه if
الجملة تعود true
(ربما ليس كما توقعتم)، لأن 10 هو true:
var x = 0; if (x = 10)
هذه if
الجملة تعود false
(ربما ليس كما توقعتم)، لأن 0 هو false:
var x = 0; if (x = 0)
تعود التخصيص دائمًا قيمة التخصيص.
توقع المقارنة الهادئة
في المقارنة العادية، نوع البيانات غير مهم. هذه if
الجملة تعود true
:
var x = 10; var y = "10"; if (x == y)
في المقارنة الصارمة، نوع البيانات مهم بالفعل. هذه if
الجملة تعود false
:
var x = 10; var y = "10"; if (x === y)
خطأ شائع هو نسيان في switch
الجملة تستخدم مقارنة صارمة:
هذه switch
الجملة ستظهر نافذة التأكيد:
var x = 10; switch(x) { case 10: alert("Hello"); }
هذه switch
الجملة لن تظهر نافذة التأكيد:
var x = 10; switch(x) { case "10": alert("Hello"); }
الإضافة والجمع المربك
إضافةللإضافةالرقم.
الإضافة المتتابعة (Concatenation)للإضافةالنص.
في JavaScript، كل من هذين العمليتين يستخدم نفس +
عنصر الحساب.
لذلك، إضافة الأرقام ك数值 مع إضافة الأرقام ك نص، سينتج عنه نتائج مختلفة:
var x = 10 + 5; //结果是 15 في x var x = 10 + "5"; //结果是 "105" في x
إذا كانت هناك إضافة بين متغيرين، من الصعب التنبؤ بالنتيجة:
var x = 10; var y = 5; var z = x + y; //结果是 15 في z var x = 10; var y = "5"; var z = x + y; //结果是 "105" في z
النقاط العشرية المربكة
كل الأرقام في JavaScript يتم حفظها كـ64 بتالأرقام العشرية (Floats).
كل لغة برمجة، بما في ذلك JavaScript، تواجه صعوبة في معالجة القيم العشرية:
var x = 0.1; var y = 0.2; var z = x + y // النتيجة في z لن تكون 0.3
لحل هذه المشكلة، استخدم عملية الضرب والقسمة:
مثال
var z = (x * 10 + y * 10) / 10; // النتيجة في z ستكون 0.3
استخدام النقاط السطرية في النصوص JavaScript
يسمح JavaScript بإنقسام جملة إلى سطرين:
مثال 1
var x = "Hello World!";
لكن، إن نقطة السطر في منتصف النص غير صحيحة:
مثال 2
var x = "Hello World!";
إذا كان من الضروري إجراء نقطة سطر في النص، فعليك استخدام الرمز المقلوب:
مثال 3
var x = "Hello \", World!";
نقطة السطر المفقودة
بسبب نقطة السطر الخاطئة، سيتم تنفيذ هذا الكود مهما كان قيمة x:
if (x == 19); { // block of code }
استخدام النقاط السطرية للجملة return
إن إغلاق الجملة تلقائيًا في نهاية السطر هو سلوك JavaScript الافتراضي.
لذلك، ستعود هذه الأمثلة الثلاثة إلى نفس النتيجة:
مثال 1
function myFunction(a) { var power = 10 return a * power }
مثال 2
function myFunction(a) { var power = 10; return a * power; }
يسمح JavaScript أيضًا بإنقسام جملة إلى سطرين.
لذلك، سيعود مثال 3 أيضًا إلى نفس النتيجة:
مثال 3
function myFunction(a) { var power = 10; return a * power; }
لكن، إذا كنت تريد return
ماذا سيحدث إذا قمت بإنقسام الجملة إلى سطرين؟
مثال 4
function myFunction(a) { var power = 10; return a * power; }
سيقوم هذا الدالة بتقديم غير معرف
!
لماذا؟ لأن JavaScript يعتقد أنك تعني:
مثال 5
function myFunction(a) { var power = 10; return; a * power; }
توضيح
إذا كانت هناك جملة غير مكتملة:
var
سيكمل JavaScript هذا الجملة من خلال قراءة السطر التالي:
power = 10;
لكن نظرًا لأن هذه الجملة كاملة:
return
سيغلق JavaScript هذا الجملة تلقائيًا:
return;
حدث هذا بسبب، في JavaScript، يمكن إغلاق (إنهاء) الجملة باستخدام نقطة السطر بشكل اختياري.
سيغلق JavaScript في نهاية السطر return
الجملة، لأنها جملة كاملة بالفعل.
لذا، لا يجب أبدًا على return
الجملة تتغير إلى الأسفل.
باستخدام اسم المفهرس لتحديد الوصول إلى اللوحة
يدعم العديد من لغات البرمجة المصفوفات التي تحتوي على مؤشرات مسماة.
تسمى المصفوفات التي تحتوي على مؤشرات مسماة بمصفوفات المرتبطة (أو المتباينة).
JavaScript غير مدعومالمصفوفة التي تحتوي على مؤشرات مسماة.
في JavaScript،المصفوفةاستخدمالمؤشرات الرقمية:
مثال
var person = []; person[0] = "Bill"; person[1] = "Gates"; person[2] = 46; var x = person.length; // سيقوم person.length بتحويل 3 var y = person[0]; // سيقوم person[0] بتحويل "Bill"
في JavaScript،الكائناستخدمالمؤشرات المسماة.
إذا كنت تستخدم المؤشرات المسماة، فإن JavaScript سيقوم بتعريف المصفوفة ككائن معياري عند الوصول إليها.
بعد إعادة التعريف التلقائي، ستكون نتائج طرق أو خصائص المصفوفة غير معرفة أو غير صحيحة:
مثال
var person = []; person["firstName"] = "Bill"; person["lastName"] = "Gates"; person["age"] = 46; var x = person.length; // سيقوم person.length بتحويل 0 var y = person[0]; // person[0] سيقوم بتحويل "undefined"
استخدم الكومياس للانتهاء من التعريف
الكومياس المتدرج في تعريف كائنات المصفوفات أو العناصر هو قانوني في ECMAScript 5.
مثال على كائن:
person = {firstName:"Bill", lastName:"Gates", age:62,};
مثال على مصفوفة:
points = [35, 450, 2, 7, 30, 16,];
تحذير!!
متصفح إنترنت إكسبلورر 8 سينهار.
لا يسمح JSON بالكومياس المتدرج.
JSON:
person = {firstName:"Bill", lastName:"Gates", age:62};
JSON:
points = [35, 450, 2, 7, 30, 16];
غير معرف ليس Null
يمكن أن تكون كائنات JavaScript، المتغيرات، الخصائص والأساليب غير معرفة.
بالإضافة إلى ذلك، يمكن أن تكون قيمة كائن JavaScript الفارغ: لا شيء
.
قد يجعل ذلك من الصعب التحقق من أن الكائن فارغ.
يمكنك التحقق من أن النوع هو: غير معرف
،للتحقق من وجود الكائن:
مثال
if (typeof myObj === "undefined")
لكن لا يمكنك اختبار ما إذا كان العنصر لا شيء
، لأن إذا كان العنصر غير معرف، سيتم إطلاق خطأ:
غير صحيح:
if (myObj === null)
لحل هذه المشكلة، يجب اختبار ما إذا كان العنصر لا شيء
، وليس غير معرف.
ولكن هذا سيزيد من خطأ:
غير صحيح:
if (myObj !== null && typeof myObj !== "undefined")
لذلك، قبل اختبار ما إذا كان غير صحيح، يجب اختبار ما إذا كان غير معرف أولاً:
صحيح:
if (typeof myObj !== "undefined" && myObj !== null)
يتوقع نطاق مكاني للكتل
JavaScript لن يفعليخلق مجال جديد للكود لكل مكتبة كود.
العديد من لغات البرمجة تفعل ذلك، ولكن JavaScript ليس هذا صحيحاً.
يظن أن هذا الكود سيعود غير معرف
، هو خطأ شائع لـ مبرمجين JavaScript الجدد:
مثال
for (var i = 0; i < 10; i++) { // مكتبة الكود } return i;
- الصفحة السابقة أفضل الممارسات لـ JS
- الصفحة التالية أداء JS