IE8 的 又一致命bug 导致崩溃 . 不知道是不是我第一个发现?
ie8 支持了新的方法 element.querySelectorAll 方法 支持 css2的 选择器
这功能很好很强大 但却有致命问题 他返回的对象 不是象 document.getElementsByName ByTagName 那样 返回的一个 普通的NodeList对象或
ie8叫 [object HTMLCollection] 对象 而是返回一个 叫 [object staticNodeList] 的对象
问题就出在他身上
我写了一个 通用的 对象转数组的 方法
所以 要判断一下 传入的对象是不是 nodeList 集合对象.
但当传入的对象是 [object HTMLCollection] 对象时.我们 不能 用 obj=='[object HTMLCollection]';来做判断 这个obj 我 唯一 能成功测试的就是 'length' in obj 这样可以不出问题
我测试了下 obj对象似乎没有从 Object.prototype那里继承到 toString方法 所以
我 obj.toString()=='' 会说对象不支持该属性或方法.
如果我 'obj=='[object HTMLCollection]' 直接崩溃 或者 obj.constructor也会崩溃
我们知道 ie6和ie7 一般的 nodeList对象是不具备 constructor 属性的 . 所以
我的逻辑本来是这样 :
if(isNumber(obj.length)&& (obj)== '[object HTMLCollection]' || obj == '[object staticNodeList]' || obj.constructor === undefined))
但是当对象 是 staticNodeList时会崩溃.. 搞的我也跟着彻底崩溃了
我们简单点
for (var o in document.querySelectorAll('*'));
崩溃拉!!!!!