Что такое «неопределенный х 1» в JavaScript?

Я делаю небольшие эксперименты, основанные наthis blog entry.

Я занимаюсь этим исследованием в отладчике Google Chrome, и здесь начинается самое сложное.

What the heck is this?!

Я понимаю, что не могу удалить локальные переменные (поскольку они не являются объектными атрибутами). Я понял, что могу «зачитать» все параметры, передаваемые в функцию из массива, называются «arguments». Я даже понимаю, что не могу удалить элемент массива и получить его только для того, чтобы получитьarray[0] имеют значение undefined.

Может кто-нибудь объяснить мне, чтоundefined x 1 значит на встроенном изображении?

И когда я перезаписываю функциюfoo вернутьarguments[0]тогда я получаю обычный и "нормальный" не определено.

Это только эксперимент, но кажется интересным, кто-нибудь знает, чтоundefined x 1 относится к?

 alex21 мая 2012 г., 12:49
Технически вы не имеете дело сArray но с массивом, какObject.
 Bergi21 мая 2012 г., 18:31
Вы ищете метод фильтрации? Вы должны перебрать объект arguments с помощью for (var i & lt; arguments.length) -loop и поместить нужные элементы в новый массив.
 benqus21 мая 2012 г., 12:55
@alex: Да, я знаю это, поэтому я могу это делать. удалить, но только ссылку на значение, верно? В противном случае длина массива была бы короче на единицу.
 Bergi21 мая 2012 г., 12:54
Обратите внимание, чтоarguments это не массив, аArguments объект (хотя он выглядит и ведет себя подобно). Кроме того, удаление элементов из массива не выполняется с помощьюdelete оператор.
 benqus21 мая 2012 г., 13:00
@Bergi: Вы говорите об этом методе, когда создаете временный массив и клонируете нужные элементы, пропуская ненужные? Или у тебя в голове что-то еще?

Ответы на вопрос(5)

arr = new Array(4);
arr[2] = "adf";
console.log(arr);    // [undefined × 2, "adf", undefined × 1]

Смотрите первые два последовательных "неопределенных" которые представлены * 2, чтобы показать, что есть два последовательных неопределенных

empty вместоundefined чтобы сделать разницу немного яснее.

Например, ввод[,,undefined,,] в консоли DevTools приводит к:

▼(4) [empty × 2, undefined, empty]
   2: undefined
   length: 4
  ▶__proto__: Array(0)
Решение Вопроса

это новый способ Chrome отображать неинициализированные индексы в массивах (иarray-like объекты):

> Array(100)
[undefined × 100]

Что, безусловно, лучше, чем печать[undefined, undefined, undefined,...] или как бы то ни было

Хотя, если есть только одинundefined значение, они могли бы отброситьx 1.

 benqus21 мая 2012 г., 12:51
Замечательно, спасибо, ребята! = D
 21 мая 2012 г., 12:49
@alex: Да, в этом случае индексы0 а также1 на самом деле существует в массиве. Немного изменил формулировку моего ответа.
 benqus21 мая 2012 г., 12:48
О, я хотя и положил свои руки глубоко в какое-то дерьмо, которого не должно было быть ... = D Хорошо, спасибо, приятель, +1, принято! = D
 10 июл. 2012 г., 22:50
мой массив подобен var e = [a (b), a (c), a (d)] хром показывает неопределенное значение x 3, если я обращаюсь к нему (e [0]), он показывает правильный тип.
 21 мая 2012 г., 12:49
Хороший. Кажется, работает только дляimplicit undefinedнапример,new Array(100) вызывает это, но[undefined, undefined] не

разреженный массив используя этоundefined x n нотации. Это покажет[undefined, undefined] если это не редкий массив:

var arr = new Array(2);
console.log(arr);

var arr2 = [];
arr2[3] = 123;
console.log(arr2);

var arr3 = [,,,];
console.log(arr3)

var arr4 = [,];
console.log(arr4)

var arr5 = [undefined, undefined]
console.log(arr5)

var arr6 = [undefined]
console.log(arr6)

Все arr1-arr4 - это разреженные массивы, а arr5 и arr6 - нет. Chrome покажет их как:

[undefined × 2] 
[undefined × 3, 123] 
[undefined × 3] 
[undefined × 1] 
[undefined, undefined] 
[undefined] 

Обратите внимание[undefined x 1] для разреженного массива.

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

ыведите / запишите массив на консоль. Пока он работает как в crome, так и в firefox одинаково (так как доступ к элементам работает нормально, даже если вывод имеет значение undefinedx1), я считаю, что это какая-то ошибка в Chrome, которая не обновляет что-то внутри. Вы можете проверить это так:

I was adding elements to an array, and firing console.log() to log the element, to check if it was undefined or not. They were all defined. After push() I logged the array and it seemed that when this happened, it was always the last one being undefined x 1 on Chrome. Then I tried logging it more times and also later, but with the same result. However when I accessed (for the sake of output), the element by its index, it returned the proper value (funny). After that I logged the array again and it said the last index was undefined x 1 (the very one I just accessed directly with success!). Then I did a for loop on the array, logging or using each element, all showed up fine.

Then another log on the array, still buggy.

The code I'm originally using has checks for undefined and they didn't fire, but I was seeing all these undefineds in the console and it was bugging me (no pun intended).

Также стоит прочитать:Унифицированные переменные в массиве при использовании только Array.push? Я также использую pop () в своем коде, и это является разумным объяснением того, что журнал консоли фактически представляет другое состояние во времени (когда код «остановлен»).

Ваш ответ на вопрос