В этой статье мы поймем, что такое свойство length и Почему arr [2] не определено в [10,20,,, 50] в javascript? Большинство из нас , Я имею в виду, что разработчик javascript думает, что знает, почему arr [2] не определен в [10,20 ,,, 50]. Не только arr [2], но и другие неопределенные значения, например arr [2], arr [3] и arr [4]. Но они этого не делают. Обычно они думают, что если мы не указываем значение в массиве, то по умолчанию он получает неопределенное значение. Но это не совсем так. Дело не в том, что они не хотят узнавать, что здесь происходит, вместо этого они просто думают, что это просто не важно или может быть причина, по которой им сказали, что если мы не присвоим значение переменной, она получит неопределенный. Да, это верно в случае примитивов, но почему это не так в случае объектов (массив также является объектом). Давайте погрузимся глубоко внутрь.

скажем, у нас есть массив

В результате мы получим

Следует отметить, что на выходе arr будет 10, 20, 2 * пустых слотов, 50. Более интересные вещи становятся очевидными, когда мы расширяем вывод этого массива (arr в нашем случае).

Он представляет собой 3 важных вывода:
1) Массив - это объект (который мы все знаем), и здесь key представляет индекс, из которого мы получаем доступ к его значению, т.е. если мы обращаемся к arr [index], тогда он вернет значение свойства (индекса) объекта (arr).
2) Объект массива имеет специальное свойство length, которое большинство из нас думает что он расскажет нам, сколько элементов имеет этот массив, или некоторые из нас могут сказать, что он представляет, сколько свойств имеет этот объект массива. но из приведенного выше изображения видно, что он содержит только 3 элемента и специальное свойство length. Но длина - это не что иное, как больший целочисленный индекс + 1.
3) Если мы не присваиваем значение массиву или если мы добавляем пустые слоты, то этот объект массива увеличивает длину массива, но не добавляет никакого значения к этому конкретному индексу или ключу.

когда мы говорим arr [2], тогда объект выполняет некоторые проверки, чтобы вернуть правильное значение:
1) Он ищет внутри своих свойств. Если свойство существует, он возвращает это свойство. Если его не существует, переходите к шагу 2.
2) Объект просматривает свой прототип. Если он там находит, он возвращает это значение этого свойства. Если по-прежнему, свойство не существует в его прототипе, повторите снова 2. Этот цикл продолжается до тех пор, пока прототип объекта не станет нулевым.
3) Наконец, возвращается undefined.

когда мы запрашиваем arr [2], тогда объект массива (arr) ищет свойство или ключ «2» внутри него. Поскольку он недоступен в объекте массива, он делегирует поиск в своем прототипе. Свойство не существует в цепочке прототипов, поэтому оно вернет значение undefined.

Надеюсь, вы понимаете, почему arr [2] не определен.

Теперь, что произойдет, если кто-то намеренно добавит свойство в прототип объекта массива.

А вот и самое интересное. Что, если кто-то назначит свойство в Array.prototype, например, Array.prototype [«2»] = «Правин Кумар»

Что, черт возьми, здесь происходит?

Вы ожидаете, что arr [2] будет неопределенным, но это не так. Это потому, что когда мы ищем arr [2] в нашем объекте массива, он не существует, поэтому он делегирует поиск своему прототипу. Array.prototype имеет свойство (в нашем случае «2»). Итак, он возвращает свое значение.

Надеюсь, вы что-нибудь узнаете из этой статьи. Большое спасибо за чтение этой статьи.