Новый Array(5).toString() возвращает четыре запятые

  • чтобы понять приведенный ниже фрагмент кода, я просмотрел эту ссылку.
  • Но все же я не могу понять, почему в консоли печатаются четыре запятые.
  • так как я создаю массив из пяти элементов
  • можете ли вы сказать мне, как это работает.
new Array(5).toString();
",,,,"

это пространство между элементами.

Nina Scholz 28.06.2019 21:28

это как a,b,c,d,e если вы видите здесь 5 элементов, но только 4 запятые

Arun Prasat 28.06.2019 21:29

@NinaScholz эй, но всего пять массивов, так что должно быть пять запятых, верно?

user10972884 28.06.2019 21:29

Ваш код эквивалентен выполнению [,,,,].toString().

Karl-André Gagnon 28.06.2019 21:30

@zizi Обратитесь к моему ответу ниже. Подумайте, как вы объявляете массив элементов; у вас есть только запятые между два элемента без дополнительной запятой после последнего элемента.

IronFlare 28.06.2019 21:31

с 5 элементами у вас есть 4 разделителя.

Nina Scholz 28.06.2019 21:33

@Karl-AndréGagnon, кстати, конечные запятые игнорируются, начиная с ES5, поэтому потребуется 5 запятых, но это, вероятно, еще больше запутает ОП.

Slai 28.06.2019 21:56

@ Карл-АндреГаньон — не совсем так, [,,,,].length — это 4. ;-)

RobG 28.06.2019 22:38

@slai — статья немного вводит в заблуждение. «Конечные запятые» всегда допускались, но в раннем IE была ошибка, которая рассматривала их как синтаксические ошибки. Кроме того, IE также неправильно обрабатывал исключения, поэтому [,,] создал массив длиной 3 вместо 2. ECMA-262 был более или менее изменен, чтобы приспособиться к ошибочному поведению IE. Таким образом, [0,1,] всегда должен был создавать массив длины 2 не потому, что конечные запятые игнорируются, а потому, что последнее исключение не увеличивает длину. Но теперь это явно указано в EMCA-262. И [1,2,,] создает массив длины 3 (как всегда и должно быть). :-)

RobG 28.06.2019 23:41

@Slai - о, при чтении ECMAScript ed 3 и сравнении с последней редакцией спецификация фактически не изменилась каким-либо значимым образом, были просто добавлены несколько слов, поясняющих, что замыкающие исключения игнорируются (как они всегда должны были быть) , подтверждая, что игнорируется опущение (несуществующее значение после запятой), а не сама запятая. :-)

RobG 29.06.2019 07:17

когда я искал, я не мог найти. Я попробовал и выложил. Не подскажете, как убрать отрицательные отметки :(

user10972884 01.07.2019 22:28
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
1
11
1 737
4
Перейти к ответу Данный вопрос помечен как решенный

Ответы 4

Ответ принят как подходящий

Представьте, как это будет выглядеть со значениями в каждом из индексов массива.

[1,2,3,4,5].join(); // Returns 1,2,3,4,5

Теперь, если вы уберете числа, вы просто останетесь с запятыми посередине.

new Array(5).join(); // Returns ,,,, because the values are blank.

когда я искал, я не мог найти. Я попробовал и выложил. Не подскажете, как убрать отрицательные отметки :(

user10972884 01.07.2019 22:28

toString() метод итерации выбрасывает все элементы в Array вталкивает их в строку и вставляет , между ними.

Поскольку вы определили пустой массив с 5 элементами, когда вы применяете toString, он преобразует его в пять «пустых» строк с 4 «,» между ними

Он точно не повторяет элементы, поскольку (в случае OP) их нет, он повторяет от 0 до длина. ;-)

RobG 28.06.2019 23:44

когда я искал, я не мог найти. Я попробовал и выложил. Не подскажете, как убрать отрицательные отметки :(

user10972884 01.07.2019 22:29

Как видите, someArray.toString() вернет то, что находится внутри массива, но без [ и ].

console.info([1,2,3,4,5])
console.info([1,2,3,4,5].toString())

Итак, если у вас есть запись в элементе массива, он вернет пустую строку и напечатает только запятую. (Array(5) то же, что и [,,,,,])

console.info([,,,,])
console.info([,,,,].toString())

Array(5) вернет массив только со свойством length: 5. Что сделает его элементы undefined.

Если вы хотите сделать что-то другое, то undefined вы можете использовать .fill

console.info(Array(5))
console.info(Array(5).fill(""))
console.info(Array(5).fill("anything"))

эй, но почему ваш второй фрагмент кода возвращает undefined :(

user10972884 28.06.2019 21:46

@zizi Потому что, хотя console.info(...) выводит то, что в скобках, на консоль, сама функция console.info не возвращает значение. Первый фрагмент кода делает то же самое.

IronFlare 28.06.2019 21:48

Теперь вам придется объяснить, почему [,,,,,] генерирует только массив длиной 5, а не 6. ;-)

RobG 29.06.2019 07:29

когда я искал, я не мог найти. Я попробовал и выложил. Не подскажете, как убрать отрицательные отметки :(

user10972884 01.07.2019 22:29

new Array(5) возвращает разреженный массив или массив с 5 пустыми местами внутри. Единственное, что это делает, это устанавливает свойство length объекта массива на указанный аргумент (в данном случае 5).

console.info(new Array(5)) // browser console --> [empty × 5]

Поэтому, естественно, если вы попытаетесь распечатать его содержимое, оно покажет вам, что у вас есть 5 пустых мест, разделенных ,

console.info(new Array(5).toString()) // ,,,, <-- 5 empty ',' separated elements

когда я искал, я не мог найти. Я попробовал и выложил. Не подскажете, как убрать отрицательные отметки :(

user10972884 01.07.2019 22:29

"отрицательные оценки"? Вы имеете в виду отрицательный голос -1 на ваш вопрос?

Akrion 01.07.2019 23:42

Другие вопросы по теме