- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
只是潜伏在 140byte docs 的奇怪而奇特的东西上并发现this :
void 0
is faster thanundefined
but longer than the alternatives.
我在 Chrome 控制台中懒惰地检查了一下,如下所示:
console.time('void');
for (let a = 0; a < 1e6; a++) {() => void 0};
console.timeEnd('void');
对比
console.time('undefined');
for (let a = 0; a < 1e6; a++) {() => undefined};
console.timeEnd('undefined');
并没有发现任何差异。也许我的惰性检查太懒了,或者只是关于缓慢的陈述不再相关了。
我只是想知道 JS 引擎的内部结构以及它是如何实现的?我们如何谈论原语和运算符的速度?它是否正确且相关?我觉得这听起来有点奇怪。
最佳答案
I’m just wondering about the JS engines internals and how it could be possible? How can we talk about the speed of primitives and operators? Is it correct and relevant? It sounds a little bit odd to me.
是的,这是可能的。 undefined
是一个全局变量,而不是关键字。这意味着它可以被遮蔽。因此,为了找到它的值,JavaScript 引擎需要遍历作用域链并检查每个作用域级别的 "undefined"
绑定(bind)。例如:
function outer() {
function middle() {
function inner() {
console.log(undefined);
}
inner();
}
middle();
}
outer();
inner
内部的引用要求 JavaScript 引擎检查 inner
函数的执行上下文的绑定(bind)对象,然后检查 middle
的绑定(bind)对象,然后 outer
's,最后在全局级别找到它。 (当然,如果合理的话,JavaScript 引擎可以对其进行优化。)
相反,void
是void
运算符的关键字,而0
是文字,因此void 0
不需要遍历作用域链。由于 void
运算符被定义为始终返回 undefined
,因此有一种机制可以使其比 undefined
执行得更好全局。
这可能并不重要。您更有可能做其他事情来影响您的表现。
FWIW,一个幼稚的基准:
var x = undefined;
var now = performance && performance.now ? performance.now.bind(performance) : Date.now.bind(Date);
function outermost() {
var a = Math.random();
function outer() {
var b = Math.random();
function inner() {
var c = Math.random();
function test1() {
if (Math.random() > 1) { // Never true
x = 42;
}
return x == undefined;
}
function test2() {
if (Math.random() > 1) { // Never true
x = 42;
}
return x == void 0;
}
function test(f, n) {
var start = now();
while (n-- > 0) {
f();
}
return now() - start;
}
console.log("Testing...");
setTimeout(function() {
test(test1, 100000000); // warmup
test(test2, 100000000); // warmup
console.log("undefined", test(test1, 1000000000), "ms");
console.log("void 0 ", test(test2, 1000000000), "ms");
}, 40);
if (a + b + c > Infinity) {
console.log("Impossible, just making sure to use a, b, and c");
}
}
inner();
}
outer();
}
outermost();
WARNING: THIS MAY LOCK UP YOUR BROWSER WINDOW.
For me, it runs fine on recent Chrome, taking about 20 seconds; YMMV.
关于javascript - 为什么 `void 0` 可能是 “faster” 而不是 `undefined` ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40358520/
我只是有一个更琐碎的问题。 为什么undefined == undefined 返回true,而undefined >= undefined 为false? undefined 等于 undefine
用PHP 7.2编写套接字服务器。根据Firefox 60中的“网络”选项卡,服务器的一些HTTP响应的第一行随机变为undefined undefined undefined。因此,我尝试记录套接字
在 JavaScript 中这是真的: undefined == undefined 但这是错误的: undefined <= undefined 起初我以为<=运算符包含第一个,但我猜它试图将其转换
在回答这个问题 (Difference between [Object, Object] and Array(2)) 时,我在 JavaScript 数组中遇到了一些我以前不知道的东西(具有讽刺意味的
来自https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Array/of , Note: thi
我正在运行 PHP 脚本并继续收到如下错误: Notice: Undefined variable: my_variable_name in C:\wamp\www\mypath\index.php
我正在运行 PHP 脚本并继续收到如下错误: Notice: Undefined variable: my_variable_name in C:\wamp\www\mypath\index.php
当我添加 到我的 PrimeFaces Mobile 页面,然后我在服务器日志中收到以下警告 WARNING: JSF1064: Unable to find or serve resource, u
我正在运行 PHP 脚本并继续收到如下错误: Notice: Undefined variable: my_variable_name in C:\wamp\www\mypath\index.php
我正在运行 PHP 脚本并继续收到如下错误: Notice: Undefined variable: my_variable_name in C:\wamp\www\mypath\index.php
我正在运行 PHP 脚本并继续收到如下错误: Notice: Undefined variable: my_variable_name in C:\wamp\www\mypath\index.php
我正在运行 PHP 脚本并继续收到如下错误: Notice: Undefined variable: my_variable_name in C:\wamp\www\mypath\index.php
我正在运行 PHP 脚本并继续收到如下错误: Notice: Undefined variable: my_variable_name in C:\wamp\www\mypath\index.php
我正在运行 PHP 脚本并继续收到如下错误: Notice: Undefined variable: my_variable_name in C:\wamp\www\mypath\index.php
我正在运行 PHP 脚本并继续收到如下错误: Notice: Undefined variable: my_variable_name in C:\wamp\www\mypath\index.php
我正在运行 PHP 脚本并继续收到如下错误: Notice: Undefined variable: my_variable_name in C:\wamp\www\mypath\index.php
我正在运行 PHP 脚本并继续收到如下错误: Notice: Undefined variable: my_variable_name in C:\wamp\www\mypath\index.php
我正在运行 PHP 脚本并继续收到如下错误: Notice: Undefined variable: my_variable_name in C:\wamp\www\mypath\index.php
我正在运行 PHP 脚本并继续收到如下错误: Notice: Undefined variable: my_variable_name in C:\wamp\www\mypath\index.php
我正在运行 PHP 脚本并继续收到如下错误: Notice: Undefined variable: my_variable_name in C:\wamp\www\mypath\index.php
我是一名优秀的程序员,十分优秀!