或JavaScript对象声明的符号

或JavaScript对象声明的符号,javascript,Javascript,我刚开始阅读一些JavaScript项目。大多数以.js文件开头的文件都声明了如下对象: window.Example || { bleh: "123"; blah: "ref" } |符号在这里做什么?该代码缺少一个重要的部分-变量声明: var something = window.Example || { bleh: "123", blah: "ref" } 这大致可以翻译为“将某物设置为窗口。示例,除非它不存在,否则将其设置为这个新对象”。Javascript中的对象

我刚开始阅读一些JavaScript项目。大多数以.js文件开头的文件都声明了如下对象:

window.Example || {
bleh: "123";
blah: "ref"
}

|
符号在这里做什么?

该代码缺少一个重要的部分-变量声明:

var something = window.Example || {
    bleh: "123",
    blah: "ref"
}

这大致可以翻译为“将
某物
设置为
窗口。示例
,除非它不存在,否则将其设置为这个新对象”。

Javascript中的对象是真实的,因此表达式的计算结果要么是
窗口。如果
窗口,则是示例
或默认对象。示例
是虚假的(或未定义的)。例如:

var x = window.Example || {foo: 'bar'};
// x = {foo: 'bar'}, since window.Example is undefined

window.Example = {test: 1};

var y = window.Example || {foo: 'bar'};
// y = {test: 1}, since window.Example is truthy (all objects are truthy)

请阅读有关truthy/falsy和短路评估的详细说明。

JavaScript中的
|
运算符类似于其他类似C语言中的“or”运算符,但它明显不同。这真的意味着:

  • 计算左侧的子表达式
  • 如果强制为布尔值时,该值为
    true
    ,则该子表达式的值(强制为布尔值之前)是
    |
    表达式的值
  • 否则,计算右侧子表达式并将其值作为
    | |
    表达式的值
  • 因此,习惯用法是初始化可能已经初始化的内容:

    var something = window.something || defaultValue;
    

    只是意味着,“检查“something”是否是带有真实值的
    window
    对象的属性,如果不是,则将其设置为defaultValue。”

    这是无效的JavaScript。但是这个问题以前已经被问过一千次了,所以。如果您的
    窗口中有
    属性,请小心使用此技术。例如
    属性可以是0、空字符串、false等@MikeSamuel感谢您纠正我的打字错误:-)@user1240679感谢您让我知道!它需要一个尾随的正斜杠哈哈。我修好了。