تابستون داره تموم میشه ها، فرصت‌ها محدودن کلی آفر جذاب در کمپین تابستون🔥👇
۰ ثانیه
۰ دقیقه
۰ ساعت
۲ علیرضا بابایی
درخواست توضیح در مورد کد
مهرداد حل شده توسط مهرداد

با سلام خدمت استاد گرامی

میشه راهنمایی خودتون رو برای من در مورد قطعه کد زیر انجام بدید؟

var myObj = new Object(),
    str = 'myString',
    rand = Math.random(),
    obj = new Object();
myObj.type              = 'Dot syntax';
myObj['date created']   = 'String with space';
myObj[str]              = 'String value';
myObj[rand]             = 'Random Number';
myObj[obj]              = 'Object';
myObj['']               = 'Even an empty string';
console.log(myObj);

متوجه نمیشم چرا مقادیر رو به این صورت وارد کرده و زمانی که 

console.log(myObj.str);

چیزی خروجی نداره

ممنون

 

سلام علیرضا، با اجازه از خودت و استاد من جواب بدم

var myObj = new Object(),
    str = 'myString',
    rand = Math.random(),
    obj = new Object();

این قسمت اومده چند متغیر رو دریک عبارت تعریف کرده در واقع چند چیز رو در یک خط به وجود آورده در همون سایت mozila بالاتر بیایید و اینجا رو دوباره مرور کنید یا Declare Variables in a Single Line رو جستجو کنید

کد پایین رو هم نگاه کنید داره با معلومات ذهن بازی میکنه و همه تغییرات رو فقط بر myObj اعمال میکنه با دقت دوباره نگاه کنید

myObj.type              = 'Dot syntax';
myObj['date created']   = 'String with space';
myObj[str]              = 'String value';
myObj[rand]             = 'Random Number';
myObj[obj]              = 'Object';
myObj['']               = 'Even an empty string';

دقیقا، فقط اومده دارایی به myObj داده یا همون property به object اضافه کرده اونم با دو روش، یکی نقطه ودیگری کروشه 

میتونی  باز هم در همون mozila در موردش بیشتر  بخونی یا Property accessors in JavaScript رو جستجو کنید

 

حالا سوال شما که چرا عبارت پایینی چیزی نمایش نمیده؟

console.log(myObj.str);

با توجه به معلوماتمون تا الان باید متوجه شده باشیم که اصلا دارایی در myObj به اسم str نداریم اونی که اضافه شده 

طبق متغییر هایی که  اول تعریف شده، یعنی

str = 'myString'

myString است  پس به همین دلیل با نوشتن myObj.str چیزی نشون داده نمیشه اما اگر عبارت زیر رو بنویسی

console.log(myObj.myString)

 یه چیزی نمایش میده

 

بهترین پاسخ
مهرداد ۰۶ بهمن ۱۳۹۹، ۱۸:۰۴

سلام به جناب بابایی و آقا مهرداد و تشکر بابت پاسخی که دادن

پاسخ ایشان کامل و درست بود.

فقط اگر بخوام یه نکته بهش اضافه کنم در Best Practice‌های جاوا اسکریپت اومده که بهتره برای تعریف چند متغییر به طور همزمان به روش زیر عمل نشه:

 

var myObj = new Object(),
    str = 'myString',
    rand = Math.random(),
    obj = new Object();

 

و بهتره به این شکل نوشته بشه:

 

var myObj = new Object();
var str = 'myString';
var rand = Math.random();
var obj = new Object();

 

هرچند خروجی هر ۲ کد یک چیزه ولی دومی هم خواناتره و هم جلوی بعضی از خطاهای سهوی را میگیره
در این مورد در قسمت اول جاوا اسکریپت سطح متوسط و با موضوع Best Practice‌ها مفصلا توضیح دادم.

 

امیدوارم موفق باشید

مهرداد دادخواه ۰۷ بهمن ۱۳۹۹، ۱۴:۳۴