تبدیل نوع دادهها (coercion) در جاوااسکریپت (قسمت چهارم):
در مطالب قبلی تبدیل نوع دادههای مختلف به Number و String را بررسی کردیم.
حالا میخواهیم سادهترین تبدیل، یعنی تبدیل به Boolean را بررسی کنیم:
در spec اکمااسکریپت، لیست کوتاهی از مقادیر، تحت عنوان falsy values تعریف شده است. اگر هر کدام از مقادیری که در این لیست هستند را به Boolean تبدیل کنیم، نتیجه مقدار false خواهد بود.
این لیست شامل مقادیر زیر میشود:
- false
- NaN
- 0
- ""
- undefined
- null
طبیعتا هر مقداری که داخل این لیست نباشد، به مقدار true تبدیل میشود.
در نتیجه آبجکتها و آرایههای خالی هم به true تبدیل میشوند:
Boolean({}) // true
!![] // true
#quicktip #js #coercion
@ProGraphs
در مطالب قبلی تبدیل نوع دادههای مختلف به Number و String را بررسی کردیم.
حالا میخواهیم سادهترین تبدیل، یعنی تبدیل به Boolean را بررسی کنیم:
در spec اکمااسکریپت، لیست کوتاهی از مقادیر، تحت عنوان falsy values تعریف شده است. اگر هر کدام از مقادیری که در این لیست هستند را به Boolean تبدیل کنیم، نتیجه مقدار false خواهد بود.
این لیست شامل مقادیر زیر میشود:
- false
- NaN
- 0
- ""
- undefined
- null
طبیعتا هر مقداری که داخل این لیست نباشد، به مقدار true تبدیل میشود.
در نتیجه آبجکتها و آرایههای خالی هم به true تبدیل میشوند:
Boolean({}) // true
!![] // true
#quicktip #js #coercion
@ProGraphs
ProGraphs
جواب: 10 ابتدا کد را بررسی میکنیم: دقت کنید که در این کد دو آبجکت داریم. یکی آبجکت proGraphs که یک پراپرتی read-only به نام prop دارد. و دیگری آبجکت obj که به proGraphs لینک شده است. در نتیجه پراپرتی prop داخل آبجکت proGraphs تعریف شده است. اما آبجکت obj…
سوال سختیه و ترکیبی از دو مفهوم پایهای prototype و descriptor هست. اما بیشتر جوابها درست بود 😁💪
مطالب مربوط به prototype و descriptorها رو میتونید اینجا مطالعه کنید:
-https://t.iss.one/ProGraphs/131
-https://t.iss.one/ProGraphs/277
-https://t.iss.one/ProGraphs/290
مطالب مربوط به prototype و descriptorها رو میتونید اینجا مطالعه کنید:
-https://t.iss.one/ProGraphs/131
-https://t.iss.one/ProGraphs/277
-https://t.iss.one/ProGraphs/290
Telegram
ProGraphs
توضیح مفهوم کلی prototype در جاوااسکریپت (بخش اول)
تقریبا تمامی آبجکتها در جاوااسکریپت یک پراپرتی internal به نام [[prototype]] دارند که به یک آبجکت دیگر اشاره میکند. (این پراپرتی مختص انجین هست)
حال اگر بخواهیم به یک پراپرتی از یک آبجکت دسترسی پیدا…
تقریبا تمامی آبجکتها در جاوااسکریپت یک پراپرتی internal به نام [[prototype]] دارند که به یک آبجکت دیگر اشاره میکند. (این پراپرتی مختص انجین هست)
حال اگر بخواهیم به یک پراپرتی از یک آبجکت دسترسی پیدا…
تبدیل نوع دادهها (coercion) در جاوااسکریپت (قسمت پنجم):
در مطالب قبلی تبدیل انواع دادهها به string, number, boolean و همچنین تبدیل آبجکت به primitive را بررسی کردیم. و دیدیم که هر کدام از این تبدیلها از قوانین مشخصی تبعیت میکنند.
اما چطور میتوانیم این تبدیلها را در عمل انجام دهیم؟
تبدیل بین نوع دادهها به دو صورت کلی اتفاق میافتد:
1- explicit coercion:
در این حالت به صورت مستقیم نوع داده را تغییر میدهیم و با دیدن کد، واضح است که میخواهیم نوع داده را تغییر دهیم:
به دلیل ذات داینامیک جاوااسکریپت، بعضی مواقع در نتیجهی انجام یک عملیات خاص، به صورت خودکار coercion اتفاق میافتد.
مثلا در این کد برای انجام عملیات تفریق، به صورت خودکار string به عدد تبدیل میشود:
در مطالب بعدی، به صورت کامل قوانین implicit coercion و explicit coercion را بررسی میکنیم.
#quicktip #js #coercion
@ProGraphs
در مطالب قبلی تبدیل انواع دادهها به string, number, boolean و همچنین تبدیل آبجکت به primitive را بررسی کردیم. و دیدیم که هر کدام از این تبدیلها از قوانین مشخصی تبعیت میکنند.
اما چطور میتوانیم این تبدیلها را در عمل انجام دهیم؟
تبدیل بین نوع دادهها به دو صورت کلی اتفاق میافتد:
1- explicit coercion:
در این حالت به صورت مستقیم نوع داده را تغییر میدهیم و با دیدن کد، واضح است که میخواهیم نوع داده را تغییر دهیم:
Number("40"); // explicitly coerce to number
2- implicit coercionبه دلیل ذات داینامیک جاوااسکریپت، بعضی مواقع در نتیجهی انجام یک عملیات خاص، به صورت خودکار coercion اتفاق میافتد.
مثلا در این کد برای انجام عملیات تفریق، به صورت خودکار string به عدد تبدیل میشود:
"20" - 5; // 15
دقت کنید که در هر دو حالت، تبدیلها از قوانینی که در مطالب قبلی بررسی کردیم تبعیت میکنند.در مطالب بعدی، به صورت کامل قوانین implicit coercion و explicit coercion را بررسی میکنیم.
#quicktip #js #coercion
@ProGraphs
تبدیل نوع دادهها (coercion) در جاوااسکریپت (قسمت ششم):
در مطالب قبلی نحوهی تبدیل نوع دادههای مختلف به یکدیگر را بررسی کردیم. حالا میخواهیم ببینیم چه زمانی این تبدیلها انجام میشوند.
یکی از مهمترین عملیات در جاوااسکریپت که باعث implicit coercion میشود، عملیات جمع است!
عملگر + در جاوااسکریپت، دو کار متفاوت انجام میدهد: جمع کردن اعداد و concat کردن stringها.
❗️اما عملگر + چطور تشخیص میدهد که باید عملیات جمع را انجام دهد یا concat؟
این 4 قانون را میتوانیم در این جمله خلاصه کنیم:
❗️اگر یکی از دو مقدار از نوع string باشد، یا حتی آبجکتی باشد که بتواند به string تبدیل شود، عملیات concat اتفاق میافتد. در غیر این صورت عملیات جمع اتفاق میافتد.
❗️اما بیاید یک بار دیگر این چهار قانون را مرور کنیم و این بار تبدیلهایی که به صورت خودکار بین نوع دادهها اتفاق میافتد را بررسی کنیم:
1- در قانون یک، coercion اتفاق نمیافتد!
2- در قانون دو، یکی از دو مقدار از نوع string هست. و مقدار دیگر هم به صورت خودکار به string تبدیل میشود.
3- در قانون سه، اگر هر کدام از دو مقدار از نوع عدد نباشند، به صورت خودکار به عدد تبدیل میشوند.
4- در قانون چهار آبجکتها به صورت خودکار به primitive تبدیل میشوند.
(اگر میپرسید "چطور" این تبدیلها اتفاق میافتد؟، 5 مطلب قبلی راجع به coercion رو مطالعه کنید 😁)
#quicktip #js #coercion
@ProGraphs
در مطالب قبلی نحوهی تبدیل نوع دادههای مختلف به یکدیگر را بررسی کردیم. حالا میخواهیم ببینیم چه زمانی این تبدیلها انجام میشوند.
یکی از مهمترین عملیات در جاوااسکریپت که باعث implicit coercion میشود، عملیات جمع است!
عملگر + در جاوااسکریپت، دو کار متفاوت انجام میدهد: جمع کردن اعداد و concat کردن stringها.
❗️اما عملگر + چطور تشخیص میدهد که باید عملیات جمع را انجام دهد یا concat؟
a + b
1- اگر هردو متغیر a و b از نوع string باشند، عملیات concat اتفاق میافتد:"hello" + "world"; // "helloworld
2- اگر یکی از این دو متغیر از نوع string باشد، متغیر دیگر هم به string تبدیل میشود و دو string با هم concat میشوند:1 + "20"; // "120"
3- اگر هر دو متغیر از نوع string نباشند (و آبجکت هم نباشند)، ابتدا هر دو متغیر به عدد تبدیل میشوند و سپس عملیات جمع اتفاق میافتد:1 + true; // 2
4- اگر یک یا هردو مقدار از نوع آبجکت باشند، باید ابتدا به primitive تبدیل شوند. حالا با توجه به اینکه آبجکتها به string تبدیل شدهاند یا نه، طبق 3 قانون بالا تعیین میکنیم که جمع اتفاق میافتد یا concat.این 4 قانون را میتوانیم در این جمله خلاصه کنیم:
❗️اگر یکی از دو مقدار از نوع string باشد، یا حتی آبجکتی باشد که بتواند به string تبدیل شود، عملیات concat اتفاق میافتد. در غیر این صورت عملیات جمع اتفاق میافتد.
❗️اما بیاید یک بار دیگر این چهار قانون را مرور کنیم و این بار تبدیلهایی که به صورت خودکار بین نوع دادهها اتفاق میافتد را بررسی کنیم:
1- در قانون یک، coercion اتفاق نمیافتد!
2- در قانون دو، یکی از دو مقدار از نوع string هست. و مقدار دیگر هم به صورت خودکار به string تبدیل میشود.
3- در قانون سه، اگر هر کدام از دو مقدار از نوع عدد نباشند، به صورت خودکار به عدد تبدیل میشوند.
4- در قانون چهار آبجکتها به صورت خودکار به primitive تبدیل میشوند.
(اگر میپرسید "چطور" این تبدیلها اتفاق میافتد؟، 5 مطلب قبلی راجع به coercion رو مطالعه کنید 😁)
#quicktip #js #coercion
@ProGraphs
با اجرا کردن این دو خط کد به صورت مستقیم در کنسول مرورگر، متوجه میشویم که خروجی آنها دو مقدار متفاوت است!
دلیل این موضوع را توضیح دهید
#interviewquestion #js
@ProGraphs
دلیل این موضوع را توضیح دهید
#interviewquestion #js
@ProGraphs