ProGraphs
817 subscribers
216 photos
6 videos
11 files
377 links
مجموعه مطالبی از برنامه‌نویسی وب و گرافیک

ProGraphs = Programming + Graphics
Download Telegram
ProGraphs
با اجرای این کد چه مقداری در کنسول چاپ می‌شود؟ #interviewquestion #js @ProGraphs
جواب: Window Title

چند وقت پیش 4 قانون ساده برای تعیین مقدار this را بررسی کردیم. همچنین دیدیم که برای تعیین مقدار this در یک تابع، فقط به جایی که تابع صدا شده است توجه می‌کنیم و اصلا کاری نداریم که کجا و چطور تعریف شده است.

حالا با استفاده از همین 4 قانون، مقدار this را تعیین می‌کنیم:
1- آیا تابع با کلمه کلیدی new صدا شده است؟
خیر.

2- آیا تابع با استفاده از call یا apply صدا شده است؟
خیر.

3- آیا تابع به عنوان متد آبجکت و به صورت obj.func صدا شده است؟
خیر! شاید فکر کنید که تابع داخل آبجکت تعریف شده است. اما گفتیم که نحوه‌ی تعریف شدن تابع، تاثیری در مقدار this ندارد و فقط نحوه‌ی صدا شدن تابع را بررسی می‌کنیم.
در اینجا تابع به صورت IIFE تعریف شده است. یعنی بلافاصله به صورت معمولی صدا شده و واضح است که به صورت obj.printTitle صدا نشده است.

4- آیا جواب سوال‌های بالا خیر بود؟
بله! بنابراین تابع به صورت معمولی صدا شده و مقدار this، آبجکت window است. (اگر در حالت strict-mode بودیم، مقدار this برابر undefined بود). بنابراین مقدار window.title یا همان متغیر گلوبال title در کنسول چاپ می‌شود.
🔺 HEML, an open source markup language for building responsive email.

https://heml.io/

#link #tool #html #css

@ProGraphs
در مطالب قبلی متدهای flat و flatMap که در ES2019 اضافه شده‌اند را بررسی کردیم.

یکی از کاربردهای جالب متد flat، اضافه کردن چند آیتم در یک موقعیت خاص از آرایه به صورت شرطی است.

به کد داخل تصویر دقت کنید. اگر شرط اول true باشد، آرایه [1, 2, 3] و اگر نه، یک آرایه خالی در موقعیت مورد نظر اضافه می‌شود.
و در نهایت چون کل آرایه را flat می‌کنیم، یک آرایه تک بعدی دریافت می‌کنیم.

#quicktip #js

@ProGraphs
فرض کنید یک عنصر container داریم که دو عنصر فرزند داخل آن قرار دارند و این CSS را بر روی عناصر اعمال کرده‌ایم.

فاصله‌ی دو عنصر child از هم در راستای عمودی چند پیکسل است؟

#interviewquestion #css

@ProGraphs
ProGraphs
فرض کنید یک عنصر container داریم که دو عنصر فرزند داخل آن قرار دارند و این CSS را بر روی عناصر اعمال کرده‌ایم. فاصله‌ی دو عنصر child از هم در راستای عمودی چند پیکسل است؟ #interviewquestion #css @ProGraphs
جواب: 80px

یکی از مفاهیم مهم در CSS مفهوم margin collapsing است.

این مفهوم معمولا به این صورت توضیح داده می‌شود که وقتی دو عنصر زیر هم قرار دارند و به هردوی آن‌ها در راستای عمودی margin می‌دهیم، فاصله‌ی دو عنصر در راستای عمودی، به اندازه‌ی مقدار بزرگ‌تر margin خواهد بود و نه جمع آن‌ها.
یعنی در این مثال که دو مقدار 50px و 30px را داریم، انتظار داریم که فاصله‌ی دو عنصر 50px باشد.
اما این تمام ماجرا نیست!

برای درک کامل این موضوع باید با مفهوم BFC آشنا باشیم (در یکی از مطالب، مفهوم BFC و نحوه‌ی ایجاد آن را بررسی کردیم).

نکته مهم این است که بلاک‌های BFC، از margin collapsing جلوگیری می‌کنند. و همچنین هر آیتم داخل flex-container یک BFC است.

در نتیجه وقتی از flexbox استفاده می‌کنیم، پدیده margin collapsing اتفاق نمی‌افتد!

حالا دوباره به کد سوال دقت کنید:
چون هر دو عنصر داخل flex-container هستند، margin collapsing اتفاق نمی‌افتد و فاصله‌ی دو عنصر به اندازه‌ی جمع marginهای دو عنصر، یعنی 80px خواهد بود (و نه 50px).
🔺 با سایت زیر موکاپ ویدیو درست کنین.

https://www.livemockups.com/

#link #video #mockup

@ProGraphs
یکی دیگر از apiهای کاربردی گوگل کروم تابع $$ است. این تابع مشابه متد document.querySelectorAll عمل می‌کند.

با این تفاوت که خروجی تابع querySelectorAll از نوع Array-Like است و به متدهای آرایه‌ها دسترسی ندارد.
ولی خروجی تابع $$ یک آرایه معمولی است. بنابراین می‌توانیم مستقیما تابع‌هایی مثل map را روی آن اجرا کنیم.
(به مطلبی که راجع به Array-Likeها منتشر کردیم مراجعه کنید)

#quicktip #devtools #js

@ProGraphs
با اجرای این کد چه مقداری در کنسول چاپ می‌شود؟

#interviewquestion #js

@ProGraphs
🔺 Free Icon Font & SVG Icons | IcoFont

https://icofont.com/

#link #svg #icon

@ProGraphs
ProGraphs
با اجرای این کد چه مقداری در کنسول چاپ می‌شود؟ #interviewquestion #js @ProGraphs
جواب: "two" !

با بررسی این کد متوجه می‌شویم که دو مقداری که با هم مقایسه می‌شوند، نوع متفاوتی دارند (یکی boolean و یکی number). و چون از عملگر == استفاده کرده‌ایم، نوع داده‌ی یکی از این مقادیر به صورت خودکار تغییر می‌کند تا شرط، بین دو مقدار با نوع یکسان چک شود.

پس منطقاً انتظار داریم عدد 20، به مقدار true تبدیل شود (همه‌ی اعداد به جز 0، truthy هستند). و سپس مقدار "one" در کنسول چاپ شود.
اما این اتفاق نمی‌افتد 😄

چرا "two" در کنسول چاپ شد؟
اگر به spec زبان جاوااسکریپت مراجعه کنیم، متوجه می‌شویم که متاسفانه وقتی با استفاده از عملگر ==، هر مقداری را با true یا false مقایسه می‌کنیم، به جای اینکه مقدار مورد نظر به boolean تبدیل شود، مقدار boolean به عدد تبدیل می‌شود 😐 (حتما خودتان با مقادیر مختلف این عملیات را تست کنید).

یعنی در این کد مقدار true، تبدیل به عدد 1 می‌شود. سپس عدد 1 با عدد 20 مقایسه می‌شود و در نتیجه وارد قسمت else می‌شویم و "two" در کنسول چاپ می‌شود (دقیقا برعکس چیزی که انتظار داشتیم)!

مشخص است که این کد برای بیشتر دولوپرها کاملا گیج کننده است و باید از یک روش دیگر برای مقایسه با true یا false استفاده کنیم:
روش اول: اگر یک طرف شرط، true یا false بود، از عملگر === استفاده کنیم:
20 === true

روش دوم: خودمان طرف دیگر شرط را به boolean تبدیل کنیم:
Boolean(20) == true

روش سوم: اگر با یکی از 6 نفری که گزینه درست رو انتخاب کردند همکار هستید، هر طور که دوست دارید شرط رو بنویسید 😁
احتمالا شما هم با این مشکل مواجه شده‌اید که یک متن را روی یک تصویر قرار دهید و تشابه رنگ متن و تصویر باعث ناخوانا شدن متن در بعضی نقاط شود.

برای حل این مشکل با استفاده از mix-blend-mode می‌توانیم خیلی ساده و فقط با CSS، در همه‌ی نقاط بین متن و تصویر contrast ایجاد کنیم.

#quicktip #css #trick

@ProGraphs
با اجرای این کد چه مقداری در کنسول چاپ می‌شود؟

#interviewquestion #js

@ProGraphs
🔺شما هم در نظر سنجی State of CSS شرکت کنید. ✌🏻

https://stateofcss.com/

#link #css #survey

@ProGraphs
ProGraphs
با اجرای این کد چه مقداری در کنسول چاپ می‌شود؟ #interviewquestion #js @ProGraphs
جواب: false

احتمالا همه‌ی ما با مفهوم Operator Precedence آشنا هستیم و می‌دانیم که یک عبارت که از چند عملگر تشکیل شده، بر اساس اولویت عملگرها parse می‌شود (و نه لزوما از چپ به راست).

اما چند عملگر با اولویت یکسان چطور؟
آیا چند عملگر با اولویت یکسان همیشه از چپ به راست parse می‌شوند؟

برای درک این موضوع باید با مفهوم Associativity آشنا باشیم. Associativity مشخص می‌کند که چند عملگر با اولیت یکسان، به چه ترتیبی اعمال می‌شوند.

این مقدار برای بعضی عملگرها مثل < و > "left-to-right" و برای بعضی عملگرها مثل :? و = "right-to-left" است.

دوباره به کد سوال دقت کنید:
اولویت عملگرها یکسان است. پس با توجه به Associativity عملگر <، عبارت را از چپ به راست می‌خوانیم:
(3 > 2) > 1
true > 1
حالا فقط یک عبارت ساده با یک عملگر داریم:
true > 1
1 > 1
false