属性检测:使用“in”与尝试访问属性

2024-01-11

不得不提的是:我了解一点 JavaScript,但还不是很深入。

始终认为这是检查对象上的属性是否可用的正确方法:

if (window.console) {
  // doSomething
}

昨天我看到了使用这种技术的代码:

if ('console' in window) {
  // doSomething
}

两种技术等效吗?或者说他们有区别吗?


没有。他们有区别。

第一个检查值是否为window.console是 Truthy 并且第二个检查console财产存在于window.

假设您创建了一个这样的变量。

window.myName = "";

Now, if (window.MyName)将无法满足条件,因为空字符串在 JavaScript 中是 Falsy。

console.log(Boolean(window.myName)); // false

But if ("myName" in window)将满足条件,因为myName是一个属性window object.

console.log(Boolean("myName" in window)); // true

Note: in操作员将返回true即使正在测试的属性位于原型层次结构中的某个位置。例如,

console.log("toString" in {});  // true

它返回true因为对象{}继承方法toString.

如果您想确保该属性存在于对象本身上,那么您应该使用Object.prototype.hasOwnProperty https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Object/hasOwnProperty, 像这样

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

属性检测:使用“in”与尝试访问属性 的相关文章

随机推荐

  • 使用PIL在App Engine上绘制图像

    我已阅读主题 App Engine PIL 和叠加文本 https stackoverflow com questions 12695480 app engine pil and overlaying text 下面的代码将显示损坏的图像
  • 使用 TFLiteConverter 将 Keras 模型转换为量化的 tflite 版本会导致 NOTYPE 错误

    当转换和执行 keras 模型的 8 位量化时 我遇到了一个奇怪的错误 而图像数据集不会发生这种错误 import tensorflow python keras backend as K import tensorflow as tf f
  • 在向量上查找另一个特定数字之前的数字

    所以我想知道matlab中一个事件何时发生在另一个事件之前 我所说的事件是指数字 例如 我有一个向量 比方说 x 0 3 0 3 0 1 0 2 0 5 0 1 0 3 0 1 0 5 0 1 0 4 0 5 我想知道 0 1 发生在 0
  • 简化嵌套 Maybe 模式匹配

    我的代码中有以下构造 f Maybe A gt X f a case a of Nothing gt x Just b gt case b of Nothing gt y Just c gt case c of Nothing gt z J
  • SpringMVC Ajax 验证

    我有一个 Spring Mvc 3 表单 可以 POST 到控制器 在控制器中我调用来执行 DML 语句 我还有一个单独的验证类 它实现 Validator 并在我的控制器中调用 我在那里进行简单和复杂的验证 例如检查用户名是否存在并返回错
  • 如何在AFNetworking 2.0中获取下载进度?

    我正在使用 AFURLSessionManager 创建一个新的下载任务 AFURLSessionManager manager NSProgress p nil NSURLSessionDownloadTask downloadTask
  • 让 vim 分割窗口处于插入模式

    我想在 vim 分割窗口中查看 bash 命令的输出 split 为此 我安装了 Conque Shell 它在分割窗口中显示 bash ConqueTermSplit bash 然后我可以运行 shell 命令并在插入模式下观察输出 但是
  • 3 维空间中点与线之间的最短距离

    我试图使用 numpy 或 python 中的任何东西找到从点 x0 y0 z0 到由 x1 y1 z1 和 x2 y2 z2 连接的线的最小距离 不幸的是 我在网上能找到的所有内容都与二维空间有关 而且我对 python 还很陌生 任何帮
  • 在 Java 中如何确定另一个进程或可执行文件是 32 位还是 64 位

    Java 是否有任何可以调用的 API 可以知道进程或 exe 文件是 32 位还是 64 位 不是运行代码的 JVM 没有标准的 Java API 来确定是否external进程是 32 位或 64 位 如果您想执行此操作 则需要使用本机
  • win32应用程序不是那么面向对象,为什么有这么多指针?

    对于你们中的一些人来说 这可能是一个愚蠢的问题 也许我问这个问题是错误的 因为我是 C 新手 但我注意到 在许多 Win32 应用程序中工作时 您会使用大量指针资源 为什么必须始终获取对象指针 为什么不启动该类的新实例 说到这一点 我注意到
  • 将 pandas 时区感知的 DateTimeIndex 转换为天真的时间戳,但在特定时区

    您可以使用该功能tz localize使 Timestamp 或 DateTimeIndex 时区感知 但如何做相反的事情 如何将时区感知时间戳转换为天真的时间戳 同时保留其时区 一个例子 In 82 t pd date range sta
  • 如何使用 eclipse adt 将新库添加到 android 依赖项?

    我正在尝试使用 eclipse adt 将外部库添加到 android 依赖项 我那里有几个库 例如拉动刷新等 但每次我添加一个新的库 jar 文件时 它都会显示在 android 依赖项库文件夹之外 我如何使它与其他库耦合作为 andro
  • 使用 hciattach 通过 uart 进行蓝牙?

    我在用QN9021SoC工作在controller mode BLE 蓝牙核心规范 v4 0 它支持一些标准HCI命令以及一些供应商特定的命令 我正在尝试将其附加到我的ubuntu laptop 我使用的命令是hciattach hciat
  • 通过双击文件将参数传递给 JavaFx 应用程序

    我创建了一个 JavaFX 应用程序 部署了 app 文件 它工作正常 然后 我将操作系统设置为使用我的应用程序打开具有特定扩展名的所有文件 我的问题是 当我双击文件时 我的应用程序打开 但我不知道打开它的文件是哪个 我尝试使用该函数检查应
  • EXCEPTION_ACCESS_VIOLATION (0xc0000005) 来自 JNI 的 JVM?

    我在 vc 中用 JNI 编写了一些本机方法 以便从 java 访问 我的三种方法中有两种工作得很好 没有任何问题 然而 当我在运行时调用我的最后一个方法时 它会导致以下错误消息 A fatal error has been detecte
  • 如何使 GTFS 查询运行得更快?

    我正在尝试使用 GTFS 数据库 即 RATP 为巴黎及其郊区提供的数据库 数据集是huge The stop times表有 1400 万行 这是表架构 https github com mauryquijada gtfs mysql b
  • python 中的范围函数

    for n in range 2 5 for x in range 2 n print n x 输出如下 3 2 4 2 4 3 为什么n的值从3开始而不是从2开始 n三点开始因为range 2 2 是空的 也许你真的想要 for n in
  • iPhone 是否支持传入彩信中的 SMIL?

    在我开发的一项服务中 我向用户发送一条彩信 其中包含 6 个静态顺序的图像 为了正确排序图像并添加格式 我使用了 SMIL 它在多种设备上运行良好 然而 iPhone 似乎根本不识别 SMIL 图像按文件名字母顺序排序 更糟糕的是 它们不是
  • 如何向独立的异步任务添加进度条?

    我有一个处于其自己的活动中的异步任务 我向它传递一个字符串值 它连接到我的 Web 服务并根据我传入的名称下载 Json 数据 返回 Json 结果集 效果很好 我想向异步任务添加一个进度旋转器 但我不知道如何做到这一点 我已经仔细阅读了这
  • 属性检测:使用“in”与尝试访问属性

    不得不提的是 我了解一点 JavaScript 但还不是很深入 始终认为这是检查对象上的属性是否可用的正确方法 if window console doSomething 昨天我看到了使用这种技术的代码 if console in wind