首页 > 代码库 > 最短的通过特性检测判断浏览器

最短的通过特性检测判断浏览器

注意:我们这里一般是讨论IE和非IE浏览器,更精准的检测需要结合UA和其他特性检测来综合判断

1. 垂直制表符

‘\v‘的转义问题,利用浏览器对转义字符‘\v‘的理解

IE浏览器不能识别\v为一种转义字符,会直接输出v

其他浏览器(目前验证safari\chrome)会转义为垂直制表符,大约等同于""一个空格

// ie会生成为v1,right-expression遇到+会转化为字符串拼接,但left-expression为空,会转为数字加法, 可以了解下+[]为什么等于0// 所以ie +"v1"等到的结果就是NaNvar 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

扩展: +[]可以查看

最短的通过特性检测判断浏览器