问题描述
我正在学习JavaScript,所以请原谅我在表达问题时的任何错误。
let nan={
n:3,j:4
};
let nag = Object.keys(nan)
> nag
(2) ["n","j"]0: "n"1: "j"length: 2__proto__: Array(0)
> typeof nag
"object"
为什么nag
是对象而不是数组?这在您要访问时会有所不同,您将无法使用点符号访问,我认为在这种情况下我们需要用方括号
解决方法
在Javascript中,所有不是原始的东西(数字,bigints,字符串,符号)都是对象。这包括数组。对象也具有方括号符号来查找键,而点符号只是查找字符串键的简写:
const a = {
foo: "bar"
};
a.foo // "bar"
a["foo"] // "bar"
,
这是因为内部javascript引擎将数组存储为对象。因此,当您请求一个typeof
数组时,它返回一个object
,因为它就是这个数组。本质上,在JavaScript中,Array
是对本地object
(indexed collection
对象)的抽象。
如果您想知道变量是否是Array
而不是object
,则应使用Array.isArray(nag)
。这将返回boolean
。
您可以在此处查找文档:
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/isArray
或者如果您有心情,请在以下位置查看typeof
规格:
https://www.ecma-international.org/ecma-262/#sec-typeof-operator
提示:使用JS时,如有疑问,请查找规格。这可能是消除混乱的最佳地方