确定某个对象在JavaScript中是否为普通对象的方法

确定某个对象在JavaScript中是否为普通对象的方法,javascript,object,Javascript,Object,我最近偶然发现了这个函数,它确定某个对象是否是纯对象,即JavaScript: function isPlainObject (value){ if (typeof value !== 'object' || value === null) return false; let proto = value; while (Object.getPrototypeOf(proto) !== null) { proto = Object.getPrototypeOf(proto);

我最近偶然发现了这个函数,它确定某个对象是否是纯对象,即JavaScript:

function isPlainObject (value){
  if (typeof value !== 'object' || value === null) return false;

  let proto = value;
  while (Object.getPrototypeOf(proto) !== null) {
    proto = Object.getPrototypeOf(proto);
  }

  return Object.getPrototypeOf(value) === proto;
};
资料来源:

我想知道:

  • 如果下面的方法可以做完全相同的事情
  • 如果是,是否可以认为更有效
  • 否。前者遍历整个原型链,但只有当该链由1个原型组成时才返回true(因此,您的第一个示例有点毫无意义)
  • 是和否。是的,它更有效,不需要循环所有内容来检查原型是
    对象。原型是
    对象。不,它执行不必要的操作
  • 我会这样做:

    const isPlainObj = value => !!value &&
                                Object.getPrototypeOf(value) === Object.prototype;
    
    如果您只想知道
    value
    prototype是
    Object,那么就不必太花哨了。prototype
    在其“Obj”模块下有一个方法,可以检查对象是否实际上是普通对象文本

    参考:

    在其上或通过其获取代码,并按如下所示使用

    // export the methods in the "Obj" module
    var $ = ToolJS.export("Obj");
    
    var myObj = {name: "John Doe"};
    var myArr = [1,2,3]; // note that arrays are of type object but are obviously not plain objects
    var myEl = document.getElementById("elem"); // elements are also objects
    
    $.isObj(myObj); // => true
    $.isObj(myArr); // => false
    $.isObj(myEl); // => false
    
    你可以查看它的完整文档


    在后台,该方法检查项类型是否为null或未定义,而是一个对象,然后检查其构造函数以查看其是否为对象,然后确保其不是数组,最后将其转换为字符串以查看其是否为普通对象。

    object.prototype.toString.call(value)
    返回
    [object-object]
    是普通对象时。
    // export the methods in the "Obj" module
    var $ = ToolJS.export("Obj");
    
    var myObj = {name: "John Doe"};
    var myArr = [1,2,3]; // note that arrays are of type object but are obviously not plain objects
    var myEl = document.getElementById("elem"); // elements are also objects
    
    $.isObj(myObj); // => true
    $.isObj(myArr); // => false
    $.isObj(myEl); // => false