注意:我们这里一般是讨论IE和非IE浏览器,更精准的检测需要结合UA和其他特性检测来综合判断
1. 垂直制表符
‘\v‘的转义问题,利用浏览器对转义字符‘\v‘的理解
IE浏览器不能识别\v为一种转义字符,会直接输出v
其他浏览器(目前验证safari\chrome)会转义为垂直制表符,大约等同于""一个空格
// ie会生成为v1,right-expression遇到+会转化为字符串拼接,但left-expression为空,会转为数字加法, 可以了解下+[]为什么等于0 // 所以ie +"v1"等到的结果就是NaN var ie = !+"\v1"; //false, ie
2: 利用浏览器的JS引擎解析不同
我们在写一个类Json结构的object的js对象时,如
{ name: "test", key: "key", value: false, }
这段代码在IE的引擎下会报错为: 不期望的结束符,原因在于value结束后 ‘,‘号浏览器解析错误,所以这个方法是充分利用浏览器的纠错功能来做的判断
那么[1,]在IE调用toString方法将会解析"1," 在标准浏览器中会剔除‘,‘,注意区分ArrayList中[,3,,4,]missing的是哪些索引,可以看MDN的解释
if (!+[1,]) { // ie } else { // 标准浏览器 } // 操作符+当左表达式不存在时会试图把右表达式转化为number // +[] // +[]的转化过程可以这样来解释 // Number([]) // Number([].toString()) // [].valueOf() isn’t primitive // Number("") // 0
扩展: +[]可以查看
时间: 2024-10-10 13:03:56