JavaScript的是弱类型的,但是在很多操作中,它会自动进行相应的类型转换,可能很多人都知道下面这样的变态类型转换:

// 下面这个等于80.8
alert('88.8' - 8);
// 下面这个等于'88.88'
alert('88.8' + 8)

上面的这个很好理解,JavaScript在做减法运算时,会自动把字符串转换为Number,在做加法时,只要是和字符串相加,那么肯定会把数字转换为字符串。但是,但是很少有人知道下面这样变态的类型转换:

var x = '0E8888';
alert(x == 0);        // 这个是true
if (x >= 0) {
    alert('x >= 0');  // 这个也是true
}
if (x < 0) {
    alert('x < 0');
}

如果说我们这样理解:在做比较运算时,会自动把字符串转换为数字,所以’0E8888’被转换为0,所以上面的结果没有任何问题。那么下面的就没办法解释了:

var x = '0F8888';
alert(x == 0);        // 这个是false
if (x >= 0) {
    alert('x >= 0');  // 这个也是false
}
if (x < 0) {
    alert('x < 0');   // 这个还是false
}

Who can tell me?这个类型转换太变态,实在是难以琢磨,所以在写代码的时候还是要小心,尽量要有明确的类型,虽然不用写出来,心中一定要遵守这个规矩。

1 Comment

  1. 这个很好理解,”0E8888″这个字符串本身包含的就是数值等于0,是科学计数法表示的。
    再看下面那个,”0F8888″这个在进行比较运算或者相等运算时会通过Number()函数进行隐式类型转换,被转换为NaN,NaN是个特殊值,与任何类型的值不相等,包括自身,即不大于也不小于任何值。这样就得出了你的结过了。
    可以参考我这篇文章:
    http://blog.csser.com/2010/javascript类型转换/

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.