في جافا سكريبت، لماذا [] يفضل على صفيف جديد () ؛؟

StackOverflow https://stackoverflow.com/questions/1800594

  •  05-07-2019
  •  | 
  •  

سؤال

وأذكر أني قرأت في مكان ما (وأعتقد أنه كان في واحدة من أوراق كروكفورد) والتي تستخدم [] الحرفي مجموعة أفضل من استخدام التدوين new Array();.

ولكن لا يمكنني أن أتذكر حقا أي مزايا أحدهما على الآخر.

ويمكن لأي شخص الرجاء شرح لي لماذا يفضل السابق على هذه الأخيرة؟

وهنا هو أحد الأسباب التي أستطيع أن أفكر في يوم لماذا [] أفضل من new Array();:

var Array = function () { };

وغلبة الكائن Array سوف كسر كود ...!

وأي أسباب أخرى؟

هل كانت مفيدة؟

المحلول

الإيجاز

ولديها أقل بايت نقل عبر السلك، وأقل بايت إلى تفسير، والموارد أقل العقلية لتحليل ذلك.

وأقل ما هو أكثر.

الاتساق

ما هو الفرق بين هذين السطرين من التعليمات البرمجية؟

var arr = [5];
var arr = new Array(5);

ووفقا ل هنا new Array(5); لن يعود صفيف 5 في ذلك، وبدلا من ذلك فإنه سيعود مجموعة 5 عنصر، مع جميع العناصر التي يجري undefined. في حين أن هذين الخطين العودة صفائف متطابقة.

var arr = [5,6];
var arr = new Array(5,6);

نصائح أخرى

واحد سبب وجيه هو أنه منشئ صفيف ديه السلوك تماما غير بديهية. على سبيل المثال:

var a = new Array(5);
console.log(a.length); //prints "5"
console.log(a[0]); //prints "undefined"

var b = new Array(1,2);
console.log(b.length); //prints "2"
console.log(b[0]); //prints "1"

في هذه الحالة، ينتهي به الأمر مجموعة من حجم 5 مع جميع عناصر غير محددة، وب ينتهي به الأمر إلى مجموعة من حجم 2، مع القيم [1،2].

var c = new Array("5");
console.log(c.length); //prints "1"
console.log(c[0]); //prints "5"

وهنا، ينتهي بك الأمر مع مجموعة من عنصر واحد، تحتوي على "5"

في عام، يجب عليك ربما على لا استخدام المنشئات على المدمج في أنواع في جافا سكريبت. لديهم كل الحالات حافة غريبة من هذا القبيل. على سبيل المثال:

var s = new String("Hello");
var l = "Hello";
console.log(typeof(s)); // prints "object"
console.log(typeof(l)); // prints "string"

أناقة

لوضعها ببساطة مجرد <م> يبدو أجمل وأسهل لمبرمج لتحليل، وخاصة بالنسبة للهياكل البيانات أكثر تعقيدا:

var a = [
    ['a list', 'of', 'strings'],
    [1, 2, 3, 4],
    { hello: "This is an object property." }
];

ومقابل طريقة غير ملائمة الموجهة OOP:

var a = new Array();
var a2 = new Array();

a2.push('a list');
a2.push('of');
a2.push('strings');

var a3 = new Array();
a3.push(1);
a3.push(2);
a3.push(3);
a3.push(4);

var o = new Object();
o.hello = "This is an object property";
a.push(a2, a3, o);

وnew Array(1, 2, 3) بدلا من [1, 2, 3] هو نفس new String("cow") بدلا من "cow"

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top