为什么在Javascript中,(!+ [] + [])为'true'和(false + [])为'false'?

托马斯·卡普拉

我正在查看ECMA-262语法,以获取下一个代码的定义:

const v = (! + [] + []);
const c = (false + []);

console.log(v);
console.log(c);

这是什么?

到目前为止,我还没有发现任何有用的东西,有人知道为什么它会给出这些结果或对此有参考吗?

弹簧

这是因为当您尝试将运算符应用到不同的数据结构时,JavaScript引擎将应用强制

在第一种情况下,它的作用是:

  1. 将first []转换为基元,这是通过调用array的toString()方法执行的。toString方法将所有数组值连接到字符串。如果您有类似的东西(false + [1,2,3]),将会得到:false1,2,3

  2. 第二步是将布尔值带入String上下文

  3. 现在我们将所有值都放在同一数据结构中,它将简单地将所有值连接在一起

在您的情况下,(! + [] + [])其值为“ true”,长度为4。

您不知道JS:类型和语法》这本书是了解JavaScript引擎所做的所有这些奇怪操作的瑰宝。

编辑:正如菲利克斯·克林(Felix Kling)所暗示的那样!运算符在的评估中具有不同的作用(! + [] + [])

在这种情况下,将发生以下情况:

  • ! + []评估为true。这是因为! + []在那里把它们在一个布尔上下文[toNumber]操作上[应用],这是0!0true

  • true + []被评估为'true'这是因为当您尝试向对象添加布尔值(数组是从对象派生的)时,[toString]操作将应用于两个项目。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Javascript

为什么“ true” == true在JavaScript中显示为false?

来自分类Dev

为什么{} == false评估为false,而[] == false评估为true?

来自分类Dev

为什么“ [] == true”和“![] == true”都评估为false?

来自分类Python

为什么“ False is False is False”评估为“ True”?

来自分类Python

为什么“ False is False is False”评估为“ True”?

来自分类Python

为什么“ True == False is False”评估为False?

来自分类Dev

为什么 (true || false && false) 评估为 true?

来自分类Dev

为什么$ false -eq“”为true?

来自分类Dev

JavaScript true +/- true是否为false?

来自分类Javascript

为什么JavaScript负数不总是为true或false?

来自分类Linux

python中的True和False可以分别重新分配为False和True吗?

来自分类Dev

为什么print('a'>'b')为false,而print('a'>'A')为True?

来自分类Java

为什么hasNext()为False,而hasNextLine()为True?

来自分类Dev

为什么“ range(2)== True中的1”评估为False?

来自分类Dev

当 {a statement that is equal to True} == True 评估为 false 时,为什么 True == True 评估为 True?

来自分类Dev

如何(false == false == true)为true

来自分类Dev

在 vue 中触发 false 为 true

来自分类Dev

在C中if(!(-1))是否为true或false?

来自分类Dev

('abc'== True中的'a')计算为False

来自分类Python

波浪号对布尔值的影响-为什么在Python中〜True为-2和〜False为-1?

来自分类Dev

为什么选择atom([])。在SWI prolog软件中为false,而在GNU prolog中为true?

来自分类Dev

type-of和type-of为false,仍为true

来自分类Dev

在setTimeout中设置为true的变量始终为false?

来自分类Javascript

为什么ECMAscript中的函数<=函数为true,但NaN <= NaN为false

来自分类Dev

Terraform if语句为true或false

来自分类Dev

为 SUMPRODUCT 返回 TRUE 或 FALSE

来自分类Dev

预期输入为数字,但为TRUE / FALSE

来自分类Dev

如何kSCNetworkReachabilityFlagsIsWWAN为true,而kSCNetworkReachabilityFlagsReachable为false

来自分类Dev

如果var a = true,则a == 1为true,但a == 2为false。为什么?

Related 相关文章

  1. 1

    为什么“ true” == true在JavaScript中显示为false?

  2. 2

    为什么{} == false评估为false,而[] == false评估为true?

  3. 3

    为什么“ [] == true”和“![] == true”都评估为false?

  4. 4

    为什么“ False is False is False”评估为“ True”?

  5. 5

    为什么“ False is False is False”评估为“ True”?

  6. 6

    为什么“ True == False is False”评估为False?

  7. 7

    为什么 (true || false && false) 评估为 true?

  8. 8

    为什么$ false -eq“”为true?

  9. 9

    JavaScript true +/- true是否为false?

  10. 10

    为什么JavaScript负数不总是为true或false?

  11. 11

    python中的True和False可以分别重新分配为False和True吗?

  12. 12

    为什么print('a'>'b')为false,而print('a'>'A')为True?

  13. 13

    为什么hasNext()为False,而hasNextLine()为True?

  14. 14

    为什么“ range(2)== True中的1”评估为False?

  15. 15

    当 {a statement that is equal to True} == True 评估为 false 时,为什么 True == True 评估为 True?

  16. 16

    如何(false == false == true)为true

  17. 17

    在 vue 中触发 false 为 true

  18. 18

    在C中if(!(-1))是否为true或false?

  19. 19

    ('abc'== True中的'a')计算为False

  20. 20

    波浪号对布尔值的影响-为什么在Python中〜True为-2和〜False为-1?

  21. 21

    为什么选择atom([])。在SWI prolog软件中为false,而在GNU prolog中为true?

  22. 22

    type-of和type-of为false,仍为true

  23. 23

    在setTimeout中设置为true的变量始终为false?

  24. 24

    为什么ECMAscript中的函数<=函数为true,但NaN <= NaN为false

  25. 25

    Terraform if语句为true或false

  26. 26

    为 SUMPRODUCT 返回 TRUE 或 FALSE

  27. 27

    预期输入为数字,但为TRUE / FALSE

  28. 28

    如何kSCNetworkReachabilityFlagsIsWWAN为true,而kSCNetworkReachabilityFlagsReachable为false

  29. 29

    如果var a = true,则a == 1为true,但a == 2为false。为什么?

热门标签

归档