Почему 1 аргумент?

180
07 июля 2018, 04:20

var sum = function(person) {	 
  arguments[0] = 'Аргумент [0]'; 
  arguments[1] = 'Аргумент [1]'; 
  arguments[2] = 'Аргумент [2]'; 
  console.log(arguments[0]); 
  console.log(arguments[1]); 
  console.log(arguments[2]); 
  console.log(person); 
  console.log(arguments.length); 
} 
sum('person');

почему кол-во аргументов выводит 1?

Answer 1

Это псевдомассив, т. е. у него есть числовые ключи и свойство length.
Но всё же это не массив, который следит за своим length, поэтому это свойство проставляется один раз при создании.

Answer 2

Если есть необходимость, работать с псевдо-массивом arguments как с обычны "list array", то можно использовать методы прототипной связи конструктора Array с вызовом в конексте псевдо-массива.

var sum = function(person){	 
/*	 
   Array.prototype.splice.call(arguments,0, 1, 'Аргумент [0]', 'Аргумент [1]', 'Аргумент [2]'); 
*/ 
	Array.prototype.splice.apply(arguments, [0, 1].concat('Аргумент [0]', 'Аргумент [1]', 'Аргумент [2]')); 
/* 
  arguments[0] = 'Аргумент [0]'; 
  arguments[1] = 'Аргумент [1]'; 
  arguments[2] = 'Аргумент [2]'; 
*/ 
  console.log(arguments[0]); 
  console.log(arguments[1]); 
  console.log(arguments[2]); 
  console.log(person); 
  console.log(arguments.length); 
} 
sum('person');

Answer 3

Потому-что arguments - это псевдо-массив, содержащий аргументы функции (зарезервированное слово)

READ ALSO
EventListener ошибка в консоли при запуске кода

EventListener ошибка в консоли при запуске кода

Имеется попап, который на момент запуска кода еще не существует в DOM и добавляется он туда только при определенных действиях пользователя...

172
Обработка редюсеров в Redux

Обработка редюсеров в Redux

У меня есть массив объектов, мне нужно менять active на true в каждом объекте по индексу

154