gpt4 book ai didi

javascript - 对象原型(prototype) toString 调用 - JavaScript

转载 作者:行者123 更新时间:2023-11-30 15:07:54 25 4
gpt4 key购买 nike

我创建了一个函数,如果它的值是一个数组,它会删除一个对象属性 + 值。这是它的样子:

function removeArrayValues(obj) {
for(var key in obj){
if( Object.prototype.toString.call(obj[key]) === '[object Array]' ) {
delete obj[key];
}
}
}

注意这部分:

Object.prototype.toString.call(obj[key])

我从一个 friend 的解决方案中得到了这个,但是我不清楚它到底在做什么。此外,为什么我们需要将它放在 [] 中并称之为 [object Array],而不仅仅是 'Array'

还有比这个解决方案更好的方法吗???

我是 JavaScript 的绝对初学者。

任何人都可以用外行的术语教我或与我讨论这段代码的作用吗?

有人吗?

最佳答案

在 javascript 中,每个内置类型都有自己的 toString 方法。对于一个数组,这将返回所有用逗号连接的数组值,例如:

const arr = [1,2,3,4,5]
arr.toString() // returns "1,2,3,4,5"

Object(对象的内置类型)的toString 函数恰好以[object Type] 格式的字符串返回对象的类型。例如:

const arr = [1,2,3,4,5]
Object.prototype.toString.call(arr) // returns "[object Array]"

const str = 'test'
str.toString() // returns 'test'
Object.prototype.toString.call(str) // returns "[object String]"

所以如果你想知道它是否是一个数组,这是一种找出方法。 toString 方法驻留在 Object 的原型(prototype)上。 call 是一个函数,可以让您更改另一个函数的上下文。当您调用 [].toString() 时,它将在 Array.prototype 上运行 toString 方法。如果您想要 Object.prototype.toString 的行为(即 [object Type]),那么您可以使用该函数并使用数组而不是对象作为值来调用它。

如果您不关心 IE 8,更好的方法是使用 Array.isArray。例如,在您的函数中:

function removeArrayValues(obj) {
for (var key in obj) {
if (Array.isArray(obj[key])) delete obj[key]
}
}

关于javascript - 对象原型(prototype) toString 调用 - JavaScript,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45489249/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com