JavaScript:是否定义了成员?

2024-02-17

在我看来,有四种不同的方法可以确定给定的对象(例如foo)具有给定的属性(例如bar)定义:

  1. if (foo.hasOwnProperty(bar)) {
  2. if ('bar' in foo) {
  3. if (typeof foo.bar !== 'undefined') {
  4. if (foo.bar === undefined) {

确定是否存在名为“的属性bar“在对象中foo,这三个陈述都等价吗?是否有任何我不知道的微妙语义使这三个陈述中的任何一个变得不同?


不,他们完全不同。例子:

foo = {bar: undefined};
Object.prototype.baz = undefined;
Object.prototype.bing = "hello";

Then:

(typeof foo.bar != "undefined")  === false
('bar' in foo)                   === true
(foo.hasOwnProperty('bar'))      === true


(typeof foo.baz != "undefined")  === false
('baz' in foo)                   === true
(foo.hasOwnProperty('baz'))      === false


(typeof foo.bing != "undefined") === true
('bing' in foo)                  === true
(foo.hasOwnProperty('bing'))     === false

从逻辑上看:

  • foo.hasOwnProperty('bar')暗示'bar' in foo
  • typeof foo.bar != "undefined"暗示'bar' in foo
  • 但这些是你能得出的唯一推论;正如上述反例所示,没有其他含义是普遍正确的。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

JavaScript:是否定义了成员? 的相关文章

随机推荐

  • 我正在寻找一个使用 MS Visual C++ Express 的 C++ 简单套接字接口

    C 中是否有一个简单的套接字接口可以与 MS Visual Studio Express Edition 一起使用 我知道有 WinSock 库 我想我正在寻找一个更易于使用的包装器 我认为 java net 库足够简单 但是 我必须使用
  • Apache 2.4 - 删除 |删除|卸载

    我在网上搜索了很长一段时间 但找不到如何完全地删除阿帕奇 2 4 Using Windows 7的c apache24 我已经尝试了所有命令 但没有任何效果 httpd k shutdown httpd k stop httpd k uni
  • 无法找到用于设置首选项 Eclipse 的 Android SDK 位置

    为了开始 Android 开发 我安装了 JDK 7 下载并安装 EclipseE 在 Windows 7 上驱动 然后按照步骤进行 使用Eclipse安装Android ADT 到目前为止一切都很好 但在尝试设置首选项时它不接受任何文件夹
  • 具有绝对位置的引导工具提示

    当使用 Bootstrap 工具提示绝对定位元素时 我遇到了奇怪的问题 工具提示未根据父元素正确呈现 请参阅小提琴 http jsfiddle net QsYPv 152 1 当父元素没有绝对定位时 一切都工作正常 有什么想法如何解决这个问
  • Stripe - 付款意图(3d 安全问题)

    我确实在我的网站上实现了付款意图 现在与此测试卡完美配合4242 4242 4242 4242 但对于其他需要 3d 安全方法的卡 我采取此错误 Invalid PaymentIntent status 我使用的代码与存在的标准代码相同St
  • WCF 的开源替代品 [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • Java 中是否有更优雅的处理列表的方法? (Python VS Java)

    我确实喜欢在 Python 中处理列表的方式 它使任何递归解决方案看起来简单干净 例如 在 Python 中获取列表中元素的所有排列的典型问题如下所示 def permutation recursion numbers sol if not
  • 带有 @FocusState 和焦点更改处理的 SwiftUI 列表

    我想用一个List FocusState跟踪焦点 以及 onChanged of focus 确保当前聚焦的字段可见ScrollViewReader 问题是 当一切都设置在一起时List在滚动过程中不断重建 使得滚动不那么平滑 我发现Lis
  • 如何在 Kotlin 中从枚举创建编译时常量?

    我有一个注释需要defaultValue为编译时常数 我拿defaultValue from enum below enum class RaceType MARATHON SPRINT companion object fun apply
  • 鼠标悬停时反应改变反应图标颜色

    当我用鼠标悬停在反应图标上时 我想更改反应图标的颜色 使用下面给出的代码 只有当鼠标悬停在图标的线条上时 图标才会改变颜色 例如 对于邮件图标 只有当光标悬停在图标的线条上而不是空白处时 颜色才会改变 如果我将鼠标悬停在图标的任何部分上 如
  • 接口“递归”和引用计数

    我的接口有一个小问题 这是伪代码 type Interface1 interface end Interface2 interface end TParentClass class TInterfacedObject Interface1
  • Discord.NET 将消息发送到一台特定服务器中的一个特定通道

    所以我试图向特定频道发送消息 但我一直在寻找并发现我看不到任何可以做到这一点的方法 我可能做错了什么 或者我在错误的区域寻找 我在谷歌上查找过 但找不到答案 这是我试图找到它时的代码 discord GetGuild serverid Ge
  • 如何将图像设置为图表轴或沿图表轴设置?

    我正在尝试使用彩色光谱带作为图表的轴 这个想法是将图像上的颜色与其沿底部 x 轴相关的波长相匹配 条带需要更改大小以匹配图表区域的变化 并扩展和收缩部分以匹配图表区域中的滚动缩放 我尝试过使用图像注释 但随着图表区域的变化 注释尺寸保持固定
  • 快速更改 SSIS 包数据源参数以方便迁移

    我需要将 SQL 数据库从 Sybase 迁移到 MS SQL Server 在生产服务器上进行实际迁移之前 我首先使用 SQL Server Management Studio 的导入 导出向导创建了一个 SSIS 包 以便与其他数据库进
  • 如何计算 python 中我的列中的行的编辑比/距离?

    我有一个只有一列的数据框 该列中有 1000 行 我需要比较所有行并找到所有行的编辑距离 我如何计算Python中的比率或距离 我有一个数据框如下 Df StepDescription click confirm button when d
  • 在 django admin 中动态设置 readonly_fields

    我可以改变吗readonly fields in my TranslationAdmin类依赖于某个字段的值Translation被查看 如果是这样 我该怎么做 我唯一想到的就是制作一个小部件来查看Translation并决定是否成为只读小
  • 使用 StreamWriter 写入 MemoryStream 返回空

    我不确定我做错了什么 看过很多例子 但似乎无法让它发挥作用 public static Stream Foo var memStream new MemoryStream var streamWriter new StreamWriter
  • 删除cassandra中大型数据集的列

    我们有一个冗余列 希望从 Cassandra 数据库 版本 2 1 15 中删除 这是一个文本列 代表磁盘上的大部分数据 15 个节点 X 每个节点 1 8 TB 最简单的选择似乎是更改表来删除该列 然后让 Cassandra 压缩来处理事
  • 了解 pdo mysql 事务

    The PHP 文档 http php net manual en pdo transactions php says 如果您以前从未遇到过交易 他们提供 4 种主要的交易方式 特点 原子性 一致性 隔离性和持久性 ACID 在 通俗地说
  • JavaScript:是否定义了成员?

    在我看来 有四种不同的方法可以确定给定的对象 例如foo 具有给定的属性 例如bar 定义 if foo hasOwnProperty bar if bar in foo if typeof foo bar undefined if foo