此方法是object.keys返回数组还是将其保留为对象

问题描述

我正在学习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是对本地objectindexed 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时,如有疑问,请查找规格。这可能是消除混乱的最佳地方