我正在使用基于 for(.. in ..) 和 hasOwnProperty 的递归函数来克隆对象,这在 IE 和 FF 中运行良好......但在 Chrome 中运行良好。
当使用 for(... in ...) 迭代对象的成员时,如果对象是 DOM 对象,Firefox 和 Chrome 会为 hasOwnProperty 提供不同的结果。
在 Chrome 控制台与 Firebug(FF) 中的控制台中键入以下内容会产生不同的结果:
var t = document.createElement("table");
var tr = t.insertRow(-1);
for(var p in tr) if(tr.hasOwnProperty(p)) console.log(p);
火狐输出:
构造函数
addEventListener
铬输出:
clientLeft
scrollHeight
firstElementChild
offsetParent
ch
offsetWidth
isContentEditable
hidden
previousElementSibling
parentElement
localName
children
ownerDocument
nodeValue
lastElementChild
rowIndex
offsetLeft
tagName
className
prefix
innerHTML
previousSibling
namespaceURI
id
childElementCount
innerText
scrollLeft
clientHeight
align
textContent
nextSibling
scrollWidth
offsetHeight
chOff
clientWidth
nodeName
style
lang
scrollTop
offsetTop
childNodes
baseURI
nextElementSibling
vAlign
sectionRowIndex
classList
title
firstChild
属性
数据集
outerText
单元
parentNode
clientTop
tabIndex
contentEditable
outerHTML
dir
lastChild
bgColor
nodeType
spellcheck
draggable
对于 hasOwnProeperty 标记为 true 的所有额外属性都导致我的代码中出现“无限/足够崩溃”的问题。有没有办法确定一个属性是否是一个内置的 DOM 对象属性?或者其他一些解决方案..