سلام. به 2 قطعه کد اول و خروجی هر دو در JavaScript و PHP توجه کنید. سوال اول اینکه چرا تعداد اعضای آرایه در JavaScript و PHP قبل از اضافه کردن مقدار جدید به آرایه یکسانه ولی بعد از اضافه کردن, خروجی هر دو متفاوت از هم میشه؟ موقع اضافه کردن مقدار جدید خودم عمدا +1 کردم(carsLength + 1). PHP اون Index که وجود نداره رو جزو اعضای آرایه حساب نمیکنه و صرفا از روی تعداد واقعی اعضای آرایه شمارش میکنه. ولی JavaScript یه جورایی انگار آخرین Index آرایه رو میگیره و یکی بهش اضافه میکنه.
و به قطعه کد 3 توجه کنید. سوال دوم در مورد نوع داده هست. چرا نوع داده آرایه رو هم آرایه و هم شیء در نظر میگیره؟
و به قطعه کد 4 توجه کنید. سوال سوم در مورد Index به صورت Associative در آرایه هاست. توی JavaScript آرایهها Index به صورت انجمنی ندارن طبق ES6. پس چرا وقتی Index به صورت Associative در نظر گرفته میشه. خطایی نمیده ولی مقدار رو جزو آرایه حساب میکنه و خروجی هم میده توی کنسول ولی موقعی که تعداد اعضای آرایه رو میگیرم جزو آرایه حساب نمیکنه؟ در مبحث شیء گرایی موقعی که یه Property از شیء رو میخوایم خروجی بگیریم میشه با استفاده از Square Brackets و نام اون Property به صورت رشته, مقدار رو خروجی بگیریم. چرا؟
var cars = ['BMW', 'Tesla', 'Audi'];
var carsLength = cars.length;
console.log(carsLength);
cars[carsLength + 1] = 'Hyundai';
console.log(cars);
console.log(cars.length);
// Console Output
3 // این قسمت
(5) ["BMW", "Tesla", "Audi", empty, "Hyundai"]
0: "BMW"
1: "Tesla"
2: "Audi"
4: "Hyundai" // این قسمت
length: 5
[[Prototype]]: Array(0)
5 // این قسمت
$cars = array('BMW', 'Tesla', 'Audi');
$cars_count = count($cars);;
echo "$cars_count <br>";
$cars[$cars_count + 1] = 'Hyundai';
var_dump($cars);
echo '<br>' . count($cars);
// Output
3 // این قسمت
array(4) {
[0]=>
string(3) "BMW"
[1]=>
string(5) "Tesla"
[2]=>
string(4) "Audi"
[4]=>
string(7) "Hyundai"// این قسمت
}
4 // این قسمت
console.log(cars instanceof Array);
console.log(cars instanceof Object);
// Output
true // What?
true // What?
cars['New-Car'] = 'KIA';
console.log(cars);
console.log(cars.length);
// Output What?
(5) ["BMW", "Tesla", "Audi", empty, "Hyundai", New-Car: "KIA"]
0: "BMW"
1: "Tesla"
2: "Audi"
4: "Hyundai"
New-Car: "KIA"
length: 5
[[Prototype]]: Array(0)
5 // What?