Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/dart/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何在IE8中测试对象文字_Javascript_Prototype - Fatal编程技术网

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);
}