Может ли свойство длины массива 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 бит.
Если он без знака, то он не может быть отрицательным.