Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/performance/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 为什么exp&“t”| |“f”`比inline if else慢得多?_Javascript_Performance_Jsperf - Fatal编程技术网

Javascript 为什么exp&“t”| |“f”`比inline if else慢得多?

Javascript 为什么exp&“t”| |“f”`比inline if else慢得多?,javascript,performance,jsperf,Javascript,Performance,Jsperf,为什么逻辑表达式比if-else或inline if-else慢两倍 所有函数的评估结果相同。 所有函数都将从1和0的数组中传递一个值,请参见此。 因为它需要评估t是否真实。返回值&t|f可以扩展为 var and = val ? "t" : val; var or = and ? and : "f"; return or; 当然,优化编译器可以静态地确定t文本的真实性,并避免两次执行ToBooleanval,但显然这在任何JS引擎中都无法做到 val && "t" || "f

为什么逻辑表达式比if-else或inline if-else慢两倍

所有函数的评估结果相同。 所有函数都将从1和0的数组中传递一个值,请参见此。
因为它需要评估t是否真实。返回值&t|f可以扩展为

var and = val ? "t" : val;
var or = and ? and : "f";
return or;
当然,优化编译器可以静态地确定t文本的真实性,并避免两次执行ToBooleanval,但显然这在任何JS引擎中都无法做到

val && "t" || "f"
必须计算val,如果val的计算结果为true,则还必须计算t


因此,使用速度明显快于,但仍然相当慢。

根据我的理解,val&&t|f和val?t:f不一样如果去掉else而保留return语句,第三个可能会更快。我很困惑。这个问题是:为什么执行两次评估val和t要比只评估val慢?@DrewKennedy:。它们在语义上是等价的,应该编译成相同的字节码。@Qwerty x&&y | | z计算x的真值,然后计算y的真值。有两个测试。x?y:z只评估x的真实性,只有一个测试。我绝对希望?:比&&| |快一倍,因为它做了一半的比较。@Marc:作业前是什么意思?不,val&&t对val或t求值,它不是强制转换为布尔值。@Marc为什么要这样做?返回的值是f,程序将如何处理已计算的布尔值?丢弃?我想我从没见过这个代码。这是怎么一回事?似乎多余。。你有一些参考资料吗?@Bergi,Siguza:删除了我的评论,以免混淆问题。简言之:我是个白痴,我当时的想法是愚蠢的。“唯一错误”和“唯一正确”的链接是相同的…
val && "t" || "f"