当前位置: 首页 > Web前端 > CSS

(void0)andundefinedXiaojiujiu

时间:2023-03-31 10:49:52 CSS

前言源码链接这是underscore.js源码解析的第一篇文章。为什么选择写这篇文章?其实源码中主要有两个下划线。obj===void0的判断贯穿整个源码。第一次看到这个写法,不知道是什么意思,就想了解一下。我决定写一个系列来彻底分析下划线。希望由浅入深,软软的捡柿子,先从简单的开始(?)写完这篇文章希望达到什么样的效果?解释为什么在一些简单的应用中使用(void0)而不是undefined(void0)。什么是void0,什么是void0?为什么可以直接替换undefined关键字进行判断呢?我们可以看看mdn上的解释void运算符对给定的表达式求值然后返回undefined。void运算符计算给定的表达式然后返回undefined什么?执行某个表达式,最后得到undefined,如果表达式执行的结果是2、3、8,毛主席万岁,会不会也返回undefined?答案是:是的。他就是这么个东西,不管你表情写什么,最后我都给你undefined。什么是未定义的?undefined是js原有的类型值之一,也是全局对象window的一个属性。可以在一些低级浏览器中修改,也可以在本地范围内修改。首先我们看一下这段破代码varundefined='qianlongo'alert(undefined)最后的控制台输出是什么?undefined:qianlongo,如果没有图片,你说js,然后浏览器运行后截图一些。ie7ie8ie9的测试结果未定义。ie10chrome测试结果在最新版本58.0.3029.81未定义。firefox最新52.0.2版本测试结果未定。浏览器最新版本39.0.2256.48测试结果未定。可见老版本的ie就是这么任性。你可以直接在全局范围内改写undefined。也就是说,当你想知道一个变量是否等于undefined时,只做这个判断已经不安全了。if(obj===undefined){//xxx}接下来我们再看一个jsvartestUndefined=function(){varobj={}varundefined='undescore'varwindow={'undefined':'qianlongo'}console.log(window)//{'undefined':'qianlongo'}console.log(undefined)//下划线console.log(window.undefined)//qianlongoconsole.log(obj.name===undefined)//falseconsole.log(obj.name===window.undefined)//falseconsole.log(obj.name===(void0))//true}testUndefined()可以断定window,undefined本身就是本地的作用域可以重写。同样的道理,如果在局部范围内也使用下面的代码来判断obj是否undefined,也是有风险的。if(obj===undefined){//xxx}为什么要用void0而不是undefined为什么要用void0而不是undefined,根据上面的介绍,原因就在这里,void0不管何时何地,接下来,结果是未定义的,这正是我们所需要的。所以改写上面的判断,当然void0比undefined短还有一个原因if(obj===void0){//xxx}void0的一些其他应用填充a标签的href

xxxx上面代码用#号填入ataghref属性实际上有一些缺点。比如当用户点击的时候,页面会回到顶部(网上有人说会刷新页面,但是我自己好像试不出来)。想象一下,我滚动,滚动,滚动到xxxx是多么的辛苦我不小心点到了这几个字,页面瞬间又回到了顶部。你要哭死吗?所以常见的解决方案是
xxxx包含没有src的图像的有效方法是什么?在这个问题中提到用void0代替image标签的空src属性会减少页面请求(是否属实需要考证)。在第一篇的最后,我就暂时写完了,欢迎大家吐槽和评??论。参考文章链接:Whatdoes"javascript:void(0)"mean?differencebetween"void0"and"undefined"voidoperator