我在 http://www.iefans.net/ie-setattribute-bug/ 中看到如此判断是否是IE,if(!+"v1"){IE代码}else{其他浏览器代码},请问这个条件判断的意义是什么?我在IE8中测试是true,在firefox/chrome/opera中测试是false.能解释下这个短语浏览器是如何解释的呢?
最佳答案
其实就是利用各浏览器对转义字符"v"的理解
在ie浏览器中,"v"没有转义,得到的结果为"v"
而在其他浏览器中"v"表示一个垂直制表符(一定程度上相当于空格)
所以ie解析的"v1" 为 "v1"
而其他浏览器解析到 "v1" 为 "1"
在前面加上一个"+"是为了把后面的字符串转变成数字
由于ie认为"v1"为"v1",所以前面的加上加号无法转变成数字,为NaN
其他浏览器均能变成 1
再因为js与c语言类似,进行逻辑判断时可使用数字,并且 0 为 false,其他数字则为true
所以 !1 = false ,于是其他浏览器均返回false
js在遇到如下几个值会返回false:undefined、null、NaN,所以ie中 !NaN = true