这是什么意思:qq = qq || {}?

Pat*_*ins 10 javascript

我已下载了一个javascript脚本,其中一行是:

 qq = qq || {};
Run Code Online (Sandbox Code Playgroud)

这是什么意思?

Kzq*_*qai 23

它检查qq预先存在的truthy值,否则(||)将其设置为空对象({}).

从本质上讲,它的目的是快速确保对qq的任何进一步引用都不会被定义,因此您可以检查对象的属性而不会破坏脚本,因为该变量甚至不是第一个中的有效对象地点.

  • 它检查它是否是"虚假的"而不是简单地是否定义.这通常有效,因为`undefined`是一个假值.但如果它被定义并且它是一个假值,那么它将覆盖现有值.`var qq = false; qq = qq || {}; q // {}` (6认同)
  • **这不会检查"变量的存在".**如果变量(或全局属性)未绑定,则*将导致异常*.在这个答案中,"存在"这个词根本不应该出现.考虑从"检查变量值..."或类似开始. (2认同)

小智 7

在JavaScript中,||(logical-or)运算符具有以下逻辑表:

A      | B          | A || B
Truthy | Don't care | A   (guaranteed to be Truthy)
Falsy  | Don't care | B   (may be Truthy or Falsy)

(请参阅JavaScript中的Truthy和Falsy,了解这些术语的含义.)

因此,在以下情况下qq = qq || {}:

如果qq最初评估为Falsy值,则结果为qq || {}is {},因此({}Truthy值)被分配给qq.否则,qq最初是Truthy值,并且qq || {}(结果是评估的结果qq)被分配给qq.

这是一个惯用的守卫,用于轻松防止"未定义"的参数,属性等.

有些人可能更喜欢使用以下近似等效的构造:

if (!qq) {
  qq = {}
}
Run Code Online (Sandbox Code Playgroud)

这后一种情况下,然而,仅分配给qqqq最初Falsy; 表单qq = qq || {}总是进行赋值,但这种"开销"是如此陈腐,不应该用作不使用该方法的理由.

快乐的编码.