ProGraphs
به زودی تغییرات خوبی خواهیم داشت و قصد داریم مطالب بیشتر و بهتری رو پوشش بدیم. اما قبلش با جواب دادن به این چند سوال به ما کمک کنید که این تغییرات هر چه بیشتر همسو با نظر شما باشه 🙏 اگر هر نظر دیگهای هم دارید از این طریق با ما در میون بگذارید: @HiProGraphsBot
بالاخره بعد از یه وقفهی نسبتا طولانی تغییراتی که قولش رو داده بودیم شروع کردیم 😉:
نسخهی اولیه سایت از امروز آمادهاس!
البته سایت رو با الهام از Brendan Eich تو 10 روز آماده کردیم😅
و حتما (فعلا) بدون ایراد و کامل نیست!
www.prographs.ir
البته سایت رو با الهام از Brendan Eich تو 10 روز آماده کردیم😅
و حتما (فعلا) بدون ایراد و کامل نیست!
www.prographs.ir
This media is not supported in your browser
VIEW IN TELEGRAM
میتونید وب سایت/اپلیکیشن ProGraphs رو روی دستگاهتون نصب کنید تا به بعضی قسمتها به صورت آفلاین دسترسی داشته باشید.
(تو ویدیو نصب شدن سایت/اپلیکیشن روی mac, android, windows, ios رو میبینید)
(تو ویدیو نصب شدن سایت/اپلیکیشن روی mac, android, windows, ios رو میبینید)
This media is not supported in your browser
VIEW IN TELEGRAM
بعد از نصب، میتونید یک لینک رو مستقیما از appهای نیتیو (مثل یوتیوب) با ما share کنید!
(فعلا فقط اندروید و گوگل کروم 71+)
(فعلا فقط اندروید و گوگل کروم 71+)
و از امروز در کنار مطالب کانال، به صورت منظم توی صفحهی اینستاگرام هم آموزشهای ویدیویی کوتاه خواهیم داشت.
instagram.com/prographs
instagram.com/prographs
تفاوت == و === در جاوااسکریپت چیست؟
(اونقدر که به نظر میرسه جواب واضح نیست 😅)
#interviewquestion #js
@ProGraphs
(اونقدر که به نظر میرسه جواب واضح نیست 😅)
#interviewquestion #js
@ProGraphs
ProGraphs
تفاوت == و === در جاوااسکریپت چیست؟ (اونقدر که به نظر میرسه جواب واضح نیست 😅) #interviewquestion #js @ProGraphs
جواب:
احتمالا جواب اکثر دولوپرها به این سوال، این جمله است:
عملگر == فقط مقدار را چک میکند. ولی عملگر === علاوه بر مقدار، نوع داده را هم چک میکند.
اما این تعریف در جاوااسکریپت دقیق نیست!
❗️در واقع عملگر == هم نوعداده را چک میکند و اگر نوع دادهی دو مقدار یکسان نباشد، یک یا هردوی مقادیر را تغییر میدهد (coercion) تا بتواند مقدار آنها را مقایسه کند.
در نتیجه برعکس چیزی که از تعریف اول به نظر میرسد، عملگر == کار بیشتری از عملگر === انجام میدهد!
اما دانستن تعریف دقیقتر چه کمکی به ما میکند؟
این عبارت را در نظر بگیرید:
2- اما وقتی با تعریف دقیقتر این عبارت را بررسی میکنیم، میدانیم که دو مقدار از نوعدادهی یکسان نیستند، پس عملگر == سعی میکند obj را تبدیل به string کند تا بتواند دو مقدار را مقایسه کند (برای تبدیل obj به string، متد toString صدا میشود).
(اینکه چطور obj به string تبدیل شد، و در کل coerce شدن نوع دادههای مختلف به یکدیگر را مطالب بعدی بررسی میکنیم)
احتمالا جواب اکثر دولوپرها به این سوال، این جمله است:
عملگر == فقط مقدار را چک میکند. ولی عملگر === علاوه بر مقدار، نوع داده را هم چک میکند.
اما این تعریف در جاوااسکریپت دقیق نیست!
❗️در واقع عملگر == هم نوعداده را چک میکند و اگر نوع دادهی دو مقدار یکسان نباشد، یک یا هردوی مقادیر را تغییر میدهد (coercion) تا بتواند مقدار آنها را مقایسه کند.
در نتیجه برعکس چیزی که از تعریف اول به نظر میرسد، عملگر == کار بیشتری از عملگر === انجام میدهد!
اما دانستن تعریف دقیقتر چه کمکی به ما میکند؟
این عبارت را در نظر بگیرید:
let obj = {1- وقتی با تعریف اول این عبارت را بررسی میکنیم، کاملا غیرمنطقی و گیج کننده به نظر میرسد!
toString() {
return "hi";
}
};
"hi" == obj // true!
2- اما وقتی با تعریف دقیقتر این عبارت را بررسی میکنیم، میدانیم که دو مقدار از نوعدادهی یکسان نیستند، پس عملگر == سعی میکند obj را تبدیل به string کند تا بتواند دو مقدار را مقایسه کند (برای تبدیل obj به string، متد toString صدا میشود).
(اینکه چطور obj به string تبدیل شد، و در کل coerce شدن نوع دادههای مختلف به یکدیگر را مطالب بعدی بررسی میکنیم)
This media is not supported in your browser
VIEW IN TELEGRAM
تو این سایت میتونید تعداد starهای پروژههای مختلف github رو در طول زمان ببینید ⭐️
https://star-history.t9t.io/
#link #github #graph
@ProGraphs
https://star-history.t9t.io/
#link #github #graph
@ProGraphs
تبدیل نوع دادهها (coercion) در جاوااسکریپت (قسمت اول):
چطور نوع دادههای مختلف در جاوااسکریپت به string تبدیل میشوند؟
❗️1-تقریبا همهی مقادیر primitive بدون تغییر خاصی به string تبدیل میشوند و حالت stringای آنها از پیش تعیین شده است:
همین! حالا مهم نیست که کجا، چطور و با کدام روش یک مقدار به string تبدیل میشود. در هر صورت از قوانینی که بررسی کردیم تبعیت میشود و خروجی coercion یکسان خواهد بود:
@ProGraphs
چطور نوع دادههای مختلف در جاوااسکریپت به string تبدیل میشوند؟
❗️1-تقریبا همهی مقادیر primitive بدون تغییر خاصی به string تبدیل میشوند و حالت stringای آنها از پیش تعیین شده است:
true -> "true"اما اعداد خیلی بزرگ و خیلی کوچک به صورت نمایی نمایش داده میشوند:
12 -> "12"
NaN -> "NaN"
null -> "null"
undefined -> "undefined"
10000000000000000000000 -> "1e+22"
❗️2- برای تبدیل آبجکتها به string، متد toString داخل آنها صدا میشود:var obj = {همچنین داخل Object.prototype، متدی به نام toString تعریف شده است. بنابراین اگر خودمان متد toString را داخل یک آبجکت تعریف نکنیم، متد Object.toString برای تبدیل به string صدا میشود (به مطالبی که راجع به prototype chain منتشر کردیم مراجعه کنید).
toString() {
return "proGraphs";
}
}
obj -> "proGraphs"
همین! حالا مهم نیست که کجا، چطور و با کدام روش یک مقدار به string تبدیل میشود. در هر صورت از قوانینی که بررسی کردیم تبعیت میشود و خروجی coercion یکسان خواهد بود:
String(true); // "true"
true + ""; // "true
...
#quicktip #js #coercion@ProGraphs
ProGraphs
تبدیل نوع دادهها (coercion) در جاوااسکریپت (قسمت اول): چطور نوع دادههای مختلف در جاوااسکریپت به string تبدیل میشوند؟ ❗️1-تقریبا همهی مقادیر primitive بدون تغییر خاصی به string تبدیل میشوند و حالت stringای آنها از پیش تعیین شده است: true -> "true" 12…
معمولا کسانی که با جاوااسکریپت میونه خوبی ندارند خیلی از قوانین coercion گله میکنند 😁
اگه از این افراد میشناسید، این مطلب رو براشون بفرستید!
از این به بعد هر هفته، تو یک مطلب، قوانین coercion برای یکی از نوع دادهها رو بررسی میکنیم.
اگه از این افراد میشناسید، این مطلب رو براشون بفرستید!
از این به بعد هر هفته، تو یک مطلب، قوانین coercion برای یکی از نوع دادهها رو بررسی میکنیم.
🔺لیستی از هر آنچه میتواند در تگ <head> قرار بگیرد. 👌🏻
https://github.com/joshbuchea/HEAD#recommended-minimum
#link #html #head
@ProGraphs
https://github.com/joshbuchea/HEAD#recommended-minimum
#link #html #head
@ProGraphs
GitHub
GitHub - joshbuchea/HEAD: A simple guide to HTML <head> elements
A simple guide to HTML <head> elements. Contribute to joshbuchea/HEAD development by creating an account on GitHub.
اگر هردوی این rulesetها به یک عنصر اعمال شوند، متن این عنصر چه رنگی خواهد بود؟
#interviewquestion #css
@ProGraphs
#interviewquestion #css
@ProGraphs
ProGraphs
اگر هردوی این rulesetها به یک عنصر اعمال شوند، متن این عنصر چه رنگی خواهد بود؟ #interviewquestion #css @ProGraphs
جواب: green
برای تعیین رنگ عنصر،ابتدا specificity دو انتخابگر را تعیین میکنیم:
اگر 10 امتیاز برای هر کلاس، و 100 امتیاز برای هر id اضافه کنیم، امتیاز دو انتخابگر به این ترتیب تعیین میشود:
انتخابگر اول: 100
انتخابگر دوم: 110
همانطور که میبینید امتیاز انتخابگر دوم بیشتر است! اما چرا ruleset اول اعمال شد؟
مشکل اینجاست که امتیاز انتخابگرها به صورت دهدهی محاسبه نمیشود و اولویت انتخابگر id بالاتر از کلاس است. در نتیجه هیچ تعدادی از کلاسها نمیتوانند یک id را override کنند!
پس بهتر است امتیاز انتخابگرها را به این شکل تعیین کنیم:
انتخابگر اول: 0, 0, 1, 0
انتخابگر دوم: 0, 11, 0, 0
چون تعداد idها در انتخابگر اول بیشتر است، پس قطعا ruleset اول اعمال میشود و رنگ متن عنصر green خواهد بود.
برای تعیین رنگ عنصر،ابتدا specificity دو انتخابگر را تعیین میکنیم:
اگر 10 امتیاز برای هر کلاس، و 100 امتیاز برای هر id اضافه کنیم، امتیاز دو انتخابگر به این ترتیب تعیین میشود:
انتخابگر اول: 100
انتخابگر دوم: 110
همانطور که میبینید امتیاز انتخابگر دوم بیشتر است! اما چرا ruleset اول اعمال شد؟
مشکل اینجاست که امتیاز انتخابگرها به صورت دهدهی محاسبه نمیشود و اولویت انتخابگر id بالاتر از کلاس است. در نتیجه هیچ تعدادی از کلاسها نمیتوانند یک id را override کنند!
پس بهتر است امتیاز انتخابگرها را به این شکل تعیین کنیم:
انتخابگر اول: 0, 0, 1, 0
انتخابگر دوم: 0, 11, 0, 0
چون تعداد idها در انتخابگر اول بیشتر است، پس قطعا ruleset اول اعمال میشود و رنگ متن عنصر green خواهد بود.
Node.js security best practices
https://medium.com/@nodepractices/were-under-attack-23-node-js-security-best-practices-e33c146cb87d
#link #article #node #security
@ProGraphs
https://medium.com/@nodepractices/were-under-attack-23-node-js-security-best-practices-e33c146cb87d
#link #article #node #security
@ProGraphs
Medium
We’re under attack! 23+ Node.js security best practices
A curated list of 23 node security best practices with code examples and quotes from the top ranked blogs
🔺با سایت زیر تصاویر خود را بدون کاهش کیفیت فشرده کنید. ✌🏻
https://squoosh.app
#link #imagecompressor
@ProGraphs
https://squoosh.app
#link #imagecompressor
@ProGraphs
ProGraphs
آیا در این کد میتوانیم در خط 6 به متغیر گلوبال دسترسی پیدا کنیم؟ #interviewquestion #js @ProGraphs
جواب: خیر!
با توجه به نحوهی عملکرد lexical scope، همیشه ابتدا داخل خود تابع دنبال یک متغیر میگردیم. بنابراین همیشه متغیر proGraphs داخل تابع پیدا میشود و به متغیر گلوبال دسترسی پیدا نمیکنیم.
این شرایط با عنوان variable shadowing شناخته میشود.
از طرفی متغیرهایی که با let تعریف میشوند، به آبجکت global اضافه نمیشوند. یعنی window.proGraphs وجود نخوهد داشت و از راه غیر lexical هم به متغیر گلوبال دسترسی نداریم!
https://en.wikipedia.org/wiki/Variable_shadowing
با توجه به نحوهی عملکرد lexical scope، همیشه ابتدا داخل خود تابع دنبال یک متغیر میگردیم. بنابراین همیشه متغیر proGraphs داخل تابع پیدا میشود و به متغیر گلوبال دسترسی پیدا نمیکنیم.
این شرایط با عنوان variable shadowing شناخته میشود.
از طرفی متغیرهایی که با let تعریف میشوند، به آبجکت global اضافه نمیشوند. یعنی window.proGraphs وجود نخوهد داشت و از راه غیر lexical هم به متغیر گلوبال دسترسی نداریم!
https://en.wikipedia.org/wiki/Variable_shadowing
Wikipedia
Variable shadowing
a variable in an inner scope hiding an identically named variable in an outer scope