功能检测,功能推断和使用UA字符串之间有什么区别

pro*_*ons 18 javascript user-agent browser-feature-detection

我最近在求职面试中被问到这个问题,特别是围绕Javascript.我想知道正确的回应.

究竟是什么区别feature detection,feature inference以及使用 User agent字符串?

R. *_*olt 37

特征检测检查特征是否存在,例如:

if (window.XMLHttpRequest) {
    new XMLHttpRequest();
}
Run Code Online (Sandbox Code Playgroud)

特征推断检查功能就像特征检测一样,但使用另一个功能,因为它假设它也将存在,例如:

if (document.getElementsByTagName) {
    element = document.getElementById(id);
}
Run Code Online (Sandbox Code Playgroud)

检查UA字符串是一种古老的做法,不应再使用了.您不断更改UA检查,并且永远不会受益于新实现的功能,例如:

if (navigator.userAgent.indexOf("MSIE 7") > -1){
    //do something
}
Run Code Online (Sandbox Code Playgroud)


Rob*_* M. 5

功能检测:实际检查功能是否存在

if('localStorage' in window)

特征推断:如果x存在,我们可以假设y存在

if('localStorage' in window){
   window.sessionStorage.setItem("this-should-exist-too", 1);
}
Run Code Online (Sandbox Code Playgroud)

如果您依赖于用户代理,那么您必须拥有浏览器X支持功能Y的地图