Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/364.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么有些人分配JavaScript变量,比如var example=window.example |{};_Javascript - Fatal编程技术网

为什么有些人分配JavaScript变量,比如var example=window.example |{};

为什么有些人分配JavaScript变量,比如var example=window.example |{};,javascript,Javascript,我看到有人分配JavaScript变量,例如: var example = window.example || {}; 我想知道为什么会这样。是的,我已经知道| |是OR运算符{};是一个对象文字 如果有人能回答,那就太好了,谢谢 攻击和JavaScript返回最后一个计算表达式的事实 如果LHS是truthy,那么整个表达式都满足(它是|)并且JavaScript返回LHS 如果LHS为falsy,则需要评估RHS,因为它位于逻辑or运算符的另一侧(| |)。即使RHS是falsy,也会返回

我看到有人分配JavaScript变量,例如:

var example = window.example || {};
我想知道为什么会这样。是的,我已经知道| |是OR运算符{};是一个对象文字

如果有人能回答,那就太好了,谢谢

攻击和JavaScript返回最后一个计算表达式的事实

如果LHS是truthy,那么整个表达式都满足(它是
|
)并且JavaScript返回LHS

如果LHS为falsy,则需要评估RHS,因为它位于逻辑or运算符的另一侧(
| |
)。即使RHS是falsy,也会返回它,因为它是最后一个计算的表达式

它通常用于为函数提供默认参数值

var sayHello = function(name) {
    name = name || 'Alex';
    alert('Hello ' + name);
}

这是一种简写的语法

var example = (typeof window.example == 'undefined') ? {} : window.example;
显然,
window.example
只是变量
example

注意:这是一个略微的谎言-它不测试“未定义”,它测试“不真实”(空字符串、0、null等)


如果
window.example
包含任何真实值,则将
example
设置为该值。如果没有(例如,因为它尚未定义),它将获得一个默认值
{}
(空对象)。

这通常在多个脚本共享同一对象时使用

每个脚本都包含以下声明:

var example = window.example || {}; 
当第一个脚本运行时,示例不存在,因此上面的表达式创建一个空对象(window.example的计算结果为false)

然后,当第一个表达式变为true时,其他脚本将重用现有元素

如果您不知道脚本的执行顺序(异步加载或可以移动的小部件),这尤其有用

[编辑]为了跟进您的上述评论,这可能适用于其他JavaScript对象:

Array: var exampleArray = window.exampleArray || [];

String: var exampleString = window.exampleString || "";

如果您知道
|
的功能,那么您就拥有了所需的所有事实。如果
window.example
未定义怎么办?如果它已经有值了怎么办?我明白了。所以,如果我想让它成为一个数组文本,我可以选择:var example=window.example | |[];?不仅仅是对象文字,对吗?是的,数组很好。您可以对任何变量类型执行此操作,包括
| |
左侧和右侧的不同类型,例如
var example=someNumber | | someString
还有一件事,这可以用在函数中声明的变量中吗?这不是有点像:var example=window.functionExampleIsDeclaredIn.example | |{};?你能描述一下“短路评估利用”是什么意思吗?@JamesHay链接的维基百科文章有丰富的信息。“然后整个表达式是
true
”-不,整个表达式是truthy-如果整个表达式是
true
,那么将返回它而不是RH操作数。(我知道你知道这一点,我只是在措辞上很挑剔。)@nnnnnn好的,我会改成:)“满意”?在短路评估方面甚至更好+1.
var-example=window.example更简捷?window.example:{}是的,但是当我们解释事情的时候,让我们尽可能地让它容易理解,嗯?:)当然可以,但可能会改变速记语法,使其更为冗长……我不是那么挑剔:)请随意编辑它,但它似乎太迂腐了,我不必担心lol“not truey”?你是说“法尔西”?