2013-03-29 4 views
7

Я смущен с объектом аргументов функции Node.js.Функция Аргумент объекта в Node.js отличается от JavaScript JavaScript.

Пусть я следующий код:

function x() { 
    return arguments; 
} 

console.log(x(1, 2, 3)); 

В хромированных инструментов разработчика он возвращается в виде массива:

[1, 2, 3] 

Но я получил другой результат в Node.js:

{ '0': 1, '1': 2, '2': 3 } 

Почему?

ответ

5

arguments - волшебная переменная, которая на самом деле не является массивом. Он ведет себя как массив, но у него нет всех функций, которые имеет массив.

Другие объекты, например, NodeList.

+1

Ok @Frits ван Кампен. Я понял. Я запустил это, чтобы проверить его тип: console.log (Object.prototype.toString.call (x())); Оба возвращают одинаковый результат: [object Arguments] – 2013-03-29 15:10:10

+0

Прохладный, я не знал, что вы могли бы это сделать =) – Halcyon

+0

очень смешные фритты. LoL – 2013-03-29 15:21:37

2

console.log не является частью javascript, а не частью v8. Именно поэтому и chrome, и node.js имеют собственные реализации console.log. У них есть simular apis, но не то же самое. Документация для console.log узла находится здесь: http://nodejs.org/api/stdio.html

6

Вы видите другое представление объекта, который не является массивом в Chrome, ни в узле, ни в javascript вообще.

Если вы хотите массив из него, вы что:

var args = Array.prototype.slice.call(arguments, 0); 
+0

Это спасло меня от работы в узле, где я предположил, что аргументы были массивом. Глупый разработчик. Браузеры предназначены для детей. "intern-runner": { команда: function() { var cmdArgs = ""; var args = Array.prototype.slice.call (аргументы, 0); if (args) { cmdArgs = args.join (""); } return 'node node_modules/intern/bin/intern-runner config = app/intern-config' + cmdArgs; } }, – httpete

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