Skip to content

隐式类型转换技巧 #15

@yongheng2016

Description

@yongheng2016

#+ 类似下面的布尔类型隐式转换:

if (xxx){
  xxx
}

记住两句话:
“” ->只有空字符串为false,其它字符串一律为true;
obj(obj,arr,funciton) -> 都为true


  • ==进行比较时的类型隐式转换:

记住下面的话:
浏览器尽量把所有的数据类型转换为number类型(toNumber( ))
obj -> ①valueOf ②toString

  • 如果比较的两者中有布尔值Boolean,会把 Boolean 先转换为对应的 Number,即 0 和 1,然后进行比较。
  • 如果比较的双方中有一方为 Number,一方为 String时,会把 String 通过 Number() 方法转换为数字,然后进行比较。
  • 如果比较的双方中有一方为 Boolean,一方为 String时,则会先将双方转换为数字,然后进行比较。
  • 如果比较的双方中有一方为 Number,一方为Object时,则会调用 valueOf 方法将Object转换为数字,然后进行比较。
  • 当一个对象同时包含 toString() 和 valueOf() 方法的时候,Javascript 会盲目的选择valueOf()方法而不是 toString() 来解决这个问题
"1" + { toString: function() {return 1;} }    // "11"
1 == { valueOf: function() {return 1;} }    // true
1 + { valueOf: function() {return 1;} }    // 2

参考

Metadata

Metadata

Assignees

No one assigned

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions