给出以下代码段:
const myArray = ["foo", "bar", "baz"];
myArray.someProperty = "foobar";
console.log(myArray)
在Safari中,它将仅显示以下内容:
["foo", "bar", "baz"] (3)
在其他浏览器(例如Chrome和Firefox)中,它将显示someProperty
属性以及length
之类的本机属性:
Array(3)
0: "foo"
1: "bar"
2: "baz"
someProperty: "foobar"
length: 3
值得一提的是,console.dir
,console.table
或console.log(JSON.stringify(myArray))
之类的内容无法显示这些属性。
在Safari中是否有针对此限制的解决方法?显然我可以做console.log(myArray.someProperty)
,但是我的主要目标是检查该数组具有哪些属性(我不是创建数组的人,而是由JS库创建的)。这些属性对我来说是未知的。
答案 0 :(得分:8)
您需要先将其转换为对象
console.log(Object.assign({}, myArray))
它将显示您所有的数组属性
答案 1 :(得分:1)
基于accepted answer,我什至可以剥离数字键(它们是常见的数组内容),并且仅记录数组的属性(如果有):
const myArray = ["foo", "bar", "baz"];
myArray.someProperty = "foobar";
myArray.someOtherProperty = "barbaz";
logArrayProperties(myArray)
function logArrayProperties(arr) {
Object.entries(Object.assign({}, arr)).forEach(row => {
if (isNaN(row[0])) console.log(row[0] + ": " + row[1])
});
};