2013-03-29 17 views
7

Node.js関数の引数オブ​​ジェクトと混同しています。それは配列として返すChromeデベロッパーツールでNode.jsの関数引数はChromeの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バンCampenを。わかった。私はタイプをチェックするためにこれを実行します: console.log(Object.prototype.toString.call(x))); どちらも同じ結果を返します: [オブジェクト引数] –

+0

クール、私はあなたがそれを行うことはできませんでした=) – Halcyon

+0

非常に面白いフリット。 LoL –

2

console.logはjavascriptの一部ではなく、v8の一部ではありません。これは、chromeとnode.jの両方にconsole.logの実装がある理由です。彼らはsimular apisを持っていますが、同じではありません。ノードのconsole.logのドキュメントは次のとおりです。http://nodejs.org/api/stdio.html

6

オブジェクトは、ノードとJavaScriptのどちらにも配置されていません。

あなたはそれの外に配列をしたい場合は、それを行う:

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

これはノードでの作業を保存しました。ここでは引数が配列であると仮定していました。愚かなjsの開発者。ブラウザは子供のためのものです。 "intern-runner":{ コマンド:function(){ var cmdArgs = ""; var args = Array.prototype.slice.call(arguments、0); if(args){ cmdArgs = args.join( ""); } 戻り値 'node node_modules/intern/bin/intern-runner config = app/intern-config' + cmdArgs; } } – httpete

関連する問題