浏览器兼容性问题,为什么同一段JavaScript代码,不同浏览器上为什么会产生不同效果,甚至bug?浏览器不就是严格按照JavaScript语法进行的吗?java代码为什么从来没听过有什么兼容问题?
1 java为什么没听说过有什么兼容性问题呢?
因为java语言的语法也可能会变化的,因为java版本也在不停地迭代(jdk1.5、jdk1.6、jdk1.8等),所以编译器(如jdk自带的java.exe编译器,Eclipse自己的编译器等)也要不停地跟着java的版本不停更新。这也是为什么低的Eclipse版本,不能编译jdk1.8的原因。
但是java为什么不存在兼容性问题呢?
也不是说,java不存在兼容性问题,也会存在。比如①研发环境,我用Eclipse编译1.7版本的编译器编译1.8版本的java代码,就会编译不通过。②部署环境,用1.7版本的虚拟机,运行1.8版本的class文件,也会出问题,报错。
只是我通过程序员、部署人员,只要编译环境、部署环境和java版本对应上,就可以完全不存在兼容性问题。
因为编译器、虚拟机也是随着java的更新而更新的,只要保证编译器、虚拟机能够和java版本配套,就不会出现兼容性问题,这点程序员、部署人员是可以做到这一点的。
2如果JavaScript语法固定,所有浏览器都严格遵守JavaScript语法不就行了,怎么可能还存在兼容性问题呢?
答案是:
但是,以上回复,也不能解释为什么存在兼容性问题啊,JavaScript提高了,我浏览器的版本也提高不就行了,这样怎么还会存在浏览器问题呢?
这就是因为JavaScript版本发展,和java版本发展,方式不一样。
java不存在说,我当前的编译环境、部署环境要兼容jdk之前所有的版本,我研发使用的jdk版本是固定的,那么我之后的工作,研发、编译、部署,都设置为这个jdk版本的就行了,编译器、虚拟机等版本和java代码的版本不一致,我程序员替换成一致就可以,人工是可以去替换成一致的,所以不存在兼容性问题。
JavaScript就不一样了,它是解释性语言,不是编译性语言,没有编译器。程序员书写JavaScript代码的时候就没有了约束,也不管是什么版本的JavaScript代码,都去用,导致了一个浏览器版本根本没办法解释程序员写的js代码。只能通过程序员自己的研发控制,开发阶段很难强制约束程序员。
在开发的时候,程序员不能像java开发时那样,选择了jdk版本之后,研发就会收到该版本编译器的约束,会按照这个版本的jdk去研发,严格保证了java代码是按照这个版本进行研发的,不然编译就通不过。
再者说,就算程序员很牛,我就严格控制我的JavaScript代码按照某一个版本的JavaScript语法进行书写,那么也只是能够做到,某一个版本的浏览器下没有问题。浏览器版本升级了,其支持的语法可能也就又变化了,还是会出现兼容性问题。
所以总结:
java不存在兼容性问题。
浏览器兼容性问题,程序员只能做到,我的JavaScript代码能够使用某一个版本的浏览器,不能保证试用所有浏览器。