JavaScript 中比较 null 与 undefined 的速度

2024-01-03

我刚刚运行了一个非常简单的 JavaScript性能测试 http://jsperf.com/js-coerce-null(不要问为什么)。该测试声明了一个变量,但没有为其分配任何内容:

var x;

然后它比较比较值变量的速度null, 并undefined, 换句话说:

var y = (x == null); and var y = (x == undefined);.

我期待与undefined成为最快的。事实上,那还差得很远。与的比较null无疑是最快的,大约快了 80%。

我上面描述的结果来自在 Chrome(版本 13)中运行测试。在 Firefox 中运行它们产生的结果非常接近我的预期(与undefined比用更快null,尽管非常微不足道)。

那么,我的问题是,造成这种情况的原因是什么?为什么 Chrome 似乎更喜欢与null这么大?

为了快速参考,下面是结果的屏幕截图:


null是一个不能被覆盖的保留关键字,因此当您与 null 进行比较时,您所要做的就是一次比较。

但是,当您检查时undefined,引擎必须进行类型查找,然后进行比较,这意味着它实际上要求稍高一些。


如果您需要实际检查某些内容是否未定义,您应该使用

if(typeof notSet == "undefined"){ }

Proof

尝试一下...并将某些内容设置为null在你的 JavaScript 控制台中。

null = "will error";
// Errors with --> ReferenceError: invalid assignment left-hand side

但是,如果您尝试使用 undefined 执行此操作,则不会出错。这并不是说您可以覆盖undefined,因为你不能,但是undefined是它自己的原始类型。

null 和 undefined 之间唯一真正的相似之处是它们都可以被强制转换为布尔值 false。

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

JavaScript 中比较 null 与 undefined 的速度 的相关文章

随机推荐

  • 从Python文件中读取单个字符?

    我的问题是 除了下面之外 是否还有其他方法可以一次一个字符地遍历文件 with open filename as f while True c f read 1 if not c print End of file break print
  • 使 tkinter 文本小部件适合窗口

    我正在制作一个文本编辑器 其主要小部件是一个文本小部件 供用户实际输入文本 当用户调整窗格大小时 我需要使文本小部件适合窗口 我通过使小部件变大来有点作弊 但这只是一个临时解决方案 让我在寻找解决方案时可以处理其他部分 如何使文本小部件自动
  • 如何在 Rails 2.3.5 中安装/使用 Devise?

    我尝试从 Github 上 Devise 的 v 1 2 oauth 分支进行安装 但仍然出现错误 如何在 Rails 2 3 5 应用程序上安装 devise gem 我特别想要一个可以与omniauth一起使用的 gem install
  • Mac App Store:放弃 32 位支持转而支持 ARC,32 位版本的现有用户会看到更新消息吗?

    我正在考虑放弃 32 位支持 转而支持自动引用计数 仅支持 64 位二进制文 件 我想在 Mac App Store 中避免出现这两种情况 For a 旧 32 位 Mac 用户 谁购买了支持 32 位的先前版本 他们会在 Mac App
  • Python 中是否有用于纯文本文件的本机模板系统?

    我正在寻找用于将输出格式化为简单文本的 Python 技术或模板系统 我需要的是它将能够迭代多个列表或字典 如果我能够将模板定义到单独的文件 如output templ 中而不是将其硬编码到源代码中 那就太好了 作为我想要实现的简单示例 我
  • 如何从9GAG获取数据json

    也许你认为这是一个愚蠢的问题 但我希望你能给我一些建议 我的问题 当我查看 9gag com 的源代码时 我意识到他们有一些行代码来加载更多内容 div class loading a class btn badge load more p
  • PyYAML 中的数组没有缩进或空格

    在下面的代码中我创建了net plan dict变量字典并将其转换为YAML格式文件 在字典里我有一个叫做addresses这是一个由三个元素组成的数组 创建YAML文件后 这三个数组元素没有放置在addresses field impor
  • JPA针对不同数据库的不同列类型

    是否可以根据使用的数据库使用 JPA 定义不同的列类型 我需要将 id 存储为 uuid 并且它必须是可移植的 那就是问题所在 PostgreSQL有 uuid MSSQL有 uniqueidentifier 而Oracle什么都没有 我想
  • android中textview的圆角

    我有一个文本视图 希望它的角是圆形的 我已经知道可以使用android background drawable somefile 就我而言 该标签已包含在内 因此无法再次使用 例如android background drawable my
  • Rails 更改 form_for 中提交的路由

    我有一个模型 文章 和一个嵌套在文章中的模型 评级 文章 123 评级 我想更改 ratings form html erb 中 f submit 的路由 现在是这样 按提交后 我的申请路由到 评分 111 但我想将其路由到 文章 123
  • WCF 服务应该返回 EntityObject 还是 POCO/DTO 类?

    我一直在查看很多使用 EntityFramework 的 WCF 示例 其中大多数似乎都会向客户端返回某种 POCO 或 DTO 类 我想知道为什么这是默认的EntityObject包括 DataContract 属性和工具INotifyP
  • Angula2 Karma 无法加载“webpack”!

    我已经在 Angular2 项目 Webpack Karma 上工作了几个月 该项目基于此入门程序的稍旧版本 https github com preboot angular2 webpack https github com preboo
  • 带注入的定制 Serilog 水槽?

    我创建了一个简单的 Serilog 接收器项目 如下所示 namespace MyApp Cloud Serilog MQSink public class MessageQueueSink ILogEventSink private re
  • 无法使用@Value在Spring应用程序中获取maven project.version属性

    如何使用 Value注释在Spring Boot应用程序中获取maven project version属性 经过一些关于如何在 SpringBoot 应用程序中获取 Maven 项目版本的研究和试验后 我找不到任何适合我的东西 由于类加载
  • 为 Goldschmidt 部门挑选良好的初步估计

    我正在计算 Q22 10 中的定点倒数戈德施密特师 http en wikipedia org wiki Division digital Goldschmidt division用于我的 ARM 上的软件光栅器 只需将分子设置为 1 即可
  • 实体 .ToList() 生成 System.OutOfMemoryException

    我有一个包含 50 万行的表 我需要更新每一行 但 ToList 失败 List
  • 数组访问可以优化吗?

    也许我被我的分析器 Netbeans 误导了 但我看到了一些奇怪的行为 希望这里有人可以帮助我理解它 我正在开发一个应用程序 它大量使用相当大的哈希表 键是长整型 值是对象 内置的 java 哈希表 特别是 HashMap 的性能非常差 在
  • SonarQube 临时磁盘空间

    我发现 SonarQube 正在使用lot其临时目录中的磁盘空间 是否有某种定期运行的清理程序来清除它 opt codehaus releases sonarqube sonarqube 5 1 temp 29 7GiB tmp
  • UIViewController调用对方的delegate

    我有两个 UIViewController 每个都有它的委托 并且正在调用其中一个 一个类称为 TopicViewController 另一个类称为 MentionViewController 代码如下所示 import
  • JavaScript 中比较 null 与 undefined 的速度

    我刚刚运行了一个非常简单的 JavaScript性能测试 http jsperf com js coerce null 不要问为什么 该测试声明了一个变量 但没有为其分配任何内容 var x 然后它比较比较值变量的速度null 并undef