0

我需要区分对象上的“纯”JavaScript 属性和像innerHTMLor之类的本机属性style

在 Safari 中,我可以使用Object.getOwnPropertyDescriptor()并检查该configurable属性(对于特殊属性为 false),但是不幸的是,这在 Chrome 或 Firefox 上没有相同的结果(返回属性是可配置的)。

在不同的浏览器上尝试这个小提琴以查看问题。

是否有可靠的方法来确定该财产是否为特殊的内部财产?

更新

我注意到,undefined如果您尝试获取本机属性的属性描述符,Firefox 实际上会返回,因此这可能会正常工作。剩下的就是 Chrome,不幸的是它返回了一个看起来与普通属性完全一样的属性描述符。

例如,这是innerHTMLChrome 中的描述符:

{"value":"","writable":true,"enumerable":true,"configurable":true}

...这里是一个名为“test”的空字符串属性:

{"value":"","writable":true,"enumerable":true,"configurable":true}

完全相同的。:(

4

1 回答 1

2

您必须检查该属性是否在相关 DOM 元素的新创建实例上定义:

'innerHTML' in (document.createElement('div')); //yes

测试它的函数可能如下所示:

var test = function (elem, prop) {
    return prop in (typeof elem === 'string' ? document.createElement(elem) : elem)
}

console.log( test( 'div', 'innerHTML') );
console.log( test( document.getElementsByTagName('body')[0], 'innerHTML') );
console.log( test( document.getElementsByTagName('body')[0], 'monkey') );​
于 2012-09-25T22:18:47.103 回答