我创建了一个删除对象属性+值(如果它的值是一个数组)的函数。看起来是这样的:
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])
我是从朋友的解决方案中得到的,但是我不清楚它的实际作用。另外,为什么我们不仅需要将其放置在
'Array'
中,并将其命名为[]
,而不仅仅是[object Array]
。除了此解决方案之外,还有其他更好的方法吗?
我绝对是JavaScript的初学者。
谁能用外行的术语教我或与我讨论此代码的作用?
任何人?
最佳答案
在javascript中,每个内置类型都有其自己的toString
方法。对于数组,将返回所有用逗号连接的数组值,例如:
const arr = [1,2,3,4,5]
arr.toString() // returns "1,2,3,4,5"
对象的
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的原型上。 call
是一个允许您更改另一个功能的上下文的功能。当您调用[].toString()
时,它将在Array.prototype上运行toString
方法。如果要使用Object.prototype.toString
的行为(即[对象类型]),则可以使用该函数,并使用数组作为值而不是对象来调用它。如果您不关心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/