对象原型toString调用-JavaScript
我创建了一个函数,如果对象的值是数组,则该函数将删除对象属性+值。下面是它的样子:对象原型toString调用-JavaScript,javascript,Javascript,我创建了一个函数,如果对象的值是数组,则该函数将删除对象属性+值。下面是它的样子: function removeArrayValues(obj) { for(var key in obj){ if( Object.prototype.toString.call(obj[key]) === '[object Array]' ) { delete obj[key]; } } } 请注意这一部分: Object.prototype.toString.call(o
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])
我从一个朋友的解决方案中得到了这个,但是我不清楚它到底在做什么。还有,为什么我们需要将它放在[]
中并称之为[object Array]
,而不仅仅是'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
方法驻留在对象的原型上call
是一个允许您更改另一个函数的上下文的函数。调用[].toString()
时,它将在Array.prototype上运行toString
方法。如果需要Object.prototype.toString
(即[Object Type])的行为,则可以使用该函数并使用数组(而不是对象)作为值调用它
如果您不关心IE8,更好的方法是使用Array.isArray
。例如,在您的函数中:
function removeArrayValues(obj) {
for (var key in obj) {
if (Array.isArray(obj[key])) delete obj[key]
}
}
Object.prototype.toString.call(obj[key])
实际上返回一个字符串[Object Array]
,因此将其与数组
进行比较不会返回匹配
如果检查从
获取的数组,则typeof
会给出false,因此这种确认类型的方法更可靠
这里有一篇关于这个主题的好文章:这是最好的解释。我不明白被否决的问题有多少。这个答案被否决的原因是什么?一些用户没有明显的理由就通过并否决了所有内容。