我正在查看一些JavaScript文件。他们中有些人有东西在一开始有趣:“|| {}”在JavaScript文件的开头是什么意思
var something = something || {};
哪里“东西”显然是一种varable的名字。这是什么意思?它有什么作用?事实上,一个文件有这个,没有别的。
我正在查看一些JavaScript文件。他们中有些人有东西在一开始有趣:“|| {}”在JavaScript文件的开头是什么意思
var something = something || {};
哪里“东西”显然是一种varable的名字。这是什么意思?它有什么作用?事实上,一个文件有这个,没有别的。
这是“something”变量的默认值。 所以如果有东西没有初始化,它最终会包含一个空白对象({})。
换言之,something equals(sometging或{}),其中undefined的计算结果为false,因此返回{}。
这是一种常见模式,用于确保变量存在,如果不存在,则将其设置为已知的初始值,以便稍后使用。特别是:
如果变量something
已经有值不是falsy,这条线离开变量的值保持不变。
如果此变量something
没有值或者是虚假的,则此行将该变量的值设置为{}
。
在向脚本中的对象添加属性时,您会看到很多这种模式。假设您曾为Acme公司工作,并且您有许多脚本文件可与其他人的代码进行集成。 Acme
对象会有一堆属性和一堆函数。在某些脚本中,您可能需要向该对象添加属性。但你不能只说
Acme.TIMEOUT = 300;
在文件的顶部,因为该变量可能不存在。但是如果确实存在,则要使用现有变量。如果没有,则需要先创建一个新对象。
所以
var Acme = Acme || {};
将保证它的存在,然后你可以使用它。
不过要小心。我不喜欢这种模式,因为在现代JavaScript中(我们使用let
和const
而不是var
),具有未定义的变量会导致抛出错误。你应该说:
window.Acme = window.Acme || {};
,如果你是在浏览器中。原因是它明确表示Acme
是window
对象的属性。引用一个对象的不存在的属性是无害的,你只需要undefined
。但引用一个不存在的变量会在现代JavaScript中引发错误(或者,如果不是,它应该)。
'var Acme = Acme || {};'不会抛出错误。 'Acme'变量保证存在,因为它之前有'var'。 – JLRishe
完全正确,谢谢。它使用'let'和'const'失败。恕我直言,使用这种模式只是为了利用'var'高度宽容的语义。虽然var _does_以这种方式工作,但它可能不应该。:)我已经更新了我的答案,以便将我使用“现代”JavaScript的含义限定为“使用let和const而不是var”,就像我应该在开始时所做的一样。 –