شما سوالاتی دارید و ما پاسخ هایی داریم. در اینجا ۱۰ کاری که توسعه دهندگان جدیدتر اغلب نمی دانند چگونه با جاوا اسکریپت انجام دهند، با نکات و کدهایی که به شما در درک آن کمک می کند، آورده شده است.
شما درباره سؤالات متداول شنیده اید، که معمولاً لیستی از سؤالات متداول در مورد یک موضوع یا موضوع دیگر است. با تغییر در این ایده، FSS – برای راهحلهای متداول – راهحلهایی را برای برخی از متداولترین درخواستهای کمک فهرست میکند. اینها معمولاً فراتر از سؤالات «تازه کار» هستند و به مسائل زندگی واقعی که برنامه نویسان بدخواه هستند می پردازند.
در اینجا ۱۰ مشکل وجود دارد که بارها و بارها برای توسعه دهندگانی که با جاوا اسکریپت کار می کنند، با نکات سریع و نمونه کدهایی که به شما در حل آنها کمک می کند، مطرح می شود.
۱. انجام کارها با آرایه ها
یک کاری که برنامه نویسان باید همیشه انجام دهند، دستکاری آرایه های داده است. این داده ها می توانند اشیا، اعداد یا رشته ها باشند. شما آن را از انواع مکان ها دریافت می کنید و انواع کارها را با آن انجام می دهید: آن را سفارش دهید، سازماندهی کنید، آن را به قطعات کوچکتر تقسیم کنید، و غیره.
راههای زیادی برای انجام کارهایی که باید با آرایهها انجام دهید، از جمله حلقههای دستوری کلاسیک وجود دارد. واقعاً راه درستی وجود ندارد. با این حال، جاوا اسکریپت مدرن مجموعهای از عملیات کاربردی فوقالعاده مفید را در اختیار شما قرار میدهد که اغلب روشی مختصر و ساده برای انجام کاری که نیاز به انجام دارد، ارائه میکند. شما فقط باید آنها را در ذهن داشته باشید و بدانید که در زمان فرا رسیدن زمان به کدام عملیات کاربردی دست پیدا کنید.
این آرایه را در نظر بگیرید:
const products = [
{ id: 1, name: "Apple", price: 1.99, inStock: true },
{ id: 2, name: "Banana", price: 0.79, inStock: false },
{ id: 3, name: "Orange", price: 2.49, inStock: true },
];
اگر بخواهیم فقط محصولات موجود را فیلتر کنیم و آنها را بر اساس قیمت صعودی مرتب کنیم، میتوانیم این کار را انجام دهیم:
const availableProducts = products.filter(product => product.inStock)
.sort((a, b) => a.price - b.price);
availableProducts
اکنون فقط اشیایی را در خود نگه می دارد که inStock
در آنها true
باشد و لیست بر اساس قیمت مرتب شده است. متدهای filter
و sort
هر دو داخلی هستند و توابعی را به عنوان آرگومان می گیرند. (اینها “توابع درجه بالاتر” هستند، که مشخصه برنامه نویسی تابعی است.)
هر آرگومان تابعی عنصر(ها) را می گیرد تا بر روی آن عمل کند و سپس کار خود را بر اساس آن انجام می دهد. در مورد filter
، اگر تابع true
را برگرداند، عنصر در آرایه حاصل نگهداری می شود. در sort()
، با حرکت الگوریتم روی آرایه، دو آرگومان ارائه می شود. اگر نتیجه منفی باشد، ابتدا مورد اول مرتب می شود و بالعکس. (اگر ۰ برگردانده شود، موارد برابر هستند.)
اطلاعات بیشتر درباره آرایه های جاوا اسکریپت
برای اطلاعات بیشتر به معرفی برنامه نویسی تابعی با آرایه جاوا اسکریپت مراجعه کنید. ابزارهای مفیدی مانند این.
۲. دستکاری DOM
اگرچه چارچوبهای Reactive اغلب برای کار بر روی DOM (مدل شیء سند که رابط کاربری را نشان میدهد و به شما امکان میدهد آن را تغییر دهید) استفاده میشود، توسعهدهندگان هنوز باید مستقیماً با DOM با استفاده از جاوا اسکریپت تعامل داشته باشند.< /p>
دستکاری DOM به دو چیز اساسی خلاصه میشود: واکنش به رویدادها و تغییر عناصر و ویژگیها. این مثال را در نظر بگیرید:
<!DOCTYPE html>
<html>
<body>
<h1 id="heading">Welcome to our website!</h1>
<button id="change-button">Change Heading</button>
<script>
const changeButton = document.getElementById("change-button");
changeButton.addEventListener("click", function(event) {
const clickedElement = event.target;
clickedElement.style.color = "red";
const heading = document.getElementById("heading");
heading.textContent = "This heading has been changed!";
});
</script>
</body>
</html>
در اینجا یک صفحه HTML ساده داریم، با عنوان (h1
) و یک دکمه (button
). یک درخت DOM ایجاد می کند که در آن عناصر
و
در داخل
تودرتو هستند. همچنین تگ
وجود دارد که مقداری جاوا اسکریپت را اجرا می کند.
جاوا اسکریپت با استفاده از تابع document.getElementById("change-button")
عنصر دکمه را با شناسه می گیرد.
در دکمه، ما یک شنونده رویداد را با استفاده از addEventListener
تنظیم می کنیم. این مکانیسم اساسی برای افزودن واکنش پذیری به صفحه است. انواع بسیاری از رویدادها وجود دارد. در مورد ما، میخواهیم با استفاده از "click"
به کلیک دکمه پاسخ دهیم. آرگومان دوم به ما امکان می دهد یک تابع برگشت به تماس ارائه کنیم.
تابع callback یک آرگومان واحد دریافت می کند که آن را رویداد
نامگذاری می کنیم. چندین ویژگی دارد که میتوانیم استفاده کنیم، اما اصلیترین موردی که میخواهیم target
است. عنصری که روی آن کلیک شده است را نگه می دارد. ما از آن برای تغییر رنگ سبک دکمه به قرمز استفاده می کنیم.
برای پایان، عنصر عنوان h1
را با شناسه می گیریم و متن آن را تغییر می دهیم. تغییرات متن و رنگ نمونه هایی از استفاده از ویژگی های عنصر DOM هستند.
۳. برنامه نویسی ناهمزمان
جاوا اسکریپت مدرن در برنامه نویسی ناهمزمان خوب است. این هم چیز خوبی است، زیرا باید آن را زیاد انجام دهید. سه مکانیسم اصلی برای برنامه نویسی ناهمزمان عبارتند از callbacks، process و async/wait.
تماسهای برگشتی سنتی هستند:
let myCallback = function(){
console.log(“I was called after one second.”);
}
setTimeout(myCallback, 1000);
این به ما امکان می دهد تابع myCallback
را به صورت ناهمزمان اجرا کنیم، در این مورد، پس از ۱۰۰۰ میلی ثانیه. در اینجا نحوه انجام یک کار مشابه با استفاده از Promise
آمده است:
function waitOneSecond() {
return new Promise((resolve, reject) => {
setTimeout(() => {
resolve("I was called after one second.");
}, ۱۰۰۰);
});
}
waitOneSecond()
.then(message => console.log(message))
.catch(error => console.error(error));
ما هنوز یک عملیات ناهمزمان و در واقع یک تماس ناهمزمان داریم. اما اکنون در یک Promise
پیچیده شده است. این به ما امکان میدهد روشهای سپس
و catch
را فراخوانی کنیم تا با نتایج بدون تماسهای تودرتو مقابله کنیم.
اطلاعات بیشتر درباره وعده های جاوا اسکریپت
برای یادگیری به ۵ روش استفاده از وعده های جاوا اسکریپت مراجعه کنید بیشتر در مورد وعده ها.
بلوکهای همگامسازی/انتظار، وعدهها را سادهتر و شفافتر میکنند. آنها به شما اجازه می دهند برای استفاده از وعده هایی مانند این کد بنویسید:
async function waitOneSecondAsync() {
try {
new Promise(resolve => setTimeout(() => console.log("I was called after one second."), 1000));
} catch (error) {
console.error(error);
}
}
console.log(“Before”);
await waitOneSecondAsync();
console.log(“after”);
اگر انتظار
را از این کد حذف کنید، خروجی های ورود به سیستم "قبل از
" و "after
" قبل از مهلت زمانی رخ خواهند داد. انتظار
به شما امکان میدهد تا زمانی که عملیات async
انجام شود مکث کنید—مشابه با استفاده از Promise
با then()
.
اطلاعات بیشتر در مورد برنامه نویسی ناهمزمان
۴. رسیدگی به خطا
کد میتواند در هر زمانی یک استثنا (که به عنوان پرتاب خطا نیز شناخته میشود) برای نشان دادن یک مشکل ایجاد کند:
throw new Error("Something is not right here.")
این باعث می شود که جریان عادی اجرا متوقف شود و پشته فراخوانی "باز کردن" شود. اگر پشته شامل بلوکهای try/catch باشد، اولین موردی که با آن مواجه میشوید، خطا را کنترل میکند. یک مثال فشرده در اینجا آمده است:
try{
throw new Error("Something is not right here.")
} catch(e) {
console.log("Got an error: " + e);
}
این چاپ خواهد شد: خطایی داشتم: خطا: چیزی اینجا درست نیست.
مدیریت خطای دقیق تر، از جمله تلاش برای بازیابی، تلاش مجدد، یا هر تعداد استراتژی دیگر با توجه به شرایط ممکن است. همچنین میتوانیم یک بلوک finally
تعریف کنیم که در صورت وجود یا عدم وجود خطایی فراخوانی میشود:
try{
throw new Error("Something is not right here.")
} catch(e) {
console.log("Got an error: " + e);
} finally {
console.log(“No matter what, I’ll print.”);
}
هنگام استفاده از عملیات ناهمزمان با وعدهها، میتوانیم از catch()
و finally()
به روشی مشابه استفاده کنیم. بیایید به مثال زمانبندی خود ادامه دهیم:
function waitOneSecond() {
return new Promise((resolve, reject) => {
setTimeout(() => {
reject(new Error("Network error!"));
}, ۱۰۰۰);
});
}
waitOneSecond()
.then(message => console.log(message))
.catch(error => console.error("Error:", error.message)) .finally(() => console.log("This always executes, regardless of errors."));
در این حالت، بلوکهای catch()
و finally()
همیشه اجرا میشوند، زیرا همیشه خطا ایجاد میشود. در کد واقعی، زمانی که اجرای عادی خطایی ایجاد نمیکند، فراخوانی catch انجام نمیشود.
۵. شروع کار با اشیاء
اشیاء بخش مرکزی برنامه نویسی جاوا اسکریپت هستند. جاوا اسکریپت حتی یک نماد داخلی برای توصیف آنها دارد، JSON:
let campingSpot = {
name: “Willow Creek”,
location: “Big Sur”
}
در اینجا نحوه دسترسی به خصوصیات روی شی آمده است:
console.log(“We’re going camping at “ + campingSpot.name);
اشیاء در جاوا اسکریپت به JSON محدود نمی شوند. ما همچنین میتوانیم رفتار را در قالب توابع (به نام متدها هنگام روی یک شی) تعریف کنیم:
let campingSpot = {
name: “Willow Creek”,
describeWater: function(){
console.log(“Very cold”);
}
}
ما محدود به اشیاء یکبار هم نیستیم. همچنین میتوانیم کلاسهایی از اشیاء را تعریف کنیم:
class CampingSpot {
constructor(name, location) {
this.name = name;
this.location = location;
}
describeWater() {
console.log("The water at " + this.name + " is very cold.");
}
}
اکنون میتوانیم نمونههایی از شی CampingSpot
را به دلخواه ایجاد کنیم:
let willowCreek = new CampingSpot("Willow Creek", "Big Sur");
let sunsetStateBeach = new CampingSpot(“Sunset State Beach”, “Santa Cruz”);
اطلاعات بیشتر درباره OOP
به برنامه نویسی شی گرا مراجعه کنید ? برای کسب اطلاعات بیشتر در مورد برنامه نویسی شی گرا.
۶. استفاده از API های راه دور
دسترسی به API های میزبانی شده در سرویس ها یکی دیگر از نیازهای رایج در برنامه های جاوا اسکریپت است. API ها دسترسی به داده ها و عملکردهای خارجی را فراهم می کنند. توسعه دهندگان اغلب به دنبال راه حل هایی برای واکشی داده ها از API های راه دور، تجزیه پاسخ ها و ادغام آنها در برنامه های خود هستند.
خوشبختانه، جاوا اسکریپت مدرن شامل Fetch API در هر دو محیط کلاینت و سرور است. این یک راه ساده و مستقیم برای برقراری تماس های HTTP است. به عنوان مثال، در اینجا نحوه دریافت لیست فیلم های جنگ ستارگان از سرویس SWAPI آمده است:
async function getStarWarsFilms() {
try {
const response = await fetch('https://swapi.dev/api/films');
if (!response.ok) {
throw new Error(`Error fetching Star Wars films: ${response.status}`);
}
const data = await response.json();
console.log(data.results);
} catch (error) {
console.error("Error:", error);
}
}
getStarWarsFilms();
از آنجا که این یک درخواست GET است، ما فقط می توانیم از fetch('https://swapi.dev/api/films')
استفاده کنیم. توجه داشته باشید که ما از wait
استفاده می کنیم که قبلاً معرفی کردم. این به ما امکان میدهد تا زمانی که درخواست خارج میشود و پاسخ بازمیگردد، مکث کنیم.
ما از شی response
استفاده میکنیم تا با استفاده از response.ok
تعیین کنیم که آیا درخواست خوب بوده است (یک پاسخ HTTP 200).
۷. دستکاری رشته
رشته ها اساسی هستند و در انواع موقعیت ها استفاده می شوند. رشته زیر را در نظر بگیرید:
const taoTeChingVerse1 =
`The Tao that can be told is not the eternal Tao.
The name that can be named is not the eternal name.
The nameless is the beginning of heaven and earth.
The named is the mother of all things,`;
فرض کنید فقط سطر اول بیت اول را میخواستیم:
const firstLine = taoTeChingVerse1.slice(0, 48);
این می گوید: رشته فرعی بین نویسه اول (۰) تا ۴۸ نویسه را به ما بدهید.
برای جستجوی اولین تکرار کلمه "Tao"، وارد کنید:
taoTeChingVerse1.indexOf("Tao"); // returns 4
اکنون، اگر میخواهید کلمات را جایگزین کنید، از یک regex ساده استفاده میکنید. در اینجا، همه موارد "گفته" را با "گفتار" جایگزین می کنیم:
const newText = text.replace(/told/g, "spoken");
اسلشها یک عبارت منظم را نشان میدهند که ما آن را با "گفته" مطابقت میدهیم. پسوند g
نشاندهنده «جهانی» است، به معنای همه رخدادها. آرگومان دوم برای replace()
رمزی است که باید با آن تعویض شود.
اگر لازم باشد دو رشته را به هم متصل کنیم، یک عملگر ساده به علاوه (+) این کار را انجام می دهد:
let fullVerse = taoTeChingVerse1 + “Having both but not using them, Think of them as the constant.”);
و، همیشه می توانید طول رشته را با:
بشمارید
fullVerse.length; // return 261
۸. تبدیل اشیاء JSON به رشته ها
یکی دیگر از نیازهای رایج این است که یک شیء JSON واقعی را بگیرید و آن را به رشته تبدیل کنید یا برعکس. در اینجا نحوه گرفتن یک شی JSON زنده و تبدیل آن به یک رشته آمده است:
let website = {
name: “InfoWorld”,
url: “www.infoworld.com”
}
let myString = JSON.stringify(website);
و در اینجا نحوه گرفتن رشته و برگرداندن آن به یک شی است:
JSON.parse(myString);
۹. عملیات ساده تاریخ
کارهای زیادی می توانید انجام دهید (و باید انجام دهید) با شی Date
داخلی جاوا اسکریپت.
برای شروع، میتوانید تاریخ امروز را به این صورت دریافت کنید:
const today = new Date();
و اجزای تشکیل دهنده آن را مانند این دریافت کنید:
console.log(today.getFullYear()); // Get the year (e.g., 2024)
console.log(today.getMonth()); // Get the month (0-indexed, e.g., 4 for May)
console.log(today.getDate()); // Get the day of the month (e.g., 21)
console.log(today.getHours()); // Get hours (e.g., 13 for 1 PM)
console.log(today.getMinutes()); // Get minutes (e.g., 27)
console.log(today.getSeconds()); // Get seconds (e.g., 46)
در اینجا نحوه دریافت هفت روز آینده آمده است:
date.setDate(date.getDate() + 7);
اطلاعات بیشتر درباره شیء Date
برای اطلاعات بیشتر به استفاده از اشیاء داخلی جاوا اسکریپت مراجعه کنید. درباره Date
و سایر اشیاء مهم جاوا اسکریپت.
۱۰. ایجاد، یافتن و شمارش اعداد
جاوا اسکریپت امروز با اعداد بسیار خوب است. این به طور بومی اکثر اعداد را کنترل می کند و یک کتابخانه داخلی، ریاضی، برای قدرت بیشتر ارائه می دهد.
شما می توانید اعداد ایجاد کنید:
let age = 30;
let pi = 3.14159;
let billion = 1000000000;
یا از یک رشته تبدیل کنید:
let convertedNumber = Number(“۴۲”);
عملیات عادی به روشهای واضحی رفتار میکنند:
let addition = pi + 3; // addition now equals 6.14159
شما می توانید اعداد را به سرعت گرد کنید:
Math.ceil(pi); // round to nearest upper integer (4)
Math.floor(pi); // round to lowest int (3)
بزرگترین عدد را پیدا کنید:
Math.max(100, 5, 10, 73); // returns 100
اگر با یک آرایه شروع میکنید، میتوانید از عملگر spread استفاده کنید:
let numbers = [100, 5, 10, 73];
Math.max(...numbers); // returns 100
در نهایت، نحوه بررسی یکنواختی در اینجا آمده است:
let isEven = 10 % 2 === 0; // true (checks if remainder is 0)
پست های مرتبط
راه حل های مکرر برای جاوا اسکریپت جستجو می شود
راه حل های مکرر برای جاوا اسکریپت جستجو می شود
راه حل های مکرر برای جاوا اسکریپت جستجو می شود