Может ли свойство длины массива JS когда-либо возвращать отрицательное значение?

Будет ли когда-нибудь экземпляр, когда свойство длины массива JavaScript возвращает отрицательное значение? Я предполагаю, что ответ отрицательный, но мне было интересно, если будет когда-либо необходимость учитывать отрицательные значения при сравнении длины массива в инструкции if, например.

var x = y.length;

if (x === 0) {
    return false;
  } else if (x > 0) {
    return true;
  } else alert("error"); // is this necessary?
}

Ответ 1

Нет.

Спецификация для свойства length гласит:

Свойство length этого объекта Array является свойством данных, значение которого всегда численно больше, чем имя каждого удаляемого свойства, имя которого является индексом массива.

Не может быть -1 свойств.

Кроме того, более конкретно, спецификация для Array гласит:

Каждый объект Array имеет свойство length, значение которого всегда является неотрицательным целым числом меньше 2 32.

Обновление: Ответ по-прежнему для ES2020

Ответ 2

Не нормально (как указывали другие ответы), но объект, являющийся экземпляром массива, может иметь отрицательное свойство, называемое длиной

var b = Object.create([]);
b.length = -1;

alert(b instanceof Array)
alert(b.length);

Ответ 3

Нет, не может. Более того, если вы попытаетесь сделать это arr.length = -1, это вызовет исключение

Ответ 4

Нет, не может. MDN говорит:.

Значение свойства length является целым числом с положительным знаком и значением меньше 2 для 32-й мощности (232).

Ответ 5

Как сказано здесь на сайте разработчика Mozilla (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/length), "свойство length представляет собой неподписанное 32-разрядное целое число, которое указывает количество элементов в массиве.". Как вы можете видеть, это целое число без знака 32 бит. Если он без знака, то он не может быть отрицательным.