在JavaScript中与null和undefined进行比较的速度

Jam*_*ice 36 javascript performance

我刚刚运行了一个非常简单的JavaScript 性能测试(不要问为什么).测试声明了一个变量,但没有为其赋值:

var x;

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

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

我期待与之比较undefined是禁食.事实上,它远远不够.与之相比,null速度最快,速度提高了约80%.

我上面描述的结果来自于在Chrome中运行测试(版本13).在Firefox中运行它们会产生更接近我预期的结果(与之undefined比较的速度比使用它更快null,尽管非常小).

所以,我的问题是这可能是什么原因?为什么Chrome似乎更喜欢这种比较null

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

在此输入图像描述

Lay*_*yke 18

null 是一个无法覆盖的保留关键字,因此当您对null进行比较时,您所要做的只是一次比较.

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


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

if(typeof notSet == "undefined"){ }
Run Code Online (Sandbox Code Playgroud)

证明

试试吧......并null在JavaScript控制台中设置内容.

null = "will error";
// Errors with --> ReferenceError: invalid assignment left-hand side
Run Code Online (Sandbox Code Playgroud)

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

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