网页申请qq:什么意思:qq= qq| | {}(what does qq mean)

我已经下载了一个 JavaScript 脚本和第一行之一是:

 qq = qq || {};

这是什么意思?

23

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

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

7

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

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

(有关术语的含义,请参见Truthy and Falsy in JavaScript。)

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

如果qq最初计算为 Falsy 值,则qq || {}的结果为{},因此({},Truthy 值)被分配给qq。否则,01的结果最初是0

这是一个惯用后卫,用于轻松防止“未定义”的参数,属性等。

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

if (!qq) {
  qq = {}
}

然而,如果qq最初是 Falsy,则后一种情况只会分配给qq;形式qq = qq || {}总是进行分配,但是这样的“开销”是如此陈腐,不应该用作不使用该方法的理由。

快乐编码

4

说明:

    qq = qq || {};
// ^^ is equal to iself, but if it does not exist, 
//       then it is equal to an empty object

例如:

for(var i = 0; i < 5; i++){
    qq = qq || {};
    qq[i] = 'something!';
}
Fiddle:http://jsfiddle.net/maniator/dr5Ra/
3

到目前为止,这里的答案遗漏了一个重要的点。OP 说脚本开头

qq = qq || {};

如果是这样,并且如果qq没有在任何地方声明(全局范围内没有var qq,没有window.qq = ...),则该代码将引发ReferenceError。它不仅会默认qq

相反,如果代码是:

var qq = qq || {};

这将是确实非常不同。它会这样做:

var qq部分将在脚本中的任何分步代码之前处理。如果已经有一个全局qq变量,它将是一个无操作。如果没有,它将创建一个具有初始值undefined的全局qq变量。

当逐步执行到达该行时,分配的右侧将按如下方式进行评估:

如果qq的值为“falsey”(0,"",undefined,false,NaN,或null),则表达式qq || {}将变为{}

如果qq具有“truthy”值(任何不是 falsey 的值),则表达式的值为qq

(有关更多详细信息:JavaScript's Curiously-Powerful || Operator。)

右侧的结果分配给qq

var使差异。

本站系公益性非盈利分享网址,本文来自用户投稿,不代表边看边学立场,如若转载,请注明出处

(162)
Win7镜像文件多大:Win7上的 XAMPP太慢
上一篇
网页查询ip:如何优化 IP地址搜索查询(ip query)
下一篇

相关推荐

发表评论

登录 后才能评论

评论列表(2条)