Javascript 如何在IE8中测试对象文字
目前正在使用:Javascript 如何在IE8中测试对象文字,javascript,prototype,Javascript,Prototype,目前正在使用: function isObjLiteral(_obj) { var _test = _obj; return ( typeof _obj !== 'object' || _obj === null ? false : ( (function () { while (!false) { if ( Object.getPrototypeOf( _test = Object.getPrototy
function isObjLiteral(_obj) {
var _test = _obj;
return ( typeof _obj !== 'object' || _obj === null ?
false : (
(function () {
while (!false) {
if ( Object.getPrototypeOf( _test = Object.getPrototypeOf(_test) ) === null) {
break;
}
}
return Object.getPrototypeOf(_obj) === _test;
})()
)
);
}
测试我们是否使用对象文字。问题是IE8<无法使用getPrototypeOf
,有人知道一个简单的解决方法吗?改进:
还没有测试过它,但现在即使在IE8中,它在大多数情况下也可以工作。顺便说一句,您的isObjLiteral
似乎可以简化为
function isPlainObject(obj) {
if (obj !== Object(obj)) return false;
var proto = Object.getPrototypeOf(obj);
return !!proto && !Object.getPrototypeOf(proto);
}
-谷歌花了2秒钟的时间才完成find@Ian这将是什么样的实现…我看到了,但我只是得到了一个无限循环…也许我不理解你的问题-你真的想区分
{}
(对象文字)和新对象()
(非对象文字)?不,也许有一个更简单的解决方案,我只需要知道传递的值是否是对象文字。如果我有误解,很抱歉,但我认为“typeof obj==='object'”基本上就足够了,就像你所说的那样。您可以为数组添加辅助检查,因为从技术上讲,这些数组是对象:“obj instanceof Array”)
function isPlainObject(obj) {
if (obj !== Object(obj)) return false;
var proto = Object.getPrototypeOf(obj);
return !!proto && !Object.getPrototypeOf(proto);
}