Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/473.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
对象原型toString调用-JavaScript_Javascript - Fatal编程技术网

对象原型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,因此这种确认类型的方法更可靠


这里有一篇关于这个主题的好文章:

这是最好的解释。我不明白被否决的问题有多少。这个答案被否决的原因是什么?一些用户没有明显的理由就通过并否决了所有内容。