تیکه پاره های جاوا اسکریپت
442 subscribers
88 photos
11 videos
2 files
56 links
شاید اینا تکات ساده ای باشند اما بعضاً به پهنای دو روز باگ برای من بوده اند 🤓
آدرس گروه:
@iran_javascript_group

————————————————

☕️ Java Channel: @pieceJava
📒 JavaScript Channel: @pieceJs
Download Telegram
#آبجکت
💎 نکات کاربردی درمورد آبجکت ها

👈 برای حذف پراپرتی های درون یک آبجکت می توانید از دستور Delete obj.property استفاده کنید که در این دستور obj نام آبجکت و property نام پراپرتی مورد نظر می باشد.

👈نام پراپرتی چند کلمه ای را باید درون دابل کوتیشن قرار داد مانند مثال زیر :
const myObj = {
"first Name" : "milad",
age:30,
country: "IRAN"
}

👈 نام ویژگی/پراپرتی های چند کلمه ای را نمی توان به نقطه نوشت.

myObj.first Name = "milad"  // SyntaxError
myObj["first Name"] ="milad" // --> milad

👈 برای دریافت نام یک ویژگی از کاربر به وسیله تابع prompt می توانید به شکل زیر عمل کنید

let fruit = prompt("Which fruit to buy?", "apple");

let bag = {
[fruit]: 5
};

alert( bag.apple );
در مثال بالا اگر نام ویژگی توسط کاربر apple وارد شود دستور آلرت مقدار 5 را نمایش می دهد در غیر این undefined را برگشت می دهد.
نکته: نام متغیر fruit را می بایست درون کروشه [ ] قرار دهید.

👈 در صورتی که نام پراپرتی و متغیر حامل مقدار آن پراپرتی، با هم یکسان باشد می توانید به صورت زیر خلاصه بنویسید.

let age = 30;
let name = "milad"

const person = {
age,
name
}
دستور بالا با دستور زیر عملکرد یکسانی خواهد داشت
let age = 30;
let name = "milad"

const person = {
age:age,
name:name
}
👈 برخلاف متغیر ها که نمی توان از اسامی رزرو شده نظیر for , return و نظیر آن استفاده کرد، در انتخاب اسم پراپرتی ها بدون این محدودیت میتوانید از اسامی رزرو شده استفاده کنید.

👈 در انتخاب نام پراپرتی، میتوانید از اعداد نیز استفاده کنید. جاوااسکریپت اعداد استفاده شده در نام پراپرتی را به طور خودکار به رشته تبدیل می کند.

const obj = {
0: "milad"
}
console.log(obj[0]===obj["0"]) // true

👈 در انتخاب نام پراپرتی نمیتوانید از عبارت __proto__ استفاده کنید.

👈 برای بررسی وجود یا عدم وجود یک پراپرتی در یک آبجکت میتوانید از دستور in استفاده کنید
"key" in myObj
دستور بالا، پراپرتی ای به نام key را در آبجکت myObj جستجو می کند و خروجی آن به صورت بولین خواهد بود.

👈 برای حلقه زدن در یک آبجکت میتوانید از حلقه ی for ... in استفاده کنید به سینتکس زیر :
for (key in object) {
....

}
کد بالا، در هر بار حله زدن، نام پراپرتی ها به ترتیب در متغیر key قابل دسترس خواهد بود.


🌐 @pieceJS
👍6👏2
💎 مروری بر انواع واحد های اندازه گیری

به طور کلی، واحد های اندازه گیری به دو دسته مطلق و نسبی تقسیم می شوند. واحد های مطلق، واحد هایی هستند که خود به تنهایی تعیین کننده سایز آن المان هستند اما واحد های نسبی، با توجه به شرایط سایر المان ها یا صفحه، و نسبت تعیین شده، تعیین سایز می کنند.
👈 از دسته واحد های مطلق می توان به واحد های زیر اشاره کرد:
cm :
سانتی متر
mm : میلی متر
in : اینچ
px: پیکسل
pt: نقطه
pc: پیکا
نکته 1: هر اینچ برابر96 پیکسل و 2.54 سانتی متر است
نکته 2: هر pt برابر 1/72 اینچ و 1/12 pc است

👈 از سری واحد های نسبی نیز می توان به واحد های زیر اشاره کرد:
em
: این واحد جهت تنظیم سایز فونت ها به کار میرود و به واحد المنت والد وابسته است و هر em برابر است با سایز فونت المنت والد. به عنوان مثال اگر فونت المنت واحد 10 پیکسل باشد و المنت فرزند دارای فونت با سایز 2em باشد میتوان گفت سایز فونت این المنت 20 پیکسل محاسبه می شود.

rem: سایز فونت را نسبت به سایز تعیین شده برای روت تعیین می کند. این روت می تواند استایل تگ html باشد. اگر برای این تگ سایزی مشخص نشده باشد، نسبت به سایز پیشفرض فونت بروزر تعیین می شود (که عموماً 16 پیکسل می باشد)

vw: تعیین سایز المنت نسبت به 1 درصد سایز عرض صفحه انجام میگیرد. به عنوان مثال اگر عرض صفحه (width) برابر 900 پیکسل باشد، 1vw برابر 9 پیکسل خواهد بود.

vh: تعیین سایز المنت نسبت به 1 درصد سایز طول صفحه انجام میگیرد. به عنوان مثال اگر طول صفحه (hight) برابر 900 پیکسل باشد، 1vh برابر 9 پیکسل خواهد بود.

%: تعیین سایز المنت به نسبت سایز المنت والد. به عنوان مثال اگر طول المنت والد 100 پیکسل باشد و طول المنت فرزند 35% در نظر بگیریم، بروزر به طور خودکار آن را 35 پیکسل در نظر می گیرد.

نکته: از واحد های نسبی، عموماً برای رسپانسیو کردن سایت بکار می رود.

🌐 @pieceJS
👍8
💎 عملگر Nullish Coalescing چیست؟

در آپدیت اکما اسکریپت 2020 از عملگری رونمایی شد به نام Nullish Coalescing، که این عملگرد به شکل ?? تعریف می شود و مقدار نالیش یک متغیر را بررسی می کند. به عبارت دیگر چک می کند که آیا متغیر مقدار null یا undefined را دارد یا خیر؟ به عنوان مثال در تیکه کد زیر، خروجی ما رشته "milad" می باشد.

var firstName;
alert(firstName ?? 'milad')

دلیل آن هم این است که firstName مقدار دهی اولیه نشده است لذا مقدار undefined را خواهد داشت و چون از عملگر ?? استفاده کرده ایم مقدار 'milad' به جای undefined برگشت داده می شود.

🟡 نکته مهم: ممکنه بگید این عملگر دقیقاً داره کار عملگر || یا همان OR را انجام میدهد. اما نکته مهم اینه که عملگر or تمام مقدار های falsy را بررسی می کند اما عملگر ?? فقط مقدار نال و آندیفایند را بررسی خواهد کرد.

💬 تعریف: به مقدار های زیر، مقدار های کاذب یا اصطلاح برنامه نویسیش falsy value گفته میشود (آخرین مورد در مقادیر زیر، رشته توخالی است)
null , Undefined , false , 0, NaN, ''

🌐 @pieceJS
👍11
💎 عملگر Optional Chaining چیست؟

گاهی وقتا آبجکتی رو به وسیله api دریافت میکنید و مطمئن نیستید که پراپرتی هایی که شما میخواهید آیا در آن آبجکت وجود دارد یا خیر. در وژن 3.7 به بعد تایپ اسکریپت، از عملگری معرفی شد به نام Optional Chaining که با علامت سوال و نقطه (.؟) نشان داده می شود. این عملگر، ابتدا بررسی می کند که آیا آن پراپرتی وجود دارد یا خیر، در صورتی که وجود داشته باشد از آن استفاده میکند در غیر این صورت undefined برمیگرداند.
console.log(persons?.reza?.job)

💬 در کل بالا ابتدا چک می کند آیا پراپرتی reza وجود دارد یا خیر، اگر وجود داشته باشد بررسی می کند آیا پرارتی job در زیر مجموعه reza وجود دارد یا خیر. اگر از این عملگر استفاده نکنید و پراپرتی reza وجود نداشته باشد به هنگام بررسی پراپرتی job با خطای زیر برخورد خواهید کرد
Uncaught TypeError: Cannot read properties of undefined (reading 'job')

قبل از معرفی این عملگر، برای جلوگیری از خطای بالا، کد رو به صورت زیر می نوشتیم:
console.log(persons.reza && persons.reza.job)

🌐 @pieceJS
👍8
💎 دلیل رخ دادن خطای ReferenceError window is not defined
احتمالاً برای شما هم اتفاق افتاده که زمان استفاده از پروژه تان یکدفعه با کمال ناباوری خطای رفرنس ارور گرفتید.
به طور کلی خطای ReferenceError window is not defined در سه حالت زیر اتفاق می افته

🟣 حالت اول : قصد دارید از متد window در Nodejs استفاده کنید

🟣 حالت دوم : قصد دارید از آن در سرور نظیر Next.js استفاده کنید

🟣 حالت سوم: محیطی که استفاده می کنید مسئله ای نداره اما شما اشتباه تایپی دارید

💬 نکته: window متغیریست از نوع global و تمام حروف آن کوچک است

🌐 @pieceJS
👍5
💎 7 متد پر کاربرد کلاس Date

getDay() :
عدد صحیح در مورد شماره روز هفته را بر اساس تقویم میلادی ریترن می کند بدین ترتیب، یکشنبه برابر عدد 0، دوشنبه عدد 1 و...

getDate() :
با استفاده از این متد میتوان عدد مربوط به روز را در تاریخ میلادی ریترن کنید. (مثلا در تاریخ 16-5-2022 عدد 16 برگشت داده میشود)

getMonth():
شماره ماه میلادی را برگشت میدهد.
نکته: شماره اولین ماه میلادی 0 است در نتیجه هر بار که از این متد استفاده می کنید باید آن را با عدد1 جمع بزنید تا عدد واقعی از نظر کاربر بدست آید.

getYear() :
عدد سال میلادی را منهای 1900 برمیگرداند مثلا برای سال 2022 عدد 122 را برگشت می دهد. (منسوخ شده)

getFullYear() :
عدد سال میلادی را به طور کامل برمیگرداند (مثلا 2022)
نکته: این متد از سال 1970 به بعد (تا سال 33658 😁) را می تواند برگشت دهد.

getSeconds() :
عدد مربوط به ثانیه فعلی را بر میگرداند

getTime() :
زمان را از 1970 میلادی به میلی ثانیه برمیگرداند

🌐 @pieceJS
👍4
💎 مقادیر Truthy و Falsy

به مقادیری که به منزله ی FALSE ارزیابی میشه رو مقادیر Falsy میگیم.
🟡 در #جاوااسکریپت 6 مقدار زیر رو به عنوان مقدار Falsy در نظر میگیره
undefined, null, NaN, 0, "" و false

به مقادیری که به منزله ی TURE ارزیابی میشه رو مقادیر Truthy میگیم.
🟡 مقادیر غیر از مقادیر بالا Truthy تفسیر خواهد شد.

💬 نکته: مقدار 0 به عنوان Falsy شناخته میشود اما رشته ی "0" به عنوان Truthy تفیسر میشه.

💬 نکته 2: آرایه خالی یا آبجکت خالی به عنوان Truthy در نظر گرفته میشه.

🌐 @pieceJS
👍5🤔1
💎 تبدیل تاریخ میلادی به شمسی

برای تبدیل تاریخ میلادی به شمسی از متد toLocaleDateString متعلق به کلاس Date استفاده کنید.
#آبجکت #تاریخ

🌐 @pieceJS
👍8
💎 نحوه ایجاد Self-calling Function در جاوا اسکریپت
همه میدونیم که توابع به صورت پیشفرض تا صدا زده نشوند اجرا نخواهند شد، جاوا اسکریپت قابلیتی داره که به وسیله اون میتونید تابعی را تعریف کنید که به صورت خودکار، علاوه بر اینکه تعریف خواهد شد، اجرا هم بشود به این توابع میگیم Self Calling Fucntion.

🟣 به این توابع Self-Invoking Functions هم میگن.

#تابع
🌐 @pieceJS
3👍2🔥1
💎 نکته مهم در جمع اعداد اعشاری
دلیل
این اتفاق آن است که حاصل جمع این دو عدد 0.3 نیست بلکه 0.30000000000000004 است چرا که اعداد اعشاری در جاوا اسکریپت به صورت باینری 64 بیتی و از استاندار IEEE 754 پیروری می کنند.

#اعداد

🌐 @pieceJS
👍4
💎 یافتن Max و Min عدد درون یک آرایه
برای یافتن بزرگترین و کوچکترین عدد درون یک آرایه، بجای اینکه از for loop استفاده کنید میتوانید به سادگی با استفاده از دستور های بالا (خط دوم و سوم) Max و Min عدد را پیدا کنید.

#آرایه

🌐 @pieceJS
👍4
💎 بررسی مقدار عددی یک ورودی
برای اینکه بررسی کنید آیا ورودی کاربر عدد است یا خیر، میتونید از تابع بالا استفاده کنید.
#utils

🌐 @pieceJS
👍8
💎 دو عامل باعث ایجاد رندر مجدد در ریکت میشود

1️⃣ تغییر State
2️⃣ تغییر Props

هیچ وقت نباید مقدار دو را مستقیماً داد چون در این صورت ریکت نمیتواند تغییر آن ها را پیگیری کند در نتیجه رندر مجدد صورت نمیگیرد و این باعث شروع فصل جدیدی از باگ ها در پروژه شما خواهد شد.
#reactjs

🌐 @pieceJS
👍8
💎 تفاوت import با require چیست؟

💬 دیاگرام بالا کمک میکنه که تفاوت کلی این دو را متوجه شوید.

🟣 یکی از تفاوت های آنها این است که import به صورت نامتقارن (بدون اینکه صبر کند تا import های قبلی کامل اجرا شود) پردازش میشود اما require به صورت متقارن (گام به گام) اجرا می شود.

🟣 با require باید کتابخانه را به طور کامل به پروژه اضافه کنید اما با استفاده از import می توانید در صورت نیاز فقط قسمت مورد استفاده از کتابخانه مورد نظر را به پروژه اضافه کنید و باعث افزایش پرفورمنس و کاهش حجم باندل پروژه می شود.

🟣 متد require به طور خودکار فولدر node_modules را اسکن می کند ولی import که از ES6 به بعد به جاوااسکریپت اضافه شده است خودکار این فولدر را اسکن نمی کند.

💬 برای اکثر برنامه نویس ها که با استفاده از babel پروژه خودشون رو کامپایل می کنند تفاوت چندانی میان import و require احساس نمی کنند. چون babel تا حدزیادی این تفاوت ها را کاهش داده است

🌐 @pieceJS
👍6
💎 چگونه پروژه ام را فایل بندی کنم؟

سوال یکی از دوستان که به نظرم سوال خیلی از برنامه نویسان جوان هم هست، اینکه مثلا من میخوام صفحه ای به نام سبد خرید رو کدنویسی کنم، چطور باید فایل بندیش رو انجام بدم؟
💬 نکته مهم اینکه، این مورد بسیار سلیقه ای هست اما تلاش کنید تا جایی که مقدوره برای اینکه خوانا تر بنویسید، هر اسکریپت (یا هر کامپوننت در ریکت و یا هر ماژول در نود جی اس) را طوری قرار دهید که فقط یک عمل را انجام بدهد مثلا یک فایل فقط عمل حذف محصول رو انجام بدهد یک فایل فقط اضافه کردن محصول و... .
و ابتدا اصلا فکر این نباشید که فایل بندی عالی ای را انجام دهید، تمام کد ها را در یک فایل بنویسید پس از آنکه به پایان رسید، ری فکتورش کنید.

پ.ن: منظور کل پروژه نیست مثلا قسمت سبد خرید رو کامل در یک فایل بنویسید بعد از اتمام، اجزای مختلف آن را ریفکتور کنید.

💬 ممنون میشوم دوستان هم تجارب خودشون رو در خصوص نحوه صحیح فایل بندی پروژه بنویسند.

🌐 @pieceJS
👍8
💎 آموزش آرایه ها به زبان ساده اما مفهومی

🎬 https://www.youtube.com/watch?v=q3Sw3DflxAA
——————
8 min
——————
🗣 MohammadReza Azimi Fard


🌐 @pieceJS
👏4👍1
#موقت
چون این پست به محتوای کانال مربوط نمیشه، پیشاپیش از تمامی دوستان عذرخواهی میکنم.
خواستم دو کلام در خصوص حق ناشر یا تولید کننده نرم افزار ها یا کانتنت های غیررایگان فارسی صحبتی با هم داشته باشیم.
به وفور عزیزانی رو می بینیم که تو گروه های تلگرامی به دنبال دریافت رایگان دوره های آکادمی x یا y هستند و رایجاً سه توجیه برای این موضوع دارند

⭕️ اول اینکه چرا ناشر میاد این دوره رو به صورت نامحدود میفروشه
⭕️ دوم اینکه دوره های فارسی بدرد نمی خوره (درواقع اگه تونستم از این دوره کسب درآمد کنم یعنی بدردم خورده و برمیگردم پولش رو هم میدم)
⭕️ و سوم اینکه این دوره خیلی گرونه!!! اینقدر نمیرزه!

به طور کلی خواستم عرض کنم هر مولف یا ناشر مختاره که برای دوره ای که منتشر می کنه شرایطی را تعیین کنه همانطور که منِ مشتری مختارم که آن شرایط را بپذیرم و دوره را خریداری کنم یا اینکه کلاً منصرف بشوم!
تصورش رو بکنید ناشری دوره اش رو به صورت محدود بفروشه! بعد از مدتی تعداد خرید به سقف میرسه و نیازه که برای اون دوره تصمیم گیری ای صورت بگیره، اگر کلاً فروشش رو متوقف کنیم که بعد از مدتی کانتنت فارسی برای موضوعی خاص رو به انقراض میره یا کیفیت دوره های جدید فوق العاده پایین میاد... یا شایدم نیاز باشه مدرس دوره رو مجدداً ضبط کنه (که اصلا عقلانی نیست) و قطعاً اگر بنده بودم با یه ترفند دوره قبلی رو مجدداً منتشر می کردم تا اینکه بیام دوباره حرفمو تو دوره ضبطی جدید تکرار کنم... اگرم دوره رو رایگان بزاریم، تکلیف کسانی که با قیمت بالا دوره رو تهیه کردند چیه؟؟؟ فرض کنید بعد یک هفته سقف تعیین شده پر شد شما هم تو همین یک هفته دوره رو خریداری کردید و بنده در هفته آینده این دوره خیلی گرون رو رایگان دانلود میکنم دیگه خود حدیث مفصل بخوان از این مجمل.

در مورد اینکه کانتنت فارسی بدرد نمیخوره که باید بگم برادر جان، پس دلیل استفادت از کانتنتی که بدرد نمی خوره چیه؟ میخوای بعد از گذروندن 100 ساعت دوره به خودت اثبات کنی که دیدی بدرد نمی خورده؟!

و در مورد فلسفه آخر عزیزانی که میگن گرونه و اینقدر نمیرزه! و حالا که نمیرزه میرم رایگان پیدا و دانلودش میکنم!!! سوالی پیش میاد، تصورش رو بکنید رفتید یه لپ تاپ بخرید فروشنده میگن 40 میلیون قیمتشه! آیا برمیگردید به خودتون بگید نه بابا این لپتاپ اینقدر نمیرزه بجاش امشب میام میدزدمش؟؟؟ (البته دور از جون همتون)

ببخشید دل پری داشتم خوشحال میشم نظر شما دوستان رو هم در این مورد بدونم
👍9👎1
💎 بررسی آنلاین بودن یوزر
با استفاده از این تیکه کد به سادگی می توانید بررسی کنید که آیا یوزرتون آنلاین هست یا خیر 😇

🌐 @pieceJs
👏8👍1👎1
💎 حذف دیتا از آرایه
برای حذف دیتا از #آرایه در جاوا اسکریپت میتونید از متد splice استفاده کنید این متد با حذف دیتا از آرایه باعث ایجاد تغییر در آرایه میشه.
بدین منظور با استفاده از متد indexOf، شماره ایندکس دیتای مورد نظر رو در آرایه پیدا کنید سپس با استفاده از splice آن را از آرایه حذف کنید.

💬 این متد دو تا ورودی میگیره، ورودی اول، شماره ایندکس دیتای مورد نظر است و ورودی دوم تعداد عنصر هایی که مایلید از شماره ایندکس مورد نظر به بعد حذف بشود خواهد بود.

🌐 @pieceJS
👍7
💎 استفاده از Async و Await در هوک useEffect در ریکت

جهت استفاده از async و await درون هوک useEffect می بایست درون تابعی که به عنوان Effect در این هوک تعریف می کنید یک تابع دیگر تعریف کنید و آن تابع را از نوع async قرار دهید. سپس مجدداً آن تابع را صدا بزنید

💬 نکته مهم این است که شما نمی توانید تابعی که به عنوان افکت تعریف می کنید را از نوع async قرار بدهید چراکه ریکت به شما خطا می دهد.

🟡 علت: هوک useEffect پس از Unmount شدن کامپوننت، به صورت خودکار عملیات پاک سازی توابع صدا زده شده را انجام می دهد در صورتی که تابعی که به عنوان افکت قرار داده اید را از نوع async قرار بدهید باعث ایجاد باگ در عملکرد Cleanup Function این هوک شده و ریکت به شما خطا نمایش میدهد.

#ریکت #هوک_ها #useEffect

🌐 @pieceJS
👍6
💎 بررسی خالی بودن مقدار یک آبجکت

حتماً شما هم برای اینکه بررسی کنید آیا یک آرایه دارای مقدار هست یا خیر از پراپرتی length استفاده می کنید.
برای بررسی مقدار یک آبجکت، میتونید از متد Object.keys استفاده کنید این متد آرایه ای از نام پراپرتی های آبجکت مورد نظر را return می کند در این صورت میتوانید از پراپرتی length استفاده و طول آن را برگردانید.

#آبجکت

🌐 @pieceJS
👍8