جاوا اسکریپت همچنان به تکامل خود ادامه میدهد، با مجموعهای از ویژگیهای جدید اضافه شده در ECMAScript 14. در اینجا چیزهای جدیدی برای توسعهدهندگان جاوا اسکریپت در سال جاری آمده است.
- درک مشخصات
- Array.prototype.toSorted
- Array.prototype.toReversed
- Array.prototype.with
- Array.prototype.findLast
- Array.prototype.findLastIndex
- Array.prototype.toSpliced
- پشتیبانی رسمی shebang
- نمادها به عنوان کلید در مجموعههای ضعیف
- نتیجهگیری
چرخ زمان یک سال دیگر شکل گرفت، و به همراه آن نسخه رسمی جدید جاوا اسکریپt ارائه می شود: ECMAScript 2023، با نام مستعار ECMAScript 14. بهبودهای امسال عبارتند از اضافه شدن به آرایه ها و پشتیبانی از shebang در فایل های ECMAScript، و همچنین گسترش کلیدهای نماد برای مجموعه های ضعیف. تغییرات تا حد زیادی اصلاحاتی هستند در مقابل هر چیز چشمگیری. با این وجود، اثر مرکب ادامه تکامل زبان است. در اینجا نگاهی به چیزهای جدید در جاوا اسکریپت در سال ۲۰۲۳ داریم.
درک مشخصات
قبل از اینکه جزئیات نسخه جدید را بررسی کنیم، بهتر است در مورد مشخصات ECMAScript صحبت کنیم. همیشه میتوانید آخرین نسخه مشخصات ECMAScript را در https://tc39.es/ecma262/ پیدا کنید. اگر می خواهید مشخصات را در یک سال خاص بررسی کنید، می توانید آن را به URL اضافه کنید. برای مثال، مشخصات امسال در https://tc39.es/ecma262/2023/ میزبانی میشود.
برای یافتن موارد جدید در نسخه اخیر، میتوانید مقدمه را اسکن کنید (به عنوان مثال، در اینجا لنگر انداخته شده< /a>). این به شما اطلاعاتی از آنچه که با هر نسخه جدید ارسال می شود را نشان می دهد. شما می توانید با جستجوی یک ویژگی خاص، به جزئیات آن پی ببرید. (شاید در نسخه بعدی، پیوندی به هر ویژگی داشته باشیم!)
مشخصات ECMAScript یک سند چشمگیر است که هم به عنوان مرجع اصلی برای توسعه دهندگان و مربیان و هم به عنوان مشخصات فنی رسمی برای پیاده سازی موتور جاوا اسکریپت عمل می کند. این یک عمل متعادل کننده است که مشخصات آن را به خوبی مدیریت می کند. به دلیل اطلاعاتی که در اختیار دارد، میتواند به عنوان راهنمای کاربر برای زبان کمی دست و پا گیر باشد.
نکته دیگری که باید در مورد مشخصات بدانید این است که این واقعاً یک سند زنده است که با استفاده از زبان در طبیعت به صورت تعاملی رشد می کند. اغلب اوقات، یک ویژگی جدید پس از پذیرش غیر رسمی توسط جامعه کاربر به مشخصات رسمی اضافه می شود. برای مثال، میتوانیم این را با نحو shebang امسال ببینیم. هنگامی که یک ویژگی توسط مشخصات کدگذاری و استاندارد شد، مشخصات به عنوان یک پایه پایدار جدید برای نوآوری بیشتر آن ویژگی عمل می کند.
گاهی اوقات، مشخصات ECMAScript ایده های پیشگامانه ای را معرفی می کند. به عنوان مثال، استفاده از دستور async
/await
است که تحت تأثیر سی شارپ قرار گرفت.
بهعنوان یک زبان، جاوا اسکریپت از زمان جلوههای جابهجایی برش و چسباندن بهطور جهشی تکامل یافته است. فرآیند مشخصات ECMAScript نقش بزرگی در این تکامل بازی کرده است.
اکنون، بیایید نگاهی به ویژگیهای جدید معرفی شده به جاوا اسکریپت در سال ۲۰۲۳ بیندازیم.
Array.prototype.toSorted
اجازه دهید با روش آرایه جدید شروع کنیم، toSorted() .
toSorted
دارای امضای مشابه با Array.prototype.sort()
است، اما به جای اینکه روی خود آرایه کار کند، یک آرایه جدید ایجاد می کند. در اینجا روش آرایه جدید در فهرست ۱ آمده است.
let arr = [5,4,2,3,1]
arr === arr.sort(); // true - [1, 2, 3, 4, 5]
arr === arr.toSorted(); // false - [1, 2, 3, 4, 5]
toSorted()
، مانند sort()
، همچنین یک آرگومان اختیاری، یک تابع مقایسه کننده را می پذیرد. برای مثال، میتوانیم از toSorted()
برای ایجاد یک آرایه جدید به ترتیب نزولی، مانند فهرست ۲ استفاده کنیم.
const numbers = [10, 5, 2, 7, 3, 9, 1, 6, 4];
const sortedNumbers = numbers.toSorted((a, b) => {
return b - a;
});
console.log(sortedNumbers); // [10, 9, 8, 7, 6, 5, 4, 3, 2, 1]
اجازه دهید همچنین توجه داشته باشیم که toSorted()
را می توان برای آرایه هایی از اشیاء اعمال کرد. در این صورت، باید یک تابع مقایسهکننده ارائه کنید که از دادههای روی اشیاء استفاده میکند، زیرا هیچ ترتیب طبیعی برای اشیا وجود ندارد. می توانید یک مثال را در لیست ۳ ببینید.
// Comparing objects
const objects = [{ name: "John", age: 30 }, { name: "Jane", age: 25 }, { name: "Bill", age: 40 }, { name: "Mary", age: 20 }];
const sortedObjects = objects.toSorted((a, b) => {
return a.name.localeCompare(b.name);
});
console.log(sortedObjects);
//[{"name":"Bill","age":40},{"name":"Jane","age":25},{"name":"John","age":30},{"name":"Mary","age":20}]
فهرست ۳ اشیاء را بر اساس فیلد نام مرتب می کند.
یادداشتی در مورد روش های آرایه
بیشتر روشهای Array
در TypedArray
نیز وجود دارند، به جز موارد ذکر شده.
Array.prototype.toReversed
مانند toSorted()
و sort()
، toReversed() پسرعموی تکراری reverse()
است. فهرست ۴ چند مثال سریع از استفاده از toReversed()
دارد، از جمله اعمال آن بر روی اشیاء با تابع مقایسه کننده.
["a","b","c","d","e"].toReversed(); // ['e', 'd', 'c', 'b', 'a']
Array.prototype.with
روش جدید with() به شما امکان میدهد یک عنصر را بر اساس شاخص آن تغییر دهید و یک عنصر جدید را برگردانید. آرایه. بنابراین، اگر شاخص و مقدار جدید را بدانید، این روش کار را بسیار آسان می کند. توجه داشته باشید که with()
همراه کپی set()
است. فهرست ۵ یک مثال ساده ارائه می دهد.
const arr4 = ["I", "am", "the", "Walrus"];
// Replace the string "Walrus" with "Octopus".
const newArr4 = arr4.with(3, "Ape Man");
console.log(newArr4);
Array.prototype.findLast
روش findLast() به شما امکان می دهد نمونه نهایی را دریافت کنید یک عنصر منطبق از یک آرایه اگر هیچ عنصر منطبقی پیدا نشد، تعریف نشده برمی گردد. یک مثال ساده در لیست ۶ آورده شده است، جایی که آخرین عدد زوج را از یک آرایه می گیریم.
const arr = [54, 34, 55, 75, 98, 77];
const lastEvenIndex = arr.findLast((element) => {
return element % 2 === 0;
});
console.log(lastEvenIndex); // 98
findLast()
همچنین از ارسال “thisArg
” برای تنظیم زمینه پشتیبانی می کند. به این معنا که آرگومان دوم به تابع آرگومان اول می گوید که کلمه کلیدی this
به چه چیزی اشاره خواهد کرد. این را میتوانید در فهرست ۷ مشاهده کنید، جایی که ما از یک شی سفارشی برای یافتن اولین عنصر به طور مساوی بر ۵ استفاده میکنیم.
const arr6 = [54, 34, 55, 75, 98, 77];
const myObject = {testCase: 5};
const lastEvenIndex = arr5.findLast((element) => {
return element % myObject.testCase === 0;
}, myObject);
console.log(lastEvenIndex); // 75
Array.prototype.findLastIndex
findLastIndex() دقیقاً مانند findLast( )
، با این تفاوت که به جای خود عنصر، شاخص مطابقت عنصر را به شما می دهد. به عنوان مثال، فهرست ۸ نشان می دهد که چگونه می توان شاخص آخرین عنصر را که به طور مساوی بر ۶ تقسیم می شود، پیدا کرد.
const arr = [54, 34, 55, 75, 98, 77];
arr.findLastIndex(x => x % 6 === 0); // 0
Array.prototype.toSpliced
تا کنون، تمام روشهایی که توضیح دادیم برای TypedArray
نیز اعمال میشود. آخرین روش آرایه جدید، toSpliced()، فقط در < وجود دارد code>آرایه. روش toSpliced()
نسخه کپی splice()
است – آن چاقوی قدیمی ارتش سوئیس دستکاری آرایه جاوا اسکریپت.
فرض کنید آرایهای از رنگها داریم و باید چند رنگ جدید (صورتی و فیروزهای) را در وسط قرار دهیم. این را میتوانید در فهرست ۹ ببینید. به یاد داشته باشید، این کار به جای اصلاح آرایه اصلی، یک آرایه جدید ایجاد میکند.
const arr = ["red", "orange", "yellow", "green", "blue", "purple"]; const newArr = arr.toSpliced(2, 1, "pink", "cyan"); console.log(newArr);
// ["red", "orange", "pink", "cyan", "green", "blue", "purple"]
console.log(newArr[3]);
// 'cyan'
console.log(arr[3]);
// ‘green’
پشتیبانی رسمی shebang
یک shebang یک گفتگوی قدیمی یونیکس برای یک هشتگ به دنبال علامت تعجب است: #!
(که در آن “bang” به معنای “!” است). از زمان های بسیار قدیم، یک نظر در سر فایل که با #!
شروع می شود به پوسته می گوید که آنچه در اینجا دارید یک اسکریپت اجرایی است و از چه موتوری برای اجرای آن استفاده کنید. برای مثال، فهرست ۱۰ یک اسکریپت bash معمولی است.
#!/bin/bash
echo "Hello, world!"
میتوانید فایلی مانند آنچه در فهرست ۱۰ وجود دارد را مستقیماً با ./hello.sh
اجرا کنید.
همانطور که در فهرست ۱۱ نشان داده شده است، می توانید با جاوا اسکریپت مشابهی انجام دهید.
#!/usr/bin/env node
console.log("Hello, world!");
فهرست ۱۱ به سیستم عامل می گوید که از برنامه گره برای اجرای این اسکریپت استفاده کند. اکنون فقط میتوانید ./hello.js
را تایپ کنید تا آن را اجرا کنید. بدون #!
، این کار نمیکند.
پشتیبانی از Shebang یکی از آن بهروزرسانیهای ویژگی در این مشخصات است که قبلاً پیادهسازی شده و بهطور غیررسمی در زمینههای مختلف مورد استفاده قرار گرفته است.
نمادها به عنوان کلید در مجموعه های ضعیف
ویژگی جدید نهایی در ECMAScript 14 گسترش مواردی است که می توان به عنوان کلید در مجموعه های ضعیف استفاده کرد.
مجموعههای ضعیف در مقایسه با استفاده روزمره از جاوا اسکریپت کمی باطنی هستند. در برنامه نویسی، یک مرجع ضعیف مرجعی است که اگر در غیر این صورت زباله جمع آوری شود، دفع می شود. به عبارت دیگر، یک مرجع ضعیف به خودی خود برای جلوگیری از دفع هدف مرجع توسط الگوریتم جمع آوری زباله کافی نیست (به همین دلیل است که مرجع ضعیفی است).
میتوانید درباره منابع ضعیف و زمانی که مفید هستند اطلاعات بیشتری کسب کنید اینجا. همچنین یک بحث خوب در اینجا وجود دارد.
کاری که ES14 انجام می دهد این است که استفاده از اکثر Symbol
ها را به عنوان کلید در یک مجموعه مجاز می کند، در حالی که قبلا فقط می توانستید از یک شی استفاده کنید. اگر تعجب می کنید که Symbol
چیست، تنها نیستید. در اینجا میتوانید بیشتر بیاموزید.< /p>
ویژگی جدید اساساً استفاده از مراجع ضعیف را در مجموعههایی مانند WeakMaps
با کاهش محدودیتها در مورد آنچه میتوان برای کلیدها استفاده کرد، آسانتر میکند. یک مثال ساده در فهرست ۱۲ نشان داده شده است.
var map = new WeakMap(); // create a weak map
function useSymbol(symbol){
doSomethingWith(symbol);
var called = map.get(symbol) || 0;
called++; // called one more time
if(called > 2) console.log(“Called more than twice”);
map.set(symbol, called);
}
let mySymbol = Symbol(“FooBar”);
useSymbol(mySymbol);
useSymbol(mySymbol);
useSymbol(mySymbol);
delete mySymbol; // No live references are left to mySymbol, so we can count on the garbage collector eliminating the entry in the weakMap when it runs (eventually)
فهرست ۱۲ از پاسخ StackOverflow پیوند داده شده در بالا اصلاح شده است. در این مثال، هدف این است که امکان فراخوانی شمارنده از یک تماس گیرنده خارجی و دفع ورودی نقشه زمانی که هیچ مرجعی وجود ندارد، باشد. خود کد هیچ راهی ندارد که بداند چه زمانی دیگر به مرجع مورد نیاز نیست، و اگر از Map
معمولی استفاده کنید، با نشت حافظه مواجه خواهید شد. این به این دلیل است که کد حتی پس از اینکه مشتری که با آن تماس میگیرد دیگر به آن نیاز نداشته باشد، روی مرجع باقی میماند. در این مورد، جایی که ما از WeakMap
استفاده میکنیم، میتوانیم روی حذف ورودی نقشه توسط مجموعه زباله حساب کنیم، زمانی که دیگر ارجاعی به نماد کلید وجود نداشته باشد.
نتیجه گیری
اگرچه سال ۲۰۲۳ سال نسبتاً آرامی برای جاوا اسکریپت بود، ECMAScript 14 برخی از ویژگی های مفید را اضافه کرد و مشخصات رسمی را مطابق با دنیای واقعی به روز نگه داشت. در نسخه بعدی، تغییرات زیادی از جمله API موقتی جدید و براق برای مدیریت زمانهای تاریخ خواهیم داشت.
پست های مرتبط
تمام ویژگی های جدید در ECMAScript 2023 (ES14)
تمام ویژگی های جدید در ECMAScript 2023 (ES14)
تمام ویژگی های جدید در ECMAScript 2023 (ES14)