Javascript 这个JS代码是什么意思?

Javascript 这个JS代码是什么意思?,javascript,Javascript,可能重复: 我无意中发现了这句话,似乎不明白它的意思 var G = G || {}; 有什么想法吗?G=G,如果G不存在,则将其创建为空对象。G=G,如果G不存在,则将其创建为空对象。G是G,如果G未定义,则为新对象。G是G,如果G未定义,则为新对象。如果G当前为任何

可能重复:

我无意中发现了这句话,似乎不明白它的意思

var G = G || {};

有什么想法吗?

G=G,如果G不存在,则将其创建为空对象。

G=G,如果G不存在,则将其创建为空对象。

G是G,如果G未定义,则为新对象。

G是G,如果G未定义,则为新对象。

如果
G
当前为任何错误值,然后将对象文本分配给
G

“假”值是

  • 未定义
  • null
  • NaN
  • false
  • 0
正在使用的运算符是逻辑OR运算符

它的工作方式是首先计算其左操作数。如果该操作数有一个“truthy”值(任何非假值),它将返回该值,并且不计算(短路)第二个操作数

如果左操作数为“false”,则返回右操作数,而不考虑其值


G
为假的示例

//      v--- Evaluate G. The value of G is the "falsey" value undefined...
var G = G || {};
//            ^--- ...so evaluate and return the right hand operand.
示例,其中
G
是真实的

G = 123;

//      v--- Evaluate G. The value of G is a "truthy" value 123...
var G = G || {};
//      ^--- ...so return 123, and do not evaluate the right hand operand.

如果
G
当前是任何的“假”值,则对象文字将被分配给
G

“假”值是

  • 未定义
  • null
  • NaN
  • false
  • 0
正在使用的运算符是逻辑OR运算符

它的工作方式是首先计算其左操作数。如果该操作数有一个“truthy”值(任何非假值),它将返回该值,并且不计算(短路)第二个操作数

如果左操作数为“false”,则返回右操作数,而不考虑其值


G
为假的示例

//      v--- Evaluate G. The value of G is the "falsey" value undefined...
var G = G || {};
//            ^--- ...so evaluate and return the right hand operand.
示例,其中
G
是真实的

G = 123;

//      v--- Evaluate G. The value of G is a "truthy" value 123...
var G = G || {};
//      ^--- ...so return 123, and do not evaluate the right hand operand.

这是我猜测的,但这对我来说毫无意义,因为“var”部分。我的意思是,G变量定义在同一行中,给它G | |{}的值有什么意义?它和var G={};,不是一样吗@卢帕克斯:是的,你是对的,如果没有办法初始化
G
,那么
|
就没有什么意义了。有时人们不必要地重新声明变量,或者声明已经声明为参数的变量,所以这里可能就是这样……请注意,
undefined
是声明变量的默认值。undefined | |{}==false不是吗?空对象的计算结果是否为真?这是我不知道的…@Loupax:不,它将操作数计算为“truthy”或“false”,但它总是返回操作数本身。假设第一个操作数是
{foo:'bar'}
,它计算它的“truthyness”,确定它确实是“truthy”,然后返回对象。因此,虽然它考虑了它的真实性,但它从不强制操作数为布尔值。这是我猜测的,但对我来说没有意义,因为“var”部分。我的意思是,G变量定义在同一行中,给它G | |{}的值有什么意义?它和var G={};,不是一样吗@卢帕克斯:是的,你是对的,如果没有办法初始化
G
,那么
|
就没有什么意义了。有时人们不必要地重新声明变量,或者声明已经声明为参数的变量,所以这里可能就是这样……请注意,
undefined
是声明变量的默认值。undefined | |{}==false不是吗?空对象的计算结果是否为真?这是我不知道的…@Loupax:不,它将操作数计算为“truthy”或“false”,但它总是返回操作数本身。假设第一个操作数是
{foo:'bar'}
,它计算它的“truthyness”,确定它确实是“truthy”,然后返回对象。所以当它考虑它的真实性时,它从不强迫操作数为布尔值。哦,我明白了!如果我已经在脚本的其他部分声明了G,G不会被覆盖?对。另外,正如@am-not-i-am所建议的,它不仅仅是“未声明”,而是“未定义”、“错误”,等等。哦,我明白了!如果我已经在脚本的其他部分声明了G,G不会被覆盖?对。此外,正如@am-not-i-am所暗示的,它不仅仅是“未声明”,而是“未定义”、“错误”等。