2017-02-01 46 views
0

我正在写代码中的遥测功能。我正在使用MDN链接中提到的Performance.getEntriesByType()函数 - https://developer.mozilla.org/en-US/docs/Web/API/Performance/getEntriesByType。 按照链接它提到该方法返回PerformanceEntry对象/空列表的列表。 然而,当我调用“的forEach”的方法对window.performance.getEntriesByType(类型)方法的返回值,我收到以下错误Javascript - TypeError:Object [object Object]没有方法'forEach'

TypeError: Object [object Object] has no method 'forEach' 

夫妇疑虑:

  1. 为什么我得到的错误'forEach'有没有办法?
  2. 错误消息中的Object [object Object]暗示了什么?
+1

请编辑您的问题,包括你的实际代码。你使用的是什么浏览器? –

回答

2

这意味着您正试图在没有forEach()方法的对象上调用forEach()方法。 forEach()Array.prototype(意味着所有数组都有此方法)上实现,并且一些浏览器在DOM nodeList对象上实现它。但是,您要么尝试在另一种对象上使用它,要么在不支持它的浏览器中使用它。

performance.getEntriesByType()返回list,这与Array不同,它是forEach()的实现。

The page you referenced,显示如何循环调用window.performance.getEntriesByType()调用的结果列表。

// Use getEntries() to iterate through the each entry 
    var p = performance.getEntries(); 
    for (var i=0; i < p.length; i++) { 
    log("Entry[" + i + "]"); 
    check_PerformanceEntry(p[i]); 
    } 
+0

任何帮助,为什么我看到错误为Object [object Object]?为什么3个对象标识符? – Saint

+1

@Saint对象到字符串的默认转换是“[object Object]”,所以你真的只是看到你有一个错误(“对象”)的对象类型,然后显示它的字符串表示,它显示它也是基础类型(“[object Object]”)。 –

+0

谢谢@Scott,这清除了我的疑惑。 – Saint

0

我个人遇到了Android设备上的一个bug,问题出在一个依赖代码中,所以我无法更改它。我用this polyfill来解决这个问题:

if (window.NodeList && !NodeList.prototype.forEach) { 
    NodeList.prototype.forEach = function (callback, thisArg) { 
     thisArg = thisArg || window; 
     for (var i = 0; i < this.length; i++) { 
      callback.call(thisArg, this[i], i, this); 
     } 
    }; 
} 
相关问题