Code Module | کد ماژول
1.91K subscribers
357 photos
42 videos
6 files
355 links
Hello World 🌎

<> Earth is programmable if you code it </>

Group 👇🏻
@CodeModuleGap

Contact Us 👇🏻
@MrShahiin
@neoMahan
Download Telegram
اگه برای تمرین و کدنویسی دنبال ui خاصی میگردید، این طرح فیگما رو به هیچ وجه از دست ندید 💀

🔵 Link

#figma
@CodeModule
Please open Telegram to view this post
VIEW IN TELEGRAM
19
آماده شید باهم دیگه بریم جنگل 🗿😂

#fun
@CodeModule
Please open Telegram to view this post
VIEW IN TELEGRAM
😁20
از پلتفرم Hasura چقدر اطلاعات دارید؟🤔

‏Hasura یک پلتفرم برای ساخت و مدیریت APIهای GraphQL هست و به شما اجازه میده به‌سرعت و به‌راحتی APIهای مبتنی بر دیتابیس برای پروژه‌هاتون ایجاد کنید.

برخی از ویژگی های Hasura ⬇️

🔵سرعت بالا: Hasura برای ایجاد API های GraphQL با سرعت بالا طراحی شده. با استفاده از Hasura، میتونید بدون نیاز به نوشتن کدهای طولانی، API های GraphQL قدرتمندی رو در کمترین زمان ممکن ایجاد کنید.

🔵پشتیبانی از دیتابیس های مختلف: Hasura با اکثر دیتابیس های رایج مثل PostgreSQL و MySQL سازگار هست و به شما این امکان رو میده که به راحتی با این دیتابیس ها کار کنید و از اونها استفاده کنید.

🔵امنیت: Hasura از جمله سرویس هایی هست که به دلیل امنیت بالاش، برای دولوپرا بسیار جذاب هست. به عنوان مثال، Hasura از JWT برای احراز هویت و سطوح دسترسی مختلف استفاده می کنه و به شما این امکان رو میده که تعیین کنید کدوم کاربرا به چه داده هایی دسترسی دارن.

🔵قابلیت انتقال پذیری: Hasura امکان انتقال پذیری بین بیشتر سکوهای ابری رو فراهم می کنه و به شما این امکان رو میده که پروژه‌هاتون رو به راحتی از یک سکو به سکو دیگه منتقل کنید.

🔵مستندات کامل: Hasura مستندات و داکیومنت کاملی داره و به شما کمک می کنه تا به راحتی با این سرویس کار کنید و از اون، بهترین استفاده رو ببرید.

به طور کلی، Hasura یک سرویس قابل اعتماد، امن و سریع هست که به توسعه دولوپرا اجازه میده بدون نیاز به نوشتن کدهای طولانی، API های GraphQL قدرتمندی رو ایجاد کنن. برای کسب اطلاعات بیشتر به داکیومنتش مراجعه کنید.

#hasura
@CodeModule
Please open Telegram to view this post
VIEW IN TELEGRAM
8🔥4
😁28💔4🔥3
با پکیج «ms» تایم رو بهتر تنظیم کن!

پکیج ms یک ابزار سبک و محبوب برای Node.js هست که روشی ساده برای کار با زمان ارائه میده. این رشته‌های زمانی قابل خوندن برای انسان، مانند «2 روز» یا «5 ساعت» رو به میلی‌ثانیه تبدیل میکنه، و برای دولوپر هایی که نیاز به مدیریت فواصل زمانی در برنامه‌های خود دارن، بسیار راحت هست. «ms» با کمترین ردپایی و سهولت استفاده، به راه‌حلی برای مدیریت زمان در پروژه‌های مختلف Node.js تبدیل شده.

از این پکیج چه استفاده ای میشه؟

استفاده اولیه از پکیج ms، تبدیل فرمت های زمانی قابل خوندن توسط انسان به میلی ثانیه و بالعکس هست. این میتونه به ویژه در سناریوهایی که نیاز به تنظیم زمان، فواصل یا تاخیر دارید، یا زمانی که با کتابخانه ها یا APIهایی کار میکنید که به زمان بر حسب میلی ثانیه نیاز دارن، مفید باشه. به عنوان مثال:
const ms = require('ms');

// Convert human-readable time to milliseconds
console.log(ms('2 days')); // 172800000
console.log(ms('10h')); // 36000000
console.log(ms('1m')); // 60000
console.log(ms('5s')); // 5000

// Convert milliseconds to human-readable time
console.log(ms(172800000)); // '2 days'
console.log(ms(36000000)); // '10h'
console.log(ms(60000)); // '1m'
console.log(ms(5000)); // '5s'


فانکشن ms به طور هوشمند استرینگ هایی مانند "2d"، "1h"، "5m" یا حتی "1y" رو تفسیر میکنه و اون ها رو به معادل های میلی ثانیه ای و برعکس تبدیل میکنه.

به صورت کلی پکیج ms یک ابزار ساده و در عین حال قدرتمند هست که نحوه کار دولوپر ها با زمان در Node.js رو بهبود میبخشه. با فعال کردن تبدیل آسون بین قالب‌های زمانی قابل خوندن توسط انسان و میلی‌ثانیه، فرآیند تنظیم و مدیریت عملیات مبتنی بر زمان در برنامه‌های شما رو ساده میکنه. برای کسب اطلاعات بیشتر به داکیومنت این پکیج مراجعه کنید.
#ms
@CodeModule
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥134
با انواع Window Manager ها در لینوکس آشنا بشید 🪴

در واقع Window Manager ها در لینوکس نرم‌افزارهایی هستن که نحوه‌ی نمایش و مدیریت پنجره‌ها (window) هارو در محیط دسکتاپ کنترل می‌کنن.

این نرم افزارها می‌تونن به‌تنهایی یا به‌عنوان بخشی از یک محیط دسکتاپ کامل (مثل GNOME یا KDE) عمل کنن. ویندو منیجر ها به دو دسته‌ی اصلی تقسیم میشن: Tiling و Floating.

‼️‏Window Manager های Tiling

ویندو منیجر های Tiling به‌طور خودکار پنجره‌ها رو در صفحه به‌صورت کاشی‌کاری (tiling) مرتب می‌کنن. این نوع از ویندو منیجر ها معمولاً برای کاربرایی که به کار با صفحه‌کلید تسلط دارن و نیاز به مدیریت بهینه‌ی فضا دارن، مناسبن و همچنین به سریع تر شدن کار شما کمک میکنن. ویندو منیجر های tiling از جمله : i3 و Sway و Awesome و Xmonad و ...

مزایای Tiling Window Managers:

◀️استفاده بهینه از فضا: پنجره‌ها به‌طور خودکار در فضای صفحه مرتب می‌شن و هیچ فضایی هدر نمیره.

◀️افزایش بهره‌وری: با استفاده از کلیدهای میانبر، کاربرا می‌تونن سریع‌تر بین پنجره‌ها جابجا بشن.

‼️‏Window Manager های Floating

ویندو منیجر های Floating اجازه میدن که پنجره‌ها آزادانه در صفحه حرکت کنن و اندازه‌ی اونا تغییر کنه. این نوع ویندو منیجر برای کاربرایی که ترجیح میدن پنجره‌ها رو به‌صورت آزادانه مرتب کنن، مناسبه.ویندو منیجر های floating از جمله : Openbox و Fluxbox و Metacity

مزایای Floating Window Managers:

◀️ساده‌تر و شهودی‌تر: کاربرا می‌تونن پنجره‌ها رو به هر جایی که می‌خوان بکشن و اندازه‌ی اونا رو تغییر بدن.

◀️تنوع در چیدمان: کاربرا می‌تونن چیدمان دلخواه خودشونو ایجاد کنن و از فضای صفحه به‌طور دلخواه استفاده کنن.

◀️سازگاری با برنامه‌های گرافیکی: بسیاری از برنامه‌های گرافیکی بهتر با ویندو منیجر های Floating کار می‌کنن.

در کل انتخاب بین Tiling و Floating Window Managers بستگی به نیازها و عادات کاری کاربر داره. اگر کاربری به دنبال بهره‌وری بالا و استفاده‌ی بهینه از فضای صفحه است، ممکنه Tiling Manager مناسب‌تر باشه. اما اگر کاربر ترجیح میده که کنترل بیشتری بر روی چیدمان پنجره‌ها داشته باشه، Floating Manager گزینه‌ی بهتری خواهد بود.

#linux #windowmanager
@CodeModule
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥133
بهترین زبان دنیا 😂😂

#fun
@CodeModule
😁23
با graphql-yoga آشنا بشید! 🦦

‏«graphql-yoga» یک سرور GraphQL اوپن سورس هست که هدف اون ساده کردن فرآیند ساخت GraphQL API در Node.js هست. این برنامه با تمرکز بر تجربه ساده سازی توسعه‌ طراحی شده، و محیطی با ویژگی‌های کامل و در عین حال آسون برای استفاده هم برای مبتدیان و هم برای دولوپر های با تجربه فراهم میکنه.

چه استفاده ای از این ابزار میشه؟

‏«graphql-yoga» برای ساخت APIهای GraphQL منعطف و قدرتمند بدون پیچیدگی راه اندازی یک سرور سفارشی عالی هست. این بر روی کتابخانه محبوب «graphql-js» ساخته شده که سازگاری با مشخصات GraphQL رو تضمین میکنه. یکی از ویژگی های برجسته اون سادگیش هست. تنها با چند خط کد، میتونید یک سرور GraphQL قوی و آماده برای رسیدگی به query ها راه اندازی کنید.

‏«graphql-yoga» یک انتخاب عالی برای دولوپر ها هست که به دنبال ساخت سریع و کارآمد API GraphQL در Node.js هستن. سهولت استفاده، همراه با ویژگی‌های قدرتمند و انعطاف‌پذیری، اون رو به یک راه‌حل مناسب برای پروژه‌های کوچک و برنامه‌های کاربردی در مقیاس بزرگ تبدیل میکنه. برای کسب اطلاعات بیشتر به داکیومنت این ابزار مراجعه کنید.

#graphql_yoga
@CodeModule
Please open Telegram to view this post
VIEW IN TELEGRAM
10🔥7
5 اکستنشن کاربردی که احتمالا از اونها بی خبری😄

1⃣Better Comments


به کمک این اکستنشن میتونید کامنت های رنگی بر اساس شرایط کدتون بنویسید.

2⃣CSS Peak


با استفاده از این اکستنشن میتونید کلاس های استایلی خودتون رو با یک سرچ ساده پیدا، و به محل نوشته شده اون استایل برید.

3⃣Import Cost


زمانی که پکیج یا هر چیز دیگه ای رو ایمپورت کنید، این اکستنشن حجم فایل ایمپورت شده رو به صورت بایت به شما نمایش میده.

4⃣Pretty TypeScript Error


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

5⃣Persian Lorem


این اکستنشن به ما کمک می‌کنه لورم اپیسوم های فارسی بنویسیم. فقط کافیه عبارت plorem رو در ادیتور تایپ کنیم.

#extentions
@CodeModule
Please open Telegram to view this post
VIEW IN TELEGRAM
11🔥6👌5
علتش چیه؟ 😠

چند وقت پیش داشتم الگوریتم مرتب سازی insertion رو پیاده سازی میکردم و برام سوال شد، چجوری میتونم سرعت مرتب سازی رو بیشتر کنم (در حد کنجکاوی). در هنگام پیاده‌سازی الگوریتم مرتب‌سازی Insertion Sort در جاوااسکریپت، معمولاً این الگوریتم به صورت زیر نوشته میشه:

function insertionSort(arr) {
for (let i = 1; i < arr.length; i = i + 1) {
let cE = arr[i];
let j = i;
while (j > 0 && arr[j - 1] > cE) {
arr[j] = arr[j - 1];
j = j - 1;
}
arr[j] = cE;
}
return arr;
}
console.time();
const uArray = [20, 10, 4, 51, 0, 0xd3, 0x42, 0.4, 0.00002, 0x2];
const sArray = insertionSort(uArray);
console.log("Sorted array:", sArray);
console.timeEnd();


در اینجا، زمان اجرای الگوریتم با استفاده از console.time() و console.timeEnd() اندازه‌گیری میشه. معمولاً زمان اجرای این کد بین ۱۰ تا ۱۵ میلی‌ثانیه متغیر هست. به این صورت:
Sorted array: [ 0, 0.00002, 0.4, 2, 4, 10, 20, 51, 66, 211 ]
default: 10.793ms


حالا اگر خروجی آرایه رو به یک رشته تبدیل کنیم و سپس اون رو برگردونیم:

return String(arr);

خروجی:
Sorted array: 0,0.00002,0.4,2,4,10,20,51,66,211
default: 8.899ms

با انجام این تغییر، زمان اجرای الگوریتم به صورت چشمگیری کاهش پیدا میکنه و بین ۸ تا ۱۰ میلی‌ثانیه متغیر میشه.

سوال اصلی اما اینجاست:

چرا تبدیل آرایه به رشته باعث کاهش زمان اجرای الگوریتم مرتب‌سازی Insertion میشه؟ آیا این تغییرات قابل توجه هستن و باید در برنامه‌ هایی که میسازیم نگران چنین تفاوت‌های جزئی ای باشیم؟

#nodejs #array
@CodeModule
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥18❤‍🔥2
بنده خدا pdf باخدایی بود 😂😂

#fun
@CodeModule
Please open Telegram to view this post
VIEW IN TELEGRAM
😁33
با استفاده از navigator در جاوااسکریپت، چه کارهایی میتونیم انجام بدیم؟ 🪐

تشخیص نوع دستگاه و سیستم‌عامل کاربر:

با استفاده از navigator.userAgent می‌تونیم نوع دستگاه و سیستم‌عامل کاربر رو تشخیص، و محتوای سایت یا اپلیکیشن رو بر اساس اون تنظیم کنیم.
const userAgent = navigator.userAgent.toLowerCase();
if (userAgent.includes('iphone')) {
console.log('User is on an iPhone');
} else if (userAgent.includes('android')) {
console.log('User is on an Android device');
}


دسترسی به اطلاعات شبکه (Network Information API):

از navigator.connection میتونین برای دریافت اطلاعات شبکه کاربر مثل نوع ارتباط (WiFi, 4G) و سرعت اون استفاده کنیم.
const connection = navigator.connection  navigator.mozConnection  navigator.webkitConnection;
if (connection) {
console.log('Effective connection type:', connection.effectiveType);
console.log('Downlink speed:', connection.downlink, 'Mbps');
}


تشخیص وضعیت آنلاین/آفلاین بودن کاربر:

با استفاده از navigator.onLine می‌تونیم وضعیت آنلاین یا آفلاین بودن کاربر رو بررسی کنیم و تجربه کاربری رو بهبود ببخشیم.
if (navigator.onLine) {
console.log('User is online');
} else {
console.log('User is offline');
}


استفاده از Web Share API برای به اشتراک گذاری محتوا:

با استفاده از navigator.share می‌تونیم امکان اشتراک‌گذاری محتوا رو در دستگاه‌های موبایل فراهم کنیم.
const shareData = {
title: 'Example Page',
text: 'Check out this cool page!',
url: 'https://example.com'
};

navigator.share(shareData).then(() => {
console.log('Content shared successfully');
}).catch(err => {
console.error('Error sharing content:', err);
});


دسترسی به باتری دستگاه (Battery Status API):

با استفاده از navigator.getBattery می‌تونیم اطلاعاتی مثل سطح باتری و وضعیت شارژ رو دریافت کنید.
avigator.getBattery().then(battery => {
console.log('Battery level:', battery.level * 100 + '%');
console.log('Charging:', battery.charging ? 'Yes' : 'No');
});


#navigator #javascript
@CodeModule
Please open Telegram to view this post
VIEW IN TELEGRAM
👌43🔥7❤‍🔥4💔4
Code Module | کد ماژول
با استفاده از navigator در جاوااسکریپت، چه کارهایی میتونیم انجام بدیم؟ 🪐 تشخیص نوع دستگاه و سیستم‌عامل کاربر: با استفاده از navigator.userAgent می‌تونیم نوع دستگاه و سیستم‌عامل کاربر رو تشخیص، و محتوای سایت یا اپلیکیشن رو بر اساس اون تنظیم کنیم. const userAgent…
میبینم که یکی قلبش شکسته، احتمالا نمیدونسته جاوااسکریپت اینقدر کاربرد داره 😞

حالا فارغ از بحث فان، این حجم از ریکشن و حمایت هایی که میکنید، واقعا در شأن شما ماژولیتیای گل نیست و انتظار بیشتری میره.

با این که هیچ توقعی از شما ممبر عزیز ندارم، ولی کد ماژول جزو تک توک چنلایی هست که تن به هر محتوایی نمیده، تبلیغ نمیزاره و برای ممبراش احترام قائله.

این وسط داری رد میشی پست رو میخونی، حداقل یه ریکشن بزن تا یه قوت قلبی نویسنده پست بگیره.

نه فقط کد ماژول، هر چنلی که سرش به تنش بی ارزه.

حقیقتا یکم ناراحتم سر این مسأله، با این که بازم میگم توقعی نیست ولی جز خودم چنل‌های دیگه ای هم میبینم که به این مشکل دچار هستن.

یکم سعی کنید بیشتر هوای ما تولید محتوا کننده هارو داشته باشید 🙏🏻💙
Please open Telegram to view this post
VIEW IN TELEGRAM
❤‍🔥654💔1
با انواع دسترسی کاربر (RBCD و RBAC) آشنا بشید! 🔥

‏Role-Based Access Control و Resource-Based Conditional Access، این مدل‌ها برای تنظیم دسترسی کاربر به منابع درون یک سازمان وب سایت و... طراحی شدن و تضمین میکنن که داده‌های حساس محافظت میشن و تنها پرسنل مجاز، میتونن اقدامات خاصی رو انجام بدن.

‏RBAC: کنترل دسترسی مبتنی بر نقش

‏RBAC یکی از پرکاربردترین مدل های کنترل دسترسی هست. بر اساس اصل تخصیص مجوزها بر اساس نقش های درون یک سازمان عمل میکنه. در یک سیستم RBAC، به هر کاربر یک یا چند نقش اختصاص داده میشه و هر نقش دارای مجوزهای خاصی هست. برای مثال، در یک محیط شرکتی، ممکنه نقش‌هایی مثل Manager یا مدیر IT داشته باشید، که هرکدوم به داده‌ها یا سیستم‌های خاصی دسترسی از پیش تعریف شده دارن.

‏RBAC با گروه‌بندی مجوزها به نقش‌ها، مدیریت دسترسی رو ساده‌تر می‌کنه، که مدیریت اون ها رو راحت‌تر از تخصیص مجوزها به صورت جداگانه به کاربران هست. این مدل به ویژه در محیط هایی که کارکردهای شغلی به خوبی تعریف شده و ثابت هستن، مؤثر هست، زیرا تضمین میکنه که کاربرا فقط به منابع لازم برای مسئولیت های شغلی خود دسترسی دارن.


‏RBCD: دسترسی مشروط مبتنی بر منابع

دسترسی مشروط مبتنی بر منابع (RBCD) یک رویکرد پویاتر و دقیق تر برای کنترل دسترسی هست. برخلاف RBAC که مجوزها رو بر اساس نقش های کاربر اختصاص میده، RBCD شرایط رو در سطح منبع ارزیابی میکنه تا حقوق دسترسی رو تعیین کنه. این به این معنی هست که تصمیمات دسترسی در زمان واقعی و بر اساس ویژگی هایی مثل مکان کاربر، دستگاه مورد استفاده، زمان دسترسی و حتی حساسیت داده های مورد دسترسی گرفته میشه.

‏RBCD سطح بالاتری از انعطاف پذیری و امنیت رو فراهم میکنه، چون میتونه با شرایط و زمینه های متغیر سازگار بشه. به عنوان مثال، ممکنه به یک کارمند اجازه داده بشه که تنها زمانی به یک سند محرمانه دسترسی داشته باشه که در شبکه شرکت باشه و از دستگاه مورد تایید شرکت استفاده کنه. این رویکرد به ویژه در محیط‌های مدرن که در اون منابع از مکان‌ها و دستگاه‌های مختلف قابل دسترسی هستن، مفیده.


به صورت کلی RBAC و RBCD هر کدوم بسته به نیازهای خاص یک سازمان، مزایای مشخصی رو ارائه میده. RBAC برای محیط‌هایی با نقش‌ها و مسئولیت‌های کاملاً تعریف‌شده ایده‌آل هست و سادگی و سهولت مدیریت رو ارائه میده. اون طرف RBCD رویکردی پویاتر و آگاه به زمینه رو برای کنترل دسترسی ارائه میکنه و اون رو برای محیط‌های پیچیده با شرایط دسترسی متفاوت مناسب‌تر می‌سازه 🚀

#rbcd #rbac
@CodeModule
Please open Telegram to view this post
VIEW IN TELEGRAM
19❤‍🔥6🔥1
حق با رفیق پکیج فروشمون هست.

#fun
@CodeModule
😁342
با Node-Schedule آشنا بشید 💀

‏Node-Schedule یک پکیج برنامه ریزی قدرتمند و انعطاف پذیر مثل cron برای Node.js هست که به دولوپر ها این امکان رو میده، تا وظایف برنامه ریزی شده رو به راحتی تنظیم و مدیریت کنن. این یک API ساده و در عین حال قوی ارائه میکنه که هم از زمان‌بندی به سبک cron و هم از اجرای یک‌بار کار پشتیبانی میکنه، و اون رو به گزینه‌ای برای مدیریت وظایف برنامه‌ریزی‌شده در برنامه‌های Node.js تبدیل میکنه.

از این پکیج چه استفاده ای میشه؟ 🤔

‏Node-Schedule به گونه ای طراحی شده که زمان بندی کار رو ساده کنه. این به دولوپر ها اجازه میده تا کارها رو بر اساس نحو آشنای cron، که زمان اجرای وظایف مشخص میکنه، برنامه ریزی کنن. به عنوان مثال، میتونید یک کار رو برای اجرا هر روز در یک زمان خاص، هر ساعت یا حتی الگوهای پیچیده تر مثل هر سه شنبه دوم ماه برنامه ریزی کنید. این کتابخانه همچنین از گزینه‌های زمان‌بندی ساده‌تر مثل تنظیم یک کار برای اجرا در یک تاریخ و زمان خاص پشتیبانی میکنه.

یکی از ویژگی های برجسته Node-Schedule توانایی اون در انجام وظایف تکراری و تکالیف با سهولت یکسان هست. همچنین میتونه تفاوت‌های منطقه زمانی رو مدیریت کنه و اطمینان حاصل کنه که وظایف شما بدون توجه به مکان سرور در زمان‌های صحیح اجرا میشه. علاوه بر این، Node-Schedule به شما این امکان رو میده که کارها رو به صورت پویا لغو یا زمان بندی مجدد کنید و به شما کنترل کامل بر زمان بندی وظایف برنامه خود رو میده.

‏Node-Schedule یک ابزار ضروری برای دولوپرهایی هست، که نیاز به مدیریت و اجرای وظایف برنامه ریزی شده در برنامه های خودشون رو دارن. Node-Schedule با API منعطف، پشتیبانی شبیه به cron و توانایی انجام وظایف تکراری و یکباره، فرآیند زمان‌بندی کار رو ساده میکنه. برای کسب اطلاعات بیشتر به ریپازیتوری این پکیج مراجعه کنید.

#node_schedule
@CodeModule
Please open Telegram to view this post
VIEW IN TELEGRAM
12🔥2
همه چیز از متد hasOwn جاوااسکریپت ✌️

کارایی hasOwn تقریباً مشابه hasOwnProperty هست و این متد به صورت استاتیک، از آبجکت گلوبال Object در دسترس هست و بررسی می‌کنه که آیا یک پراپرتی داخل یک آبجکت خاص وجود داره یا خیر. خروجی این متد یک مقدار بولین (true یا false) هست.

const person = { name: 'Emily' }; 

Object.hasOwn(person, 'name'); // true
person.hasOwnProperty('name'); // true


مستندات MDN میگه hasOwn قراره جایگزین hasOwnProperty بشه. اما چرا؟ چرا hasOwn رو به hasOwnProperty ترجیح بدیم؟

دلایل مختلفی برای معرفی این متد وجود داره. ابتدای باید محدودیت‌های hasOwnProperty رو بشناسیم. اول اینکه این متد خیلی راحت می‌تونه Override بشه:

const person = { 
name: 'Mario',
hasOwnProperty() {
return true;
},
}
alert(person.hasOwnProperty('age')); // true

همچنین وقتی که یک آبجکت رو به صورت زیر می‌سازیم:
const person = Object.create(null); 


اینجا معمولاً هدفمون اینه که یک آبجکت بدون پروتوتایپ می‌خوایم. یعنی بدون والد. پس توی چنین آبجکتی هیچ یک از پراپرتی‌های والد وجود نداره. از جمله hasOwnProperty. پس با صدا زدن این متد از این آبجکت خطا می‌گیریم:

const person = Object.create(null); 

person.hasOwnProperty('name'); // TypeError: person.hasOwnProperty is not a function


‏Override کردن یا حذف کردن چنین متدی ممکنه برای یک کتابخونه خارجی دردسر ساز بشه. برای حل چنین مشکلی نویسنده اون کتابخونه مجبور بود به چنین راه حل‌هایی رو بیاره:

const person = { 
hasOwnProperty() {
return true;
},
}

const exists = Object.prototype.hasOwnProperty.call(person, 'age'); alert(exists); // false


پس دولوپرای جاوااسکریپت به این فکر افتادن که یک متد اختصاصی برای حل چنین مشکلاتی معرفی کنن. اسم این متد رو گذاشتن hasOwn. اگه از این متد برای آبجکت‌های بالا استفاده کنیم دیگه خطا نمی‌گیریم:

const person1 = Object.create(null); 
alert(Object.hasOwn(person1, 'name')); // false
const person2 = {
hasOwnProperty: () => true,
}

alert(Object.hasOwn(person2, 'name')); // false


همونطور که گفتیم اگه یک پراپرتی توی یک آبجکت وجود داشته باشه، خروجی این متد true هست. حتی اگه مقدار پراپرتی null یا undefined باشه:

const person = {}; 
Object.hasOwn(person, 'name'); // false

person.age = 4;
Object.hasOwn(person, 'age'); // true

person.prop = null;
Object.hasOwn(person, 'prop'); // true

person.prop = undefined;
Object.hasOwn(person, 'prop'); // true

از این متد نمی‌تونیم برای مقادیر null و undefined استفاده کنیم:
// TypeError: can't convert undefined to object 
Object.hasOwn(undefined, 'prop');

// TypeError: can't convert null to object
Object.hasOwn(null, 'prop');


همچنین با hasOwn می‌تونیم بررسی کنیم که آیا یک آرایه یک ایندکس خاص داره یا نه:

const numbers = ['one', 'two']; 

Object.hasOwn(numbers, 1); // true
Object.hasOwn(numbers, 2); // false


همچنین باید بدونیم که متد hasOwn یک متد کاملاً جدید هست و فقط مرورگرهای جدید از اون پشتیبانی می‌کنن.

#hasown #javascript
@CodeModule
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥16👌5
این رسمش نبود کودکعلی 🤣

#fun
@CodeModule
Please open Telegram to view this post
VIEW IN TELEGRAM
😁21