javascript中==的数据类型转换规则

  1. 如果只有一个值,判断这个值是真还是假,遵循只有0, NaN, "", null, undefined这五个是假, 其余都是真

  2. 如果是两个值比较是否相等, 遵循这个规则: val1 == val2 两个值可能不是同一个数据类型的, 如果是==比较的话,会进行默认的数据类型转换

  1. 对象==对象, 永远不相等: 如 '[] == [] // false' '({} == {}) // false'

    (function fn(){} == function() {}) // false

  2. 对象== 字符串, 先将对象转换成字符串(调用toString()方法),然后再进行比较. )例如:

    [] == "" //true, 执行了[].toString()
    ({}) == "" // false
    ({}.toString()) // "[object Object]"
    [].toString(); // ""

  3. 对象== 布尔类型, 对象先转换为字符串(toString()),然后把字符串转换为数字(Number() "" --> 0), 布尔类型也转换为数字(true是1, false是0); 最后让两个数字比较

    Number('') // 0
    [] == false // true

  4. 对象 == 数字 对象先转换为字符串(toString()),然后把字符串转换为数字(Number()), // []--->""--->0

  5. 数字 == 布尔 布尔转换为数字(Number()), true是1, false是0

  6. 数字 == 字符串 字符串转换为数字

  7. 字符串 == 布尔 都转换为数字

  8. null == undefined 结果是true

  9. null或undefined和其它任何数据类型都不相等

  10. NaN和任何东西都不相等

除了==是比较, ===也是比较(绝对比较), val1和val2 如果数据类型不一样,肯定不相等.

总之==的数据类型转换的大体思路就是: 能转字符串就转字符串, 还不够就转数字啦...所以[]==![]返回true, 就是因为这其实是一个对象类型和布尔类型比较; 两边转数字以后都是0.

实践中这些数据转换的规律并没有什么大用, 判等的时候应当尽量都用===以避免数据类型转换, 仅在判断null和undefined的时候可以用==.

顺便还有javascript中的运算符优先级...从高到低大体上是:

  1. 一元运算符(求反, 逻辑非(!), 转数字(+),++, --),typeof, delete优先级最高;
  2. 乘除/求模;
  3. 加减;
  4. =, <=, >, <, instance of;

  5. 判等运算符(==, =, !=, !);
  6. &&;
  7. 带有赋值的,优先级最低(=, +=, -=...)
posted @ 2015-07-14 08:58  supersylph  阅读(227)  评论(0编辑  收藏  举报