2015-09-03 2 views
10

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

var x = y.length; 

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

Я бы подумал, что это определенно никогда не будет отрицательным. Но может ли это быть неопределенным? – xdhmoore

+0

@xdhmoore нет, это может быть только натуральное число (0 или больше). – Pointy

+0

Можете ли вы придумать пример того, как «.length» может быть отрицательным? – nnnnnn

ответ

11

No.

spec for the length property says:

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

Не может быть ни одного объекта.

Кроме того, и более явно, spec for Array says:

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

+1

Я читал о w3schools: «Возвращаемое значение: число, представляющее количество элементов в объекте массива», которое не так явно, как ваш источник. Это то, что приводит к моему вопросу. –

+5

@ UncleSlug- [* w3schools *] (http://www.w3fools.com/) - очень обычный сайт, не верьте ему. – RobG

+0

BTW, текущий стандарт [* ECMA-262 ed 6 *] (http://www.ecma-international.org/ecma-262/6.0/index.html) aka ECMAScript 2015. ;-) – RobG

3

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

2

Нет, не может. MDN says:.

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

5

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

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

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

Хотя, 'Array.isArray (b) == false' – josh3736

+0

Это подчеркивает слабость * instanceof *, которая давно известна и почему она не используется для проверки того, является ли объект экземпляром чего-то. ;-) – RobG

+0

да для обоих комментариев. служит напоминанием о том, что более приятная проверка не всегда лучшая :-) – potatopeelings

0

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

+0

MDN больше не говорит, что это было неправильно. – RobG

+0

Еще раз проверьте, очистите кеш. Последнее обновление было, о, за 30 секунд до моего комментария. ;-) – RobG

Смежные вопросы