gpt4 book ai didi

javascript - JavaScript 中这些求值器有什么区别?

转载 作者:行者123 更新时间:2023-12-02 17:27:18 24 4
gpt4 key购买 nike

我在浏览时遇到了几种不同的符号。我想知道根本的区别。

让我们声明

var foo = "bar";

现在,我已经了解了三元/Elvis 运算符:

var x = (foo == "bar")? "yes" : "no";
>> "yes"

或者,更简单地说,

var x = (foo == "bar");
>> true

但是,这些功能又如何呢?

var a = ["no", "yes"][+(foo == "bar")];
>> "yes"

我的看法:[+(foo == "bar")]计算结果为 [+(true)]并且,通过类型强制,到 [+1] 。然后,它访问数组的第二个元素。

var b = ["no", "yes"][foo == "bar" & 1];
>> "yes"

我的看法:[foo == "bar" & 1]计算结果为[true & 1] 。然后,(二进制)为[01 & 00000001] ,返回 1作为数组索引访问器。

var c = ["no", "yes"][foo == "bar" && 1];
>> "yes"

我的看法:与上面类似,除了类型强制导致 [true && 1]评估为 [1] .

哪种表示法最快?哪种符号最可读/最可靠?有什么我错过的吗?

最佳答案

表达式:

(foo === "bar")? "yes" : "no";

总是比数组版本更快,并且在我看来,总是更容易阅读。不过,我怀疑您知道这一点,因为您觉得您需要解释其他示例,但不需要解释三元运算符。

其他方法较慢的原因是它们需要数组分配,然后进行数组查找。引擎在这里可以很聪明,因为它意识到它可以使数组常量并且只分配它一次,因为我不希望任何运行时执行此操作,因为有更高效、更容易理解的习惯用法可以做同样的事情。

一般来说,如果您有避免分配的解决方案,请使用它。分配是性能的敌人。

至于您错过的内容,有无数可能的解决方案,但没有一个比三元运算符更快。

另请注意,切换为使用 === 运算符而不是 ==,这样可以避免类型强制。

关于javascript - JavaScript 中这些求值器有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23418990/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com