Деструктурирование строки JS: параметр rest возвращает противоречивые данные

#javascript #ecmascript-6 #destructor #ecma #rest-parameters

#javascript #ecmascript-6 #деструктор #ecma #rest-параметры

Вопрос:

Рассмотрим следующие примеры

Старый проект:

 const [x, ...y] = "text";
console.log(x) // "t"
console.log(y) // "ext"
 

Новый проект, основанный на CRA:

 const [x, ...y] = "text";
console.log(x) // "t"
console.log(y) // ["e", "x", "t"]
 

Я не уверен, почему y возвращает string ( "ext" ) для старого проекта, где это массив символов ( ["e", "x", "t"] ) для нового проекта. Это как-то связано с разными версиями JS?

Примечание: Оба результата были извлечены после запуска webpack dev server.

Комментарии:

1. Второй вывод — это тот, который требуется для спецификации … (параметры rest всегда должны создавать массив, независимо от того, что было деструктурировано)

Ответ №1:

на веб-сайте babel вы можете видеть, что ваш код, основанный на es2015-loose, преобразуется в этот код, поэтому вывод этого кода совпадает с вашим старым проектом

 "use strict";

var _text = "text",
    x = _text[0],
    y = _text.slice(1);

console.log(x); // "t"

console.log(y); // "ext"