猿问

“var foo=foo颇具{}”(将一个变量或空对象赋值给该变量)意味着什么?

在Javascript中,“var foo=foo颇具{}”(将一个变量或空对象赋值给该变量)意味着什么?

在查看一个在线源代码时,我在几个源文件的顶部发现了这一点。

var FOO = FOO || {};FOO.Bar = …;

但我不知道是什么|| {}的确如此。

我知道呀{}等于new Object()我觉得||用于“如果它已经存在,请使用它的值,否则使用新对象。

为什么我会在源文件的顶部看到这个?


白衣染霜花
浏览 308回答 3
3回答

慕的地8271018

你对…的意图的猜测|| {}相当接近。当在文件顶部看到此特定模式时,将用于创建命名空间,即一个命名对象,在该对象下可以创建函数和变量,而不会对全局对象造成不适当的污染。原因为什么它的用途是,如果您有两个(或更多)文件:var&nbsp;MY_NAMESPACE&nbsp;=&nbsp;MY_NAMESPACE&nbsp;||&nbsp;{};MY_NAMESPACE.func1&nbsp;=&nbsp;{}和var&nbsp;MY_NAMESPACE&nbsp;=&nbsp;MY_NAMESPACE&nbsp;||&nbsp;{};MY_NAMESPACE.func2&nbsp;=&nbsp;{}它们都共享相同的命名空间-不管这两个文件的加载顺序如何-您仍然可以得到func1和func2正确定义在MY_NAMESPACE对象正确。加载的第一个文件将创造初值MY_NAMESPACE对象,则随后加载的任何文件都将增额物体。有益的是,这也允许异步加载共享相同命名空间的脚本,这可以提高页面加载时间。如果<script>标记有defer属性集您无法知道它们的解释顺序,因此如前所述,这也解决了这个问题。

不负相思意

var&nbsp;AEROTWIST&nbsp;=&nbsp;AEROTWIST&nbsp;||&nbsp;{};基本上这一行的意思是设置AEROTWIST变量的值。AEROTWIST变量,或将其设置为空对象。双管||是OR语句,只有当第一部分返回false时才执行OR的第二部分。因此,如果AEROTWIST已经有了一个值,它将被保留为该值,但是如果它以前没有被设置过,那么它将被设置为一个空对象。基本上和这样说是一样的:if(!AEROTWIST)&nbsp;{var&nbsp;AEROTWIST={};}希望能帮上忙。

慕虎7371278

另一种常用的方法是为未定义的函数参数设置默认值:function&nbsp;display(a)&nbsp;{ &nbsp;&nbsp;a&nbsp;=&nbsp;a&nbsp;||&nbsp;'default';&nbsp;//&nbsp;here&nbsp;we&nbsp;set&nbsp;the&nbsp;default&nbsp;value&nbsp;of&nbsp;a&nbsp;to&nbsp;be&nbsp;'default' &nbsp;&nbsp;console.log(a);}//&nbsp;we&nbsp;call&nbsp;display&nbsp;without&nbsp;providing&nbsp;a&nbsp;parameterdisplay();&nbsp;//&nbsp;this&nbsp;will&nbsp;log&nbsp;'default'display('test');&nbsp; &nbsp;&nbsp;//&nbsp;this&nbsp;will&nbsp;log&nbsp;'test'&nbsp;to&nbsp;the&nbsp;console其他程序编制中的等价物通常是:function&nbsp;display(a&nbsp;=&nbsp;'default')&nbsp;{ &nbsp;&nbsp;//&nbsp;...}
随时随地看视频慕课网APP

相关分类

JavaScript
我要回答