Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   конструкция Array.prototype.slice ... (https://javascript.ru/forum/misc/45296-konstrukciya-array-prototype-slice.html)

skrudjmakdak 22.02.2014 20:08

конструкция 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

Цитата:

Сообщение от skrudjmakdak
ради прикола узнаем что arguments - это массив

неугадал

рони 22.02.2014 20:24

skrudjmakdak,
Цитата:

Несмотря на доступ по индексу и наличие свойства length, arguments не является массивом, т.е не принадлежит типу Array.
http://javascript.ru/arguments

skrudjmakdak 22.02.2014 20:35

ага, т.е. той самой волшебной строкой мы получаем обычный массив..

а вот еще пример, уже мой:
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

Цитата:

Сообщение от skrudjmakdak
var d = Array.prototype.slice(div, 0);

тут ничего незабыли?

Дзен-трансгуманист 22.02.2014 20:46

Цитата:

arguments не является массивом, т.е не принадлежит типу Array
<sarcasm>
иными словами, не просто не Массив, но и вообще даже не массив
продолжая в том же духе, можно сказать, что инстанс Uint32Array тоже не массив, потому что не принадлежит типу Array
:)
железная логика
а я-то дурак всегда думал, что массив это контейнер элементов с поиндексным доступом
теперь будем знать, что массив это то, что принадлежит типу Array
</sarcasm>

рони,
не читайте до обеда советских газет (ц)

рони 22.02.2014 20:50

Дзен-трансгуманист,
а какже тогда запись из советской газеты про
Цитата:

arguments.pop() // ошибка !
и то что ноделист "живой" ?

рони 22.02.2014 20:51

Цитата:

Сообщение от Дзен-трансгуманист
инстанс Uint32Array

про это я совсем незнаю -- можно ссылку

Дзен-трансгуманист 22.02.2014 21:04

рони,
Typed Array Specification
тут тоже нет попов и пушей, и тем не менее :)

melky 22.02.2014 21:07

Цитата:

Сообщение от Дзен-трансгуманист
иными словами, не просто не Массив, но и вообще даже не массив

если не смотреть на абстракцию, а принять во внимание низкоуровневые типы данных и попытаться представить их представление со стороны движка, то можно сказать, что в JS тип данных Array - это объект, а не массив. О_о (не берём в учёт типизированные массивы)


Часовой пояс GMT +3, время: 19:23.