<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
    <channel>
        <title>نوشته های الهام زین‌الدینی</title>
        <link>https://virgool.io/feed/@elhamZeinodini</link>
        <description>who reads these anyways? (also : Software engineer , Howdy)</description>
        <language>fa</language>
        <pubDate>2026-06-16 15:25:39</pubDate>
        <image>
            <url>https://files.virgool.io/upload/users/876610/avatar/kpcxvI.jpeg?height=120&amp;width=120</url>
            <title>الهام زین‌الدینی</title>
            <link>https://virgool.io/@elhamZeinodini</link>
        </image>

                    <item>
                <title>تفاوت isNaN و Number.isNaN چیه ؟</title>
                <link>https://virgool.io/@elhamZeinodini/isnan-vs-numberisnan-in-js-w28h2cfsvlu0</link>
                <description>خب! میدونید که isNaN یعنی چی! میگه که این چیزی که شبیه عدد (Number) هست واقعا عدده یا نه ؟ و اگر مقدار (value) مد نظر عدد نباشه (Not a Number or NaN) مقدار true برمیگردونه. حالا سوال اینه که تفاوت isNaN و Number.isNaN چیه ؟ تابع isNaN یک تابع Global هست و میتونی از هرجای برنامه صداش بزنی، به قطعه کد زیر توجه کن : خب تا این جای کار همه چیز خوبه، ولی! به قطعه کد بعدی هم توجه کن :همون طوری که میبینید isNaN برخی از رشته ها (String) رو به عنوان عدد (Number) در نظر میگیره و مقدار false رو برمیگردونه ( به تفاوت isNaN(&#x27;elham&#x27;) و isNaN(&#x27;38&#x27;) توجه کن).متد Number.isNaN در EcmaScript 2015#Number.isNaN برای حل این مشکلات اومد، چک میکنه که value یا مقداری که بهش ‍‍‍‍پاس دادی NaN یا Not a Number هست و نوع داده ای اون مقدار Number هست  نحوه عملکردش رو در قطعه کد زیر ببینید : برای درک بهتر این موضوع، سومین مورد قطعه کد بالا رو بررسی میکنیم :حالا که تفاوتشون رو متوجه شدیم چند تا نمونه از سوالهایی که شرکتهای مختلف توی مصاحبه هاشون از این مبحث میپرسن رو ببینیم :نوع داده ای NaNچیست ؟console.log(typeof NaN === &quot;number&quot;);  // logs &quot;true&quot;// NaN is an invalid numberنتیجه عبارت NaN === NaN چیست ؟در مقایسه با خودش و هر چیز دیگه مقدار False رو برمیگردونه.console.log(NaN === NaN);  // logs &quot;false&quot;چرا isNaN(&quot;elham&quot;) === true اما isNaN(&quot;123&quot;) === false است ؟وقتی مقداری به isNaN پاس داده میشه که نوع داده ای اون Number نیست اون مقدار به نوع Number تبدیل میشه (به نوعی به اجبار) و بعد تست میشه که آیا NaN هست یا نه.در تصاویر زیر این مفهوم رو در عمل مشاهده میکنید :isNaN(&quot;elham&quot;) === trueisNaN(&quot;123&quot;) === falseاکه نکته دیگه مونده شما اضافه کنید!</description>
                <category>الهام زین‌الدینی</category>
                <author>الهام زین‌الدینی</author>
                <pubDate>Sun, 25 Jul 2021 19:51:32 +0430</pubDate>
            </item>
                    <item>
                <title>آبجکت لیترال‌ها در جاوا اسکریپت</title>
                <link>https://virgool.io/WebDevelopers/object-literals-in-javascript-vdgvt6bg9lll</link>
                <description>آبجکت لیترال لیستی از جفت name-value هایی است که با کاما از هم جدا میشن و درون curly brace یا ({}) قرار دارند. valueها میتونن خصوصیات (properties) و توابع (functions) باشند. در قطعه کد زیر آبجکت لیترالی با یک property و یک function رو مشاهده می‌کنید :an object literal with one property and one valueو در قطعه کد زیر از آبجکتی که ایجاد کردیم برای لاگ (log) کردن fullName  و فراخوانی (call) متد Greet با مقدار fullName استفاده می‌کنیم :فرض کنید می‌خواهیم که به خصوصیت fullName داخل متد Greet دسترسی داشته باشیم، به جای اینکه اون رو از یک پارامتر بخونیم . اگر بخوایم به این روش بهش دسترسی داشته باشیم خطای ReferenceError fullName is not defined دریافت میکنیم :به جای این‌کار می‌توان تابعی به نام ()getFullName ایجاد کرد که به مقدار پراپرتی fullName از طریق this دسترسی دارد :و خروجی قطعه کد بالا مطابق زیر خواهد بود :تمامی اعضای یک آبجکت لیترال ( چه property و چه value ) عمومی هستند. تنها جایی که می‌توانید یک عضو را به صورت خصوصی تعریف کنید درون یک تابع است. برای مثال در قطعه کد زیر یک متغیر خصوصی درون متد Greet تعریف کرده‌ایم تا پیام (message) را کاستومایزتر کنیم :متغیر customeMessage فقط در اسکوپ متد Greet قابل دسترسی است، اما اگر خارج از این متد و به عنوان یک خصوصیت (property) قرار گرفته بود دارای دسترسی عمومی بود. تخصیص یک آبجکت لیترال به یک متغیر دیگر تنها یک کپی سطحی ایجاد می‌شود یعنی یک متغیر ساخته می‌شود و به مکانی در حافظه، که مقدار متغیر قبلی در آن قرار گرفته است، اشاره می‌کند. پس اگر شما مقدار متغیر اول را تغییر دهید، متغیر دوم هم تغییر می‌کند. و همین‌طور اگر مقدار متغیر دوم را تغییر دهید، مقدار متغیر اول هم تغییر می‌کند، یعنی به جای خود مقدار (value) یک رفرنس از آن دریافت می‌کنید. فرضا می‌خواهیم با استفاده از آبجکتی که تا کنون ایجاد کردیم (greetings) یک آبجکت دیگر به نام anotherGreeting ایجاد کنیم :انجام این‌کار ممکن است در وهله اول بدون اشکال به نظر برسد، اما نکته اینجاست که هر تغییری در anotherGreeting رخ دهد در greetings نیز اعمال خواهد شد :و در آخر، می‌تونید اعضای یک آبجکت لیترال رو دستکاری کنید، یعنی می‌تونید اون‌ها رو به دلخواه خودتون و مثل قطعه کد زیر حذف یا اضافه کنید : آبجکت لیترال‌ها باید در مواقعی استفاده بشن که نمی‌خواهید مقادیر (values) اون‌ها رو در یک آبجکت دیگه کپی کنید . اگر هم به نمونه‌های متعدد (multiple instances) از آبجکتی خاص احتیاج دارید از سازنده یا constructor استفاده کنید.</description>
                <category>الهام زین‌الدینی</category>
                <author>الهام زین‌الدینی</author>
                <pubDate>Sat, 10 Jul 2021 12:39:07 +0430</pubDate>
            </item>
            </channel>
</rss>