ECMAScript 2019

شماره نسخه JavaScript

نسخه‌های قدیمی JS با نام عددی نامگذاری می‌شوند: ES5 (2009) و ES6 (2015).

از سال 2016، نسخه‌ها با نام سال نامگذاری می‌شوند: ECMAScript 2016، 2017، 2018، 2019،...

ویژگی‌های جدید ES2019:

اخطار

این ویژگی‌ها نسبتاً جدید هستند.

مرورگرهای قدیمی ممکن است نیاز به کد جایگزین (Polyfill) داشته باشند

مетод رشته JavaScript trimStart()

ES2019 روش‌های رشته‌ای جدید را به JavaScript اضافه کرده است trimStart().

trimStart() روش کار این روش مشابه trim() مانند آن، اما فقط فضاهای خالی ابتدایی را حذف می‌کند.

مثال

let text1 = "     Hello World!     ";
let text2 = text1.trimStart();

تست کنید

از ژانویه 2020، همه مرورگرهای مدرن پشتیبانی از JavaScript String trimStart() را دارند:

Chrome Edge Firefox Safari Opera
Chrome 66 Edge 79 Firefox 61 Safari 12 Opera 50
ماه آوریل 2018 ژانویه 2020 ماه ژوئن 2018 سپتامبر 2018 ماه مه 2018

مетод رشته JavaScript trimEnd()

ES2019 به JavaScript امکان می‌دهد که trimEnd() روش‌های رشته‌ای.

trimEnd() روش کار این روش مشابه trim() مانند آن، اما فقط فضاهای خالی انتهایی را حذف می‌کند.

مثال

let text1 = "     Hello World!     ";
let text2 = text1.trimEnd();

تست کنید

از ژانویه 2020، همه مرورگرهای مدرن از JavaScript String trimEnd() پشتیبانی می‌کنند:

Chrome Edge Firefox Safari Opera
Chrome 66 Edge 79 Firefox 61 Safari 12 Opera 50
ماه آوریل 2018 ژانویه 2020 ماه ژوئن 2018 سپتامبر 2018 ماه مه 2018

مетод شیء JavaScript fromEntries()

ES2019 به JavaScript امکان می‌دهد که fromEntries() روش شیء.

fromEntries() روش با استفاده از جفت‌های کلید/مقدار قابل تکرار یک شیء ایجاد می‌کند.

مثال

const fruits = [
["apples", 300],
["pears", 900],
["bananas", 500]
];
const myObj = Object.fromEntries(fruits);

تست کنید

از ژانویه 2020، همه مرورگرهای مدرن از JavaScript Object fromEntries() پشتیبانی می‌کنند:

Chrome Edge Firefox Safari Opera
Chrome 73 Edge 79 Firefox 63 Safari 12.1 Opera 60
ماه مارس 2019 ژانویه 2020 ماه اکتبر 2018 ماه مارس 2019 ماه آوریل 2019

اتصال انتخابی catch

از ES2019 به بعد، اگر لازم نباشد، می‌توانید پارامتر catch را حذف کنید:

مثال

قبل از سال 2019:

try {
// کد
catch (err) {
// کد
}

بعد از سال 2019:

try {
// کد
catch {
// کد
}

از ژانویه 2020، همه مرورگرهای مدرن از بستن انتخابی catch پشتیبانی می‌کنند:

Chrome Edge Firefox Safari Opera
Chrome 66 Edge 79 Firefox 58 Safari 11.1 Opera 53
ماه آوریل 2018 ژانویه 2020 ماه ژانویه 2018 ماه مارس 2018 ماه مه 2018

مетод آرایه JavaScript flat()

ES2019 به JavaScript امکان می‌دهد که flat() روش آرایه.

flat() روش با گسترش آرایه‌های عمیق یک آرایه جدید ایجاد می‌کند.

مثال

const myArr = [[1,2],[3,4],[5,6]];
const newArr = myArr.flat();

تست کنید

از ژانویه 2020، همه مرورگرهای مدرن از JavaScript Array flat() پشتیبانی می‌کنند:

Chrome Edge Firefox Safari Opera
Chrome 69 Edge 79 Firefox 62 Safari 12 Opera 56
سپتامبر 2018 ژانویه 2020 سپتامبر 2018 سپتامبر 2018 سپتامبر 2018

مетод آرایه JavaScript flatMap()

ES2019 به JavaScript امکان می‌دهد که flatMap() روش آرایه.

flatMap() روش اولین، همه عناصر آرایه را به تصویر می‌کشد و سپس با استفاده از گسترش آرایه‌ها یک آرایه جدید ایجاد می‌کند.

مثال

const myArr = [1, 2, 3, 4, 5, 6];
const newArr = myArr.flatMap((x) => x * 2);

تست کنید

مетод آرایه پایدار sort()

ES2019 تدوین مجددروش sort() آرایه.

قبل از سال 2019، استاندارد اجازه می‌داد که الگوریتم‌های مرتب‌سازی غیرپایدار مانند QuickSort را استفاده کنند.

بعد از ES2019، مرورگرها باید از الگوریتم‌های مرتب‌سازی پایدار استفاده کنند:

هنگام مرتب‌سازی بر اساس یک مقدار، این عناصر باید در موقعیت‌های رابطه‌ای خود با عناصر دیگری که دارای مقدار مشابه هستند، باقی بمانند.

مثال

const myArr = [
  {name:"X00",price:100 },
  {name:"X01",price:100 },
  {name:"X02",price:100 },
  {name:"X03",price:100 },
  {name:"X04",price:110 },
  {name:"X05",price:110 },
  {name:"X06",price:110 },
  {name:"X07",price:110 }
];

تست کنید

در مثال بالا، هنگام مرتب‌سازی بر اساس قیمت، نتایج مجاز نیستند در موقعیت‌های دیگر رابطه‌ای مانند زیر ظاهر شوند:

X01 100
X03 100
X00 100
X03 100
X05 110
X04 110
X06 110
X07 110

رابطه مجدد JSON.stringify()

ES2019 تدوین مجددروش stringify() JSON.

قبل از سال 2019، JSON نمی‌توانست از کاراکترهای رمزگذاری شده با \ برای تبدیل به زنجیره استفاده کند.

مثال

let text = JSON.stringify("\u26D4");

تست کنید

قبل از ES2019، استفاده از JSON.stringify() روی نقاط کد UTF-8 (U+D800 تا U+DFFF) منجر به بازگشت کاراکترهای Unicode خراب می‌شود، مانند ���.

با این اصلاح، زنجیره‌هایی که دارای نقاط کد UTF-8 هستند می‌توانند به صورت امن با استفاده از JSON.stringify() تبدیل شوند و با استفاده از JSON.parse() به زنجیره‌های اصلی تبدیل شوند.

علامت‌های جداکننده

حالا از کاراکترهای جداکننده سطر و جداکننده پاراگراف در نوشته‌های زنجیره‌ای مجاز است (\u2028 و \u2029)

قبل از سال 2019، این‌ها به عنوان کاراکترهای پایان سطر در نظر گرفته می‌شدند و منجر به خطا می‌شدند:

مثال

// این در ES2019 معتبر است:
let text = "\u2028";

تست کنید

توجه کنید

حالا، JavaScript و JSON قوانین مشابهی دارند.

قبل از ES2019:

text = JSON.parse('"\u2028"') به '' تجزیه می‌شود.

text = '"\u2028"' می‌دهدخطای گرامری.

رابطه مجدد Function toString()

ES2019 تدوین مجددمетод Function toString() است.

مетод toString() یک رشته‌ای را بازگرداند که نشان‌دهنده کد منبع تابع است.

از سال 2019 به بعد، toString() باید کد منبع تابع را بازگرداند، شامل کامنت‌ها، فاصله‌ها و جزئیات گرامری.

قبل از سال 2019، مرورگرهای مختلف نسخه‌های مختلفی از تابع‌ها را بازمی‌گرداند (مثلاً بدون کامنت و فاصله). از سال 2019 به بعد، این تابع باید به طور کامل به همان شکل که نوشته شده است بازگردانده شود.

مثال

function myFunction(p1, p2) {
  return p1 * p2;
}

تست کنید