JavaScript 中判断某物是否为普通对象的方法

2023-12-26

我最近偶然发现了这个函数,它可以确定某个东西是否是普通对象(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;
};

Source: https://github.com/redux-utilities/redux-actions/blob/master/src/utils/isPlainObject.js https://github.com/redux-utilities/redux-actions/blob/master/src/utils/isPlainObject.js

我想知道:

  1. 下面的方法是否会做完全相同的事情?
  2. 如果是这样,是否可以认为更有效?
function isPlainObj(value){
  if (typeof value !== 'object' || value === null) return false;
  let obj = {};
  return Object.getPrototypeOf(value) === Object.getPrototypeOf(obj)
}

检查一个值是否是一个普通对象:

/*
 isPlainObject({}) // true
 isPlainObject() // false
 isPlainObject(null) // false
 isPlainObject(true) // false
 isPlainObject('1') // false
 isPlainObject([]) // false
 isPlainObject(new Function()) // false
 isPlainObject(new Date()) // false
 */
const isPlainObject = value => value?.constructor === Object;

排除空值、标量、数组、函数以及除 Object 之外的任何扩展类型。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

JavaScript 中判断某物是否为普通对象的方法 的相关文章

  • 正则表达式中的“g”标志是什么意思?

    的含义是什么g正则表达式中的标志 之间有什么区别 g and g用于全局搜索 这意味着它将匹配所有出现的情况 通常你还会看到i这意味着忽略大小写 参考 全局 JavaScript MDN https developer mozilla or
  • 使用 获取用于 javascript 的 RSA 密钥?

    我的 Web 项目需要一个 RSA 密钥对 虽然有一些库 但我认为依靠浏览器 为了安全性和速度 为我生成密钥是个好主意 是否可以使用注册机或其他浏览器 API 来执行此操作 我不知道如何从注册机获取密钥 它们似乎是在提交时生成的 但我不想将
  • Google reCaptcha 永远加载

    我在我的网站上使用 Google 的 reCaptcha 2 0 它曾经运行良好 但自从我向公众开放我的网站并获得了更多用户后 recaptcha 不再适用于大多数用户 它加载得很好 但一旦用户单击 我不是机器人 复选框 它会永远加载并且从
  • 无法填充名为“status”的数组

    我正在尝试做一些非常简单的事情 在 Javascript 中初始化一个数组 而且它在 Google Chrome 中不起作用 这是代码 status for i 0 i lt 8 i status i false alert status
  • 如果浏览器在 asp .net 中关闭,请从浏览器中注销?

    我的要求有点复杂 用户正在使用 Web 浏览器访问数据库 而在访问数据库时 如果用户关闭活动页面而不是注销会话 该会话需要自动注销 有人可以指导我如何做这个吗 我在母版页中使用了jquery onbeforeunload 我收到消息离开页面
  • Streamjs和linqjs有什么关系

    读完SICP后 我最近发现streamjs https github com dionyziz stream js 开发商参考linqjs http linqjs codeplex com 作为具有不同语法的替代实现 但我无法建立连接 St
  • 如何为 HTML5 音频元素制作加载栏?

    我正在尝试为 HTML5 音频元素制作一个加载栏 显示加载 缓冲的百分比 对于视频标签 可以使用以下方法进行计算 video buffered end 0 video duration 但我无法让它与音频标签一起使用 它只是返回一个固定值
  • React/Redux bundle.js 太大

    我有一个小型的 React 项目 Webpack生成的bundle js大小为6 3Mb 如何将大小减小到 github webpack config js module exports devtool inline source map
  • 如何在提交表单之前删除自动数字格式?

    我正在使用 jQuery 插件自动数字 http www decorplanit com plugin 但是当我提交表单时 我无法删除之前字段上的格式POST 我尝试使用 input autonumeric destroy 和其他方法 但它
  • 光滑的旋转木马不工作

    我一直在尝试简单地实现 Slick Carousel 的工作 我已按照 Git 页面上的说明进行操作 https github com kenwheeler slick https github com kenwheeler slick 这
  • 从网站存储数据的最简单方法(在服务器端)

    我有一个非常简单的网站 实际上是单页 有一个输入字段和一个按钮 我需要将用户提交的数据存储在服务器端的某个位置 完美的方法可能是简单的文本文件 并在每次单击按钮后附加新行 日志文件也可以 据我了解 JavaScript 本身是不可能的 我在
  • 哪些网络浏览器不支持 Javascript?以及如何识别客户端使用的是哪个浏览器?

    是否有不支持 javascript 的网络浏览器 以及如何确定客户端是否正在使用这些浏览器之一 或者客户端禁用了javascript 是否有不支持 javascript 的网络浏览器 当然 Lynx http en wikipedia or
  • 如何检查元素的内容是否为空,如果是,则在 jquery 中删除该元素

    我目前正在尝试选择某个 div 内没有内容的任何 h2 元素并将其删除 这是我的 html 代码 div class skipToContainer h2 class vidSkipTo Hello h2 h2 class vidSkipT
  • JavaScript:预期的赋值或函数调用,却看到了一个表达式

    我正在使用 JSHint 来确保我的 JavaScript 是 严格的 但我收到以下错误 预期是赋值或函数调用 但看到的是表达式 关于以下代码 var str A B C D var data var strArr str split fo
  • 无法在渲染器进程中使用 Node.js API

    无法在 Electron 中使用任何与 Electron 或节点相关的操作 未定义获取错误过程 我检查了他们指导添加节点支持的各个地方 但这已经完成了 所以卡在这里 我的主要应用程序代码是 const electron require el
  • 带时间戳的 Firestore 查询

    如果它是文本字段 我可以使用 where 条件获取数据 但是当我尝试对时间戳字段和日期执行相同操作时 事情不起作用 这是我的代码 home ts firebase firestore collection cities where time
  • 父指令属性更改时子指令不会更新

    这是对这两个问题的后续 在父指令和子指令之间传递参数 https stackoverflow com questions 42814530 pass argument between parent and child directives
  • Javascript:更改输入值时设置光标位置

    当您输入公式时 我试图在我的应用程序中重现类似于 Microsoft Excel Google Sheets 的用户体验 并且您可以使用不同的公式和变量来自动完成下拉菜单 为此 在验证自动完成功能后 我希望能够控制光标的位置 例如 如果我输
  • 如何修复nodejs Express服务器中的“MulterError:意外字段”?

    我正在设置一个服务器来从客户端上传 zip 文件 服务器运行express和multer来执行此操作 上传文件时 服务器抛出 MulterError 意外字段 错误 我无法弄清楚是什么导致了它 我尝试过使用 png 图像 效果很好 但对于
  • 如何从配置加载套接字 io 事件监听器? [复制]

    这个问题在这里已经有答案了 我有使用套接字io 的nodejs 应用程序 我将存储在 config routes js 中的所有事件侦听器 module exports routes auth login controller auth a

随机推荐

  • ggplot geom_point 忽略未知的美学:文本问题?

    我正在生成 SVG 分面图 我希望将鼠标悬停在点上时出现工具提示 我正在使用一个textggplot geom point 中的美学来制作工具提示文本 产生警告 Warning Ignoring unknown aesthetics tex
  • ActiveRecord 和 Mogoid::Document :关联

    我有一个基于 ActiveRecord 的模型 另一个基于 Mogoid Document 的模型 可以联合起来吗 例如 2 个型号 class User lt ActiveRecord Base has one avatar depend
  • 如何序列化委托

    让我们看一个网格填充的例子 We have Column班级 它有一个代表设置单元格格式 这需要一些Data并将其转换为string 设置单元格格式委托在设计时是未知的 它可能由插件设置 public class ColumnFormatt
  • Java 中的目录监听器

    我有一个应用程序 我想在其中监听对特定目录所做的任何更改 一旦该目录中添加 删除或更新了任何文件 应用程序应该立即对我进行 ping 操作 从 Java 1 7 开始你可以使用手表服务API http docs oracle com jav
  • 从 Flask 视图返回 JSON 响应

    我有一个函数可以使用 Pandas 分析 CSV 文件并生成包含摘要信息的字典 我想将结果作为 Flask 视图的响应返回 如何返回 JSON 响应 app route summary def summary d make summary
  • 以编程方式从 XSD 创建 XML 文件

    我有一个 XSD 文件 我想在运行时基于 XSD 创建一个 XML 文件 我的问题基本上与this one https stackoverflow com questions 307616 xml instance generation f
  • ASP.NET 自动完成下拉列表

    是否有用于 asp net 自动完成 DropDownList 的控件或 Jquery 插件 如果是 请在此处链接示例 我不想使用asp net ajax控制工具包 我不知道这是否是您要找的内容 但这里有一个类似 Facebook 的不错的
  • 在图像 {graphics} 中添加颜色图例

    在这个例子中 我有一个带有颜色的图像 我想知道我们是否可以添加颜色图例 例如 点与z in 8 10 颜色有红色等 x runif 500 0 5 y runif 500 0 5 z floor runif 500 1 10 xyz dat
  • 未找到 AWS CodeDeploy 命令

    尝试部署 Node js 应用程序时出现错误npm command not found in my post install sh安装后脚本 最奇怪的是我运行的 BeforeInstall 脚本npm install g pm2它工作得很好
  • 在 NTFS 中搜索文件

    我们有一个相当大的磁盘阵列 上面大约有 2 3 百万个 XML 文件 磁盘采用 NTFS 格式 我们想使用通配符搜索文件系统 因此 像 SomePartOfTheFilename 这样的内容将是典型的搜索查询 我们正在使用 Net 并且发现
  • React-选择清除值,同时保留过滤器

    我正在开发一个权限系统 让用户控制谁可以访问 评论 编辑资源 就像您在 Google 云端硬盘上找到的资源一样 我正在使用 React Select multi 让资源所有者选择他想要授予资源访问权限的用户 当我单击反应选择显示的选项时 我
  • Android 中的隐式意图与显式意图(startActivity(intent) 崩溃)

    我是这个世界的新人 我在使用 startActivity intent 时遇到问题 这是清单
  • 按下时更改按钮主题

    我试图在按下按钮时更改按钮的数据主题 我在按钮的 onClick 处理程序中调用此 JavaScript 函数 function changeNextButtonColor var nextButton document getElemen
  • 在另一个类中使用 JSONArray?

    我有一个微调器 可以在下拉列表中加载客户的姓名 微调器从 JSON 数组获取字符串 我还有一些文本视图 当旋转器选择更改时 应加载所选客户的姓名 地址 电话号码 但是 JSONArray 在另一个类中使用 我如何在另一个类中使用 JSONA
  • 在 Visual Studio 2015 中显示单元测试的描述属性

    有谁知道如何在 Visual Studio 2015 测试运行期间显示描述属性 例如给出这个测试 TestMethod TestCategory With Fakes Description Posting a blog entry wit
  • TIME-WAIT刺杀和SO_REUSEADDR有什么区别

    我正在阅读有关使用 SO LINGER 套接字选项通过将逗留时间设置为零来有意 暗杀 时间等待状态的内容 该书的作者接着说我们永远不应该这样做 并且一般来说我们永远不应该干扰时间等待状态 然后他立即建议使用 SO REUSEADDR 选项来
  • 改造通用服务接口

    我正在为 Retrofit 创建一个通用 API 层 这是我的服务类别 public interface ApiService POST api authenticate Call
  • Firefox 上奇怪的蓝色边框

    请看一下这段代码 http www jsfiddle net tt13 5CxPr 21 http www jsfiddle net tt13 5CxPr 21 On Firefox it shows strange blue border
  • 在特定年份 Pandas 之后删除行

    我的数据框中有一列 其中包含以下格式的年份 2018 19 2017 18 年份是对象数据类型 我想将此列的类型更改为日期时间 然后删除 1979 80 之前的所有行 但是 我尝试这样做 但出现了格式错误 这样做的正确或更好的方法是什么 B
  • JavaScript 中判断某物是否为普通对象的方法

    我最近偶然发现了这个函数 它可以确定某个东西是否是普通对象 JavaScript function isPlainObject value if typeof value object value null return false let