22.02.2014, 20:08
|
Профессор
|
|
Регистрация: 27.04.2012
Сообщений: 1,410
|
|
конструкция Array.prototype.slice ...
В одном коде нашел вот такую конструкцию:
var arg = Array.prototype.slice(arguments, 0);
разумеется эта конструкция находится внутри функции. я понимаю данные сохраняют в переменную, потому что в нутри этой функции находится еще одна функция и список аргументов надо как то сохранить.. но почему именно таким макаром? почему не написать просто:
var arg = arguments;
function a ()
{
console.log(typeof arguments);
//ради прикола узнаем что arguments - это массив...
//я думаю что здесь "особый" массив. ну например, когда пишем document.querySelector то получаем не массив а nodeList...
var arg = arguments;
//var arg = Array.prototype.slice(arguments, 0);
return function ()
{
console.log(arg);
console.log(arguments);
}
}
var b = a(1, 2, 3);
b(44, 55, 66);
или здесь нет никакой разницы, хотят запутать?)))
|
|
22.02.2014, 20:21
|
|
Профессор
|
|
Регистрация: 27.05.2010
Сообщений: 33,131
|
|
Сообщение от skrudjmakdak
|
ради прикола узнаем что arguments - это массив
|
неугадал
|
|
22.02.2014, 20:24
|
|
Профессор
|
|
Регистрация: 27.05.2010
Сообщений: 33,131
|
|
skrudjmakdak,
Цитата:
|
Несмотря на доступ по индексу и наличие свойства length, arguments не является массивом, т.е не принадлежит типу Array.
|
http://javascript.ru/arguments
|
|
22.02.2014, 20:35
|
Профессор
|
|
Регистрация: 27.04.2012
Сообщений: 1,410
|
|
ага, т.е. той самой волшебной строкой мы получаем обычный массив..
а вот еще пример, уже мой:
var div = document.querySelectorAll('div');
var d = Array.prototype.slice(div, 0);
console.log(d);
d.forEach(funcyion (){/* ... */});
получит пустой массив((
а вот так можно:
Array.prototype.forEach(document.querySelectorAll('div'), funcyion (){/* ... */});
|
|
22.02.2014, 20:42
|
|
Профессор
|
|
Регистрация: 27.05.2010
Сообщений: 33,131
|
|
Сообщение от skrudjmakdak
|
var d = Array.prototype.slice(div, 0);
|
тут ничего незабыли?
|
|
22.02.2014, 20:46
|
|
√₋̅₁̅
|
|
Регистрация: 18.06.2012
Сообщений: 385
|
|
Цитата:
|
arguments не является массивом, т.е не принадлежит типу Array
|
<sarcasm>
иными словами, не просто не Массив, но и вообще даже не массив
продолжая в том же духе, можно сказать, что инстанс Uint32Array тоже не массив, потому что не принадлежит типу Array
железная логика
а я-то дурак всегда думал, что массив это контейнер элементов с поиндексным доступом
теперь будем знать, что массив это то, что принадлежит типу Array
</sarcasm>
рони,
не читайте до обеда советских газет (ц)
__________________
Гейзенберг, возможно, читал этот тред.
Последний раз редактировалось Дзен-трансгуманист, 22.02.2014 в 20:49.
|
|
22.02.2014, 20:50
|
|
Профессор
|
|
Регистрация: 27.05.2010
Сообщений: 33,131
|
|
Дзен-трансгуманист,
а какже тогда запись из советской газеты про
Цитата:
|
arguments.pop() // ошибка !
|
и то что ноделист "живой" ?
|
|
22.02.2014, 20:51
|
|
Профессор
|
|
Регистрация: 27.05.2010
Сообщений: 33,131
|
|
Сообщение от Дзен-трансгуманист
|
инстанс Uint32Array
|
про это я совсем незнаю -- можно ссылку
|
|
22.02.2014, 21:04
|
|
√₋̅₁̅
|
|
Регистрация: 18.06.2012
Сообщений: 385
|
|
рони,
Typed Array Specification
тут тоже нет попов и пушей, и тем не менее
__________________
Гейзенберг, возможно, читал этот тред.
Последний раз редактировалось Дзен-трансгуманист, 22.02.2014 в 21:14.
|
|
22.02.2014, 21:07
|
sinistral
|
|
Регистрация: 28.03.2011
Сообщений: 5,418
|
|
Сообщение от Дзен-трансгуманист
|
иными словами, не просто не Массив, но и вообще даже не массив
|
если не смотреть на абстракцию, а принять во внимание низкоуровневые типы данных и попытаться представить их представление со стороны движка, то можно сказать, что в JS тип данных Array - это объект, а не массив. О_о (не берём в учёт типизированные массивы)
|
|
|
|