سوالات فنی در مورد تعداد اعضای آرایه, نوع داده و...

پرسیده شده
فعالیت 948 روز پیش
دیده شده 367 بار
0

سلام. به 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?

 

فایل پیوست

قاسمی
قاسمی

21 شهریور 00

0
حذف شده

سلام

وقت به خیر

چندتا سوال تو یه تاپیک؟! :))

 

سوال اول: مربوط به مفهومی به نام holes در آرایه های جاوا اسکریپت میشه در واقع جاو ااسکیریپت میتونه در آرایه ایندکس هایی فاقد مقدار داشته باشه و وقتی شما اینکار را میکنید اون ایندکس قبلی هم init میشه

برای اطلاعات بیشتر این مقاله را بخونید https://betterprogramming.pub/what-are-holes-in-arrays-3ac5fcbcd1c

 

سوال دوم: در این مورد در یکی از جلسات مفصل توضیح دادم

این کد را هم تست کنید:
 

var test = "hello";
console.log(typeof test);
console.log(test instanceof String);
console.log(test instanceof Object);

 

سوال آخر را متوجه نشدم!

فایل پیوست

مهرداد دادخواه

توسط

مهرداد دادخواه

30 شهریور 00

حذف شده
سلام. (: سوال اول رو متوجه شدم. سوال دوم رو از روی ویدیو جلسات متوجه نشدم. میشه به صورت خلاصه توضیح بدید. در مورد سوال سوم منظورم اینه که فرض کنید یه index از آرایه رو به صورت Associative در نظر گرفتم و یه مقداری بهش دادم. مثل قطعه کد آخر. آرایه توی خروجی چاپ میشه خطا هم نمیده ولی وقتی با .length طول آرایه رو میگیرم اون index و مقدارش رو جزو آرایه حساب نمیکنه. مگه به آرایه های جاوا اسکریپت میشه Associative اضافه کرد؟
قاسمی

30 شهریور 00