Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/454.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Node.js v5.1.0';参数';不允许我访问嵌套数组属性_Javascript_Node.js_Arguments - Fatal编程技术网

Javascript Node.js v5.1.0';参数';不允许我访问嵌套数组属性

Javascript Node.js v5.1.0';参数';不允许我访问嵌套数组属性,javascript,node.js,arguments,Javascript,Node.js,Arguments,我用两种不同的方式实例化了一个类: _client.setAppAuth(clientId, clientSecret, tokenTtl) _client.setAppAuth({ clientId: clientId, clientSecret: clientSecret, tokenTtl: tokenTtl }) 我已经定义了一个setter/getter和一个helper方法: Object.defineProperty(MyClient.prototype,

我用两种不同的方式实例化了一个类:

_client.setAppAuth(clientId, clientSecret, tokenTtl)
_client.setAppAuth({
    clientId: clientId,
    clientSecret: clientSecret,
    tokenTtl: tokenTtl
})
我已经定义了一个setter/getter和一个helper方法:

Object.defineProperty(MyClient.prototype, "appAuth", {
    get: function() {
        return appAuth
    },
    set: function(opts) {
        console.log(arguments)
    }
})

MyClient.prototype.setAppAuth = function(opts) {
    this.appAuth = typeof opts === 'object' ? opts : arguments
}
我正在尝试使用从该实例化检索参数

console.log()
中,我得到以下信息:

{ '0': 
   { '0': 'YXA6GXSAACS2EeOYd20aP4G6Lw',
     '1': 'YXA66BeEvgNpJBwc4PAbvZZGTVS_SSw',
     '2': 3600 } }

{ '0': 
   { clientId: 'YXA6GXSAACS2EeOYd20aP4G6Lw',
     clientSecret: 'YXA66BeEvgNpJBwc4PAbvZZGTVS_SSw',
     tokenTtl: 3600 } }
这看起来正符合我的期望。但奇怪的是:

console.log(arguments[0])
给我这个:

{ '0': 'YXA6GXSAACS2EeOYd20aP4G6Lw',
  '1': 'YXA66BeEvgNpJBwc4PAbvZZGTVS_SSw',
  '2': 3600 }
{ clientId: 'YXA6GXSAACS2EeOYd20aP4G6Lw',
  clientSecret: 'YXA66BeEvgNpJBwc4PAbvZZGTVS_SSw',
  tokenTtl: 3600 }
但当我这样做的时候:

console.log(arguments[0][0]) // or arguments[0]["0"]
我得到:

TypeError: Cannot read property '0' of null
我意识到
arguments
实际上不是数组(虽然它有一个length属性),难道我不应该像访问对象一样访问内部属性值吗<代码>参数类型[0]返回
对象
?有什么好处?这是一个节点实现错误,还是我做得不对?如何从
参数[0]
中获取对象值


更新

像这样尝试/捕捉:

try {
    console.log(opts, Object.keys(opts))
} catch (e) {

}
注销:

{ '0': 'YXA6GXSAACS2EeOYd20aP4G6Lw',
  '1': 'YXA66BeEvgNpJBwc4PAbvZZGTVS_SSw',
  '2': 3600 } [ '0', '1', '2' ]
{ clientId: 'YXA6GXSAACS2EeOYd20aP4G6Lw',
  clientSecret: 'YXA66BeEvgNpJBwc4PAbvZZGTVS_SSw',
  tokenTtl: 3600 } [ 'clientId', 'clientSecret', 'tokenTtl' ]

很明显,它似乎在某个地方试图通过传递null参数来执行setter函数?但是当记录
console.log(e)
e.stack
时,没有输出。
catch
块从未到达?很明显,这里还发生了其他事情-将剥离整个库并尝试使用SSCCE进行复制。

您使用了两次
参数
,这毫无意义。在setter中,您应该只使用
opts
,因为只有一个参数。在setter中,您有
opts===arguments[0]
。这是您从
setAppAuth
传入的值,即
==typeof opts===object'?选项:参数
。它要么有
.clientId
(etc)属性(当它是
obj
)要么有索引(当它是
参数时)。哦,等等,我现在看到你的问题了。当您尝试使用
obj[0]
而不是
arguments[0][0]
时,是否也会出现错误?“
typeof arguments[0]
返回
object
?给出了什么?”-是的,
typeof null==“object”
(出于一些奇怪的历史原因)。无论如何,您在任何地方都没有执行
\u client.setAppAuth(null)
,是吗?或者,
clientId
有时是空的吗?所以做了一些检查,我想你的意思是
opts[0]
不是
obj[0]
。使用
选项[0]
时出现相同错误。否,
clientId
从不为空-当我注销plain
opts
时,我得到的有效负载与最终的console.log语句相同(与
参数[0]
相同)。下面是对绘图的进一步加厚:记录
Object.keys(opts)
使我
无法将未定义或null转换为Object
…您使用
参数两次,这毫无意义。在setter中,您应该只使用
opts
,因为只有一个参数。在setter中,您有
opts===arguments[0]
。这是您从
setAppAuth
传入的值,即
==typeof opts===object'?选项:参数
。它要么有
.clientId
(etc)属性(当它是
obj
)要么有索引(当它是
参数时)。哦,等等,我现在看到你的问题了。当您尝试使用
obj[0]
而不是
arguments[0][0]
时,是否也会出现错误?“
typeof arguments[0]
返回
object
?给出了什么?”-是的,
typeof null==“object”
(出于一些奇怪的历史原因)。无论如何,您在任何地方都没有执行
\u client.setAppAuth(null)
,是吗?或者,
clientId
有时是空的吗?所以做了一些检查,我想你的意思是
opts[0]
不是
obj[0]
。使用
选项[0]
时出现相同错误。否,
clientId
从不为空-当我注销plain
opts
时,我得到的有效负载与最终的console.log语句相同(与
参数[0]
相同)。下面是对绘图的进一步加厚:记录
Object.keys(opts)
使我
无法将未定义或null转换为Object
。。。