nodejs`parameters`是对象,但在浏览器中,它是一个`array`

Bil*_*oon 1 javascript browser google-chrome node.js

当我arguments从nodejs中调用函数内部时...

echo '!function(){ console.log(arguments) }(1,2,3)' | node
Run Code Online (Sandbox Code Playgroud)

...它输出一个对象......

{ '0': 1, '1': 2, '2': 3 }
Run Code Online (Sandbox Code Playgroud)

...但在谷歌Chrome ...

!function(){ console.log(arguments) }(1,2,3)
Run Code Online (Sandbox Code Playgroud)

......输出......

[1, 2, 3]
Run Code Online (Sandbox Code Playgroud)

为什么不一致?还有哪些其他js环境有这种不同的行为?我可以使用arguments吗?在使用它之前,如何确保它始终是一个数组?

six*_*man 6

控制台输出没有规则.输出不代表任何与语言标准有关的内容.

如果您创建一个从JS程序中记录值的程序,您可以随意显示这些值.

arguments两个地方的对象都是一样的.只有它的显示方式不同.

在使用它之前,如何确保它始终是一个数组?

它永远不是一个阵列.它总是一个类似于数组的对象.在这两种情况下,它都显示对象成员的值0,12.只需使用不同的显示语法即可.

在Chrome中,尝试创建如下对象:

var my_obj = {
    "0": 1,
    "2": 3,
    "1": 2,
    length: 3,
    splice: function(){},
};
Run Code Online (Sandbox Code Playgroud)

并将其记录在控制台中.它可能看起来像一个数组文字,虽然它显然不是.