我刚刚运行了一个非常简单的 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(使用前将#替换为@)