为什么Firefox100.0版本号会导致网站Bug?

偶然看到了“Firefox 正在测试 100.0 版本号会引起哪些 Bug”的公众号文章,因该文章小编不懂原理还硬写,让读者火大,索性自己研究下。
为啥研究
程序员看技术文章,讲究的就是一个前因后果,但看到这篇文章描述的“原因”时,我的火噌的一下就冒了出来:
看完上面的截图,你看懂了为啥版本号能引起故障了吗?
到底为什么版本号能引起故障啊?不读取 100.0 或者转为字符串会发生啥呀?你倒是说啊!
搜了下英文报道,发现这篇“技术文章”就是全篇翻译某篇英文报道,而报道里仅仅提了一嘴字符串问题,没说详细原因,只会翻译原文的小编自然也写不出来。当然,小编嘛,发文第一位,至于内容是否合理,根本不管。
探究原因
英文报道里的例子指向了一个 Github issue,里面详细地描述了某网站出现 Bug 的原因,我用一个实验让你感受下这个 Bug。
- 浏览网页的你,按下 F12,打开控制台。
-
在控制台输入如下代码:
let c = "100.0",d="2"; // 回车 console.log(d > c); // 回车
- 观察现象
如果一切顺利,你的结果应该如下所示:
这是一个很常见的字符串比较问题,因为 2 的 ASCII 码比 1 大,因此字符串首位比较即出结果。
对于某些框架或库来说,为了支持不同版本浏览器的特性,会使用版本字符串做比较,举个例子:
if(nowVersion > "70"){
//样式1,事件1
}else if(nowVersion > "55"){
//样式2,事件2
}else{
//Too old,do not support
}
因此,当版本号升级到 100.0 时,使用字符串比较,可能会出现匹配不到支持版本的尴尬现象,而使用数字比较则无问题。
其他
致某公众号的某小编:“为什么版本号会引起潜在故障”,你仔细读读你的答案,那玩意是答案吗?
作为面向信息技术的公众号,写文章最起码要把问题原因写出来,要是不知道就不写,也成。您看看这写的啥呀,有个“但”字它就是原因了?!
别那么生气勒,习惯了就好~
现在这个流量爆棚的时代他们就是为了抓眼球标题什么都能扯。有空还是多上上外网搜文章,尤其是技术类的:)