写一个更好的JavaScript程序的未定义部分(中间)
前面写的依然是消歧声明:本文中的JavaScript是指一般意义上的JavaScript,并不仅仅局限于“自称JavaScript”的运行环境;“全局变量”和“全局对象的属性”指的是同一个东西,但是它们被用在不同的术语中只是因为它们与上下文相匹配,所以我不会在文本中单独解释它们。“声明”指通过“var”语句声明变量和/或函数定义及其签名;“变量”是指由“var”语句声明或试图在函数体中访问的命名参数;“undefined”是指“undefined”(全局或局部变量)的值,而“undefined”是指type(.)===“未定义”;“输出”是一个向我们显示传入参数的函数,实际上也是一种“告警”。首先,我们介绍一种类似于void(0)的方法。我们知道,如果我们在JavaScript中尝试访问任何没有返回值的函数的执行结果,就会得到“undefined”的概念值,这样就可以做到:myVar=function(){ }(;这个方法的原理是创建一个空函数并获取它的(不存在的)返回值。显然,我们会得到“未定义”的概念值,这个原理与void(0)相同。需要注意的是,该调用方法只能在function关键字不在语句开头时使用。如果需要直接调用匿名函数,应该这样做:(function(){//code here })();如果我们不想污染全球范围,我们可以用这种方式创建一个闭包——。这个方法是在不知道void(0)执行效果的情况下诞生的。既然知道void(0),就不需要这个方法了。第二种不寻常的方式是访问window.undefined,就像下面这样:output(myvar===window . undefined);myVar=window.undefined这种方法的原理是:如果在JavaScript的运行环境中预定义了undefined的值,就可以直接访问window.undefined如果undefined的值不是预定义的,window.undefined将返回“undefined”的概念。——的价值还是我们想要的。访问形式从“全局变量”变成“属性”后,脚本引擎不会认为这是一个意外的操作,所以代码可以正确执行。但是这种方法还是有一些缺点:undefined并不是所有JavaScript引擎中的保留字,这意味着它会被污染,会影响我们程序的运行效果;直接访问全局对象的属性效率非常低,应该避免。因此,接下来,我将介绍我见过的最有趣的方法:——局部声明未定义的变量!它是这样工作的:函数my func(){ var undefined;//这里有些代码输出(myVar===undefined);myVar=未定义;}在这里,我想提一下,对于“早期浏览器中没有未定义”的说法,有些人有不同的理解,认为上述做法不可行。然而,我认为这种观点是错误的。在我的印象中(大约2003年),虽然IE5没有预定义undefined,但它并不影响我们的非赋值语句。毕竟是很多年前的事了,记忆模糊。为了避免想当然造成的错误,我特意安装了Windows 98进行实验:。
上面两张图片被QQ屏幕截取,不知道为什么变成了JPG,下面一张被OneNote截取。
可以得出结论,不必担心没有分配声明的未定义变量。如前一篇文章所述,在JavaScript中,如果试图读取一个未预定义或未声明的变量,将抛出“不存在(未定义)”的异常,因此早期浏览器中直接访问未定义的操作可能会失败。这种(异常)现象可能是为了方便故障排除而故意设计的;对于声明的变量,即使没有赋值,在读取时也不会抛出异常。——声明后,表示开发者确定有“这个东西”。上述在函数作用域内声明局部变量未定义的方法,既解决了引用未声明的变量会导致异常的问题,又避免了全局变量污染的影响。还替换了void(0),乍一看是未知的小伎俩,不仅不会造成不易察觉的拼写错误隐患,还提高了操作效率。——是一举取胜的妙招!所以学了这么多,发现最后介绍的方法是居家旅行杀人的首选。如果有人问“未定义应该如何使用?”现在我们可以回答:用就行!最后,有人不禁要问:为什么我这个系列的代码示例都用三个等号的“严格相等”来比较?两个等号的普通“相等”怎么了?这是本系列下一部分要解释的内容:undefined的适用场合及其各种等价形式。
版权声明:写一个更好的JavaScript程序的未定义部分(中间)是由宝哥软件园云端程序自动收集整理而来。如果本文侵犯了你的权益,请联系本站底部QQ或者邮箱删除。