我在ie8上使用angular-1.2.1.js并得到错误:
对象不支持属性或方法&has; hasOwnProperty' (在角度ForEach方法内)
function forEach(obj, iterator, context) {
var key;
if (obj) {
if (isFunction(obj)){
for (key in obj) {
if (key != 'prototype' && key != 'length' && key != 'name' && obj.hasOwnProperty(key)) {
iterator.call(context, obj[key], key);
}
}
} else if ...
根据这个 stackoverflow post,hasOwnProperty在ie8中不起作用(至少不在窗口对象上)
我不确定事情是否表现得很奇怪,因为我在Windows 8上使用ie8模式,但是当我使用时,hasOwnProperty正常工作
var a = {b:'c'}
a.hasOwnProperty('b') //true
为什么ie8会抛出错误,我该如何解决? 感谢
答案 0 :(得分:0)
使用地图转换受保护的声明:
/* Check for existence */
if (key != 'prototype' && key != 'length' && key != 'name' && obj.hasOwnProperty(key))
{
iterator.call(context, obj[key], key);
}
到调度表:
/* Map browser alias to stringified logic */
var conditional = {"ie8":
"key != 'prototype' && key != 'length' && key != 'name' && Object.prototype.hasOwnProperty.call(key, {})",
"w3c":
"key != 'prototype' && key != 'length' && key != 'name' && obj.hasOwnProperty(key)"
};
选择功能检查:
/* Ternary mapping of browser to logic */
var browser = ("onpropertychange" in document) === true && (!!window.XDomainRequest) === true && (!!window.innerWidth) === false ? "ie8" : "w3c";
/* Evaluate valid result and pass to specified function */
if (eval(conditional[browser]) )
{
iterator.call(context, obj[key], key);
}
<强>参考强>
答案 1 :(得分:0)
我也遇到了这个错误&amp;在angular.js Github Source上发现了这个编辑来解决这个问题:
if (obj) {
if (isFunction(obj)){
for (key in obj) {
//- if (key != 'prototype' && key != 'length' && key != 'name' && obj.hasOwnProperty(key)) {
//+ // This uglyness around hasOwnProperty is for IE8 to work properly (hasOwnProperty doesn't exist)
/*+*/ if (key != 'prototype' && key != 'length' && key != 'name' && (obj.hasOwnProperty && obj.hasOwnProperty(key) || Object.prototype.hasOwnProperty.call(obj, key))) {
iterator.call(context, obj[key], key);
}
}
还有一个编辑器可以让console.log在IE8上运行 https://github.com/pjparra/angular.js/commit/bcbf9409f10f5988f6946a7b0381eee5e6518989
来源:https://github.com/pjparra/angular.js/commit/8c2ed24412620d68a760cfab70e4dc27a49b9e91