Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/445.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 这个遗留代码的含义是什么?_Javascript_Legacy - Fatal编程技术网

Javascript 这个遗留代码的含义是什么?

Javascript 这个遗留代码的含义是什么?,javascript,legacy,Javascript,Legacy,这是一段可以追溯到Netscape Navigator时代的js代码。我不明白也不知道这个人为什么这样做 function id(i) { var e; if (document.getElementById) return document.getElementById(i); else if (document.all) return document.all[i]; else if (document.layers) retur

这是一段可以追溯到Netscape Navigator时代的js代码。我不明白也不知道这个人为什么这样做

function id(i)
{   

   var e;
   if (document.getElementById)
     return document.getElementById(i);
   else if (document.all)
     return document.all[i];
   else if (document.layers)
     return document.layers[i];  

   return null;
}
在较新的浏览器中,
if(document.getElementById)
总是正确的。看起来它正在检查这个函数是否存在,但我不是很确定

我之所以这么问,是因为这段代码读取的是浏览器IE8及以下版本中不应具有name属性的元素的
名称(
id
)。我的任务是让它在更新的浏览器上更有效地工作。但首先,我真的需要理解这段代码的含义


从属性(如
中读取
名称
)是在其他地方完成的,将其用作自定义属性非常简单。我所包含的这篇文章涉及到更多的内容,并没有那么简单。

这是一种针对
getElementById
的功能检测形式-基本上:

function id(i)
{   

   var e;
   if (document.getElementById) // the standard way
     return document.getElementById(i);
   else if (document.all) // old IE model, needed for very old IE versions
     return document.all[i];
   else if (document.layers) // old netscape model, Netscape 4 etc.
     return document.layers[i];  

   return null;
}
除非你支持IE<5.5或Netsape<6,否则你不应该诚实地支持这两个版本-你今天应该避免这种形式的功能检测

这种代码在今天非常常见,用于执行特征检测。我想强调一个事实,那就是代码在编写时是最佳实践,但在今天是无用的。例如,今天的情况如下:

if ( !window.requestAnimationFrame ) {
    window.requestAnimationFrame = ( function() {
        return window.webkitRequestAnimationFrame ||
        window.mozRequestAnimationFrame ||
        window.oRequestAnimationFrame ||
        window.msRequestAnimationFrame ||
        function(callback,element) {
            window.setTimeout( callback, 1000 / 60 );
        };
} )();
}

只对较新的API执行完全相同的操作。

“看起来它正在检查该函数是否存在,但我不太确定。”BingoIt距离我上次使用JavaScript大约5年了,但是是的,我记得旧浏览器和
document.getElementById
有问题。我想他只是想让它在旧的浏览器上工作。有人解释了文档。在这里-它涵盖了netscape navigator等getElementById的方法。用于以不同方式实现此对象的不同浏览器。我认为这不再重要了,getElementById应该可以正常工作。正如Axel所说,这是一个检查。不同浏览器对JavaScript的支持差异很大。这意味着用户在继续编写代码之前必须进行大量的检查。基本上,该代码检查是否支持
getElementById()
选择器。如果未找到,则检查是否支持
文档.all
。最后,它检查对
document.layers
的支持。这可以追溯到第一个JavaScript库出现之前。这样的记忆。