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

prateekj_ahead

为什么在JavaScript{} == false评估为falsewhile[] == false评估为true

费利克斯·克林

这是根据抽象相等比较算法进行的类型转换

{} == false                // step 7 {} == ToNumber(false)
{} == 0                    // step 9 ToPrimitve({}) == 0
"[object Object]" == 0     // step 5 ToNumber("[object Object]") == 0
NaN == 0                   // step 1.c.i

[] == false                // step 7 [] == ToNumber(false)
[] == 0                    // step 9 ToPrimitve([]) == 0
"" == 0                    // step 5 ToNumber("") == 0
0 == 0                     // step 1.c.iii

参考:ToNumberToPrimitive

并且因此,更喜欢使用严格的比较。


在比较过程中如何ToPrimitive将对象转换为基本体的一些示例默认情况下,将调用对象方法,然后如果未返回原始值,则将调用方法对于对象,它将默认调用valueOftoStringvalueOfDatetoString

var obj = {};
obj.valueOf();        // Object { } // the object itself
obj.toString();       // "[object Object]"


obj.valueOf = function() { return 123; };
obj == 123; // true

obj.toString = function() { return 'foo bar'; };
obj == 123; // false
obj == 'foo bar'; // true

// Date object

var date = new Date();
date.valueOf();        // 1421430720379
date.toString();       // "Fri Jan 16 2015 09:52:00 GMT-0800 (PST)"

date == 1421430720379 // false
date == "Fri Jan 16 2015 09:52:00 GMT-0800 (PST)" // true

date.toString = function() { return 'foo'; };
date == 'foo'; // true

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

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

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类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

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

来自分类Dev

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

来自分类Dev

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

来自分类Dev

为什么“ []是[]”在python中评估为False

来自分类Dev

为什么JavaScript JSON评估为false?

来自分类Dev

为什么`1> undefined`评估为false?

来自分类Dev

为什么我在Python中的if语句评估为False?

来自分类Python

为什么(1 == 2!= 3)在Python中评估为False?

来自分类Dev

为什么NULL = NULL在SQL Server中评估为false

来自分类Dev

为什么总是将此模板评估为false_type?

来自分类Dev

SQL为什么要评估WHERE子句为False?

来自分类Python

为什么([1,0]中的1 = = True)评估为False?

来自分类Dev

为什么评估函数将字符串“ false”设置为布尔值false?

来自分类Dev

为什么在if语句中myNumber == True返回False的情况下,Python将字符串/数字评估为True?

来自分类Dev

为什么“” <{}评估为true?

来自分类Dev

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

来自分类Dev

评估lambda演算:如果为false false true

来自分类Dev

为什么此正则表达式在javascript中评估为false?

来自分类Dev

为什么`instance_of_object.foo被instance_of_object.foo`评估为False?

来自分类Dev

为什么`to_unsigned(0,4)> = -1`在运行时评估为“ FALSE”?

来自分类Dev

为什么form.is_valid()在POST请求中评估为false

来自分类Javascript

为什么(“ foo” === new String(“ foo”))在JavaScript中评估为false?

来自分类Python

为什么bool(xml.etree.ElementTree.Element)评估为False?

来自分类Dev

为什么我的if语句在switch语句中总是评估为false?

来自分类Dev

为什么测试(null是Type)在Dart语言中评估为false?

Related 相关文章

  1. 1

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

  2. 2

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

  3. 3

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

  4. 4

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

  5. 5

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

  6. 6

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

  7. 7

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

  8. 8

    为什么“ []是[]”在python中评估为False

  9. 9

    为什么JavaScript JSON评估为false?

  10. 10

    为什么`1> undefined`评估为false?

  11. 11

    为什么我在Python中的if语句评估为False?

  12. 12

    为什么(1 == 2!= 3)在Python中评估为False?

  13. 13

    为什么NULL = NULL在SQL Server中评估为false

  14. 14

    为什么总是将此模板评估为false_type?

  15. 15

    SQL为什么要评估WHERE子句为False?

  16. 16

    为什么([1,0]中的1 = = True)评估为False?

  17. 17

    为什么评估函数将字符串“ false”设置为布尔值false?

  18. 18

    为什么在if语句中myNumber == True返回False的情况下,Python将字符串/数字评估为True?

  19. 19

    为什么“” <{}评估为true?

  20. 20

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

  21. 21

    评估lambda演算:如果为false false true

  22. 22

    为什么此正则表达式在javascript中评估为false?

  23. 23

    为什么`instance_of_object.foo被instance_of_object.foo`评估为False?

  24. 24

    为什么`to_unsigned(0,4)> = -1`在运行时评估为“ FALSE”?

  25. 25

    为什么form.is_valid()在POST请求中评估为false

  26. 26

    为什么(“ foo” === new String(“ foo”))在JavaScript中评估为false?

  27. 27

    为什么bool(xml.etree.ElementTree.Element)评估为False?

  28. 28

    为什么我的if语句在switch语句中总是评估为false?

  29. 29

    为什么测试(null是Type)在Dart语言中评估为false?

热门标签

归档