Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/476.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中分配不存在的变量_Javascript_Properties_Variable Assignment - Fatal编程技术网

在javascript中分配不存在的变量

在javascript中分配不存在的变量,javascript,properties,variable-assignment,Javascript,Properties,Variable Assignment,我发现了一行JavaScript代码,我不清楚它是如何工作的。假设window对象之前没有设置任何app属性: var app = window.app || {}; 问题是-为什么JS不对window对象不存在的app属性抛出任何引用错误,而是将window.app创建为{}-为什么?如果我执行以下行: var a = b || {} 我得到ReferenceError:b没有定义,我同意。此外,我确实理解xxx |{}表达式-如果它不是falsy,则返回第一个元素,否则返回第二个元素。例

我发现了一行JavaScript代码,我不清楚它是如何工作的。假设
window
对象之前没有设置任何
app
属性:

var app = window.app || {};
问题是-为什么JS不对
window
对象不存在的
app
属性抛出任何引用错误,而是将
window.app
创建为
{}
-为什么?如果我执行以下行:

var a = b || {}

我得到
ReferenceError:b没有定义,我同意。此外,我确实理解
xxx |{}
表达式-如果它不是falsy,则返回第一个元素,否则返回第二个元素。例如,使用空白对象初始化未定义的对象(例如,JS中的默认函数参数)非常有用。

在尝试使用未声明的变量时,仅会出现引用错误,而对于未定义的属性,则不会出现引用错误

|
如果左侧为真值,则返回左侧,否则返回右侧

window.app
未定义,因此为假值。因此,它返回右侧:
{}

计算or语句的结果然后分配给
app


如果
app
是一个全局变量(即未在函数中声明),则将创建
窗口
对象的属性
app
。这不是在测试中使用
window.app
的结果。这正是全局变量的工作方式。

只有在尝试使用未声明的变量时才会出现引用错误,而对于未定义的属性则不会

|
如果左侧为真值,则返回左侧,否则返回右侧

window.app
未定义,因此为假值。因此,它返回右侧:
{}

计算or语句的结果然后分配给
app


如果
app
是一个全局变量(即未在函数中声明),则将创建
窗口
对象的属性
app
。这不是在测试中使用
window.app
的结果。这正是全局变量的工作方式。

只有在尝试使用未声明的变量时才会出现引用错误,而对于未定义的属性则不会

|
如果左侧为真值,则返回左侧,否则返回右侧

window.app
未定义,因此为假值。因此,它返回右侧:
{}

计算or语句的结果然后分配给
app


如果
app
是一个全局变量(即未在函数中声明),则将创建
窗口
对象的属性
app
。这不是在测试中使用
window.app
的结果。这正是全局变量的工作方式。

只有在尝试使用未声明的变量时才会出现引用错误,而对于未定义的属性则不会

|
如果左侧为真值,则返回左侧,否则返回右侧

window.app
未定义,因此为假值。因此,它返回右侧:
{}

计算or语句的结果然后分配给
app



如果
app
是一个全局变量(即未在函数中声明),则将创建
窗口
对象的属性
app
。这不是在测试中使用
window.app
的结果。这就是全局变量的工作方式。

未定义和
未定义在JS
中是两个不同的东西:)
“相反,它将
窗口.应用程序
创建为
未定义
”-您在哪里看到这种情况?上面的代码将创建
window.app
{}
@Ian对不起,你说得对,一个输入错误-我已经更新了我的问题。@tkoomzaaskz啊,我明白了,没有problem@tkoomzaaskz无处不在:.
未定义
未定义
在JS
中是两个不同的东西:)
“相反,它将
window.app
创建为
undefined
”-您在哪里看到这种情况?上面的代码将
window.app
创建为
{}
@Ian对不起,你说得对,一个打字错误-我已经更新了我的问题。@tkoomzaaskz啊,我明白了,没有problem@tkoomzaaskz无处不在:.
未定义
未定义
在JS
中是两个不同的东西:)
“相反,它将
窗口创建为
未定义
“-你在哪里看到这种情况?上面的代码将创建
window.app
{}
@Ian对不起,你说得对,一个输入错误-我已经更新了我的问题。@tkoomzaaskz啊,我明白了,没有problem@tkoomzaaskz无处不在:.
未定义
未定义
在JS
中是两个不同的东西:)
“相反,它将
window.app
创建为
undefined
”-您在哪里看到这种情况?上面的代码将
window.app
创建为
{}
@Ian对不起,你说得对,一个打字错误-我已经更新了我的问题。@tkoomzaaskz啊,我明白了,没有problem@tkoomzaaskz处处:。说明:如果您试图实际使用未定义的属性,确实会出现错误…不,不会。如果您从属性中获取
未定义的值,并尝试使用它执行某些操作,那么您将得到一个错误(但可能不是引用错误)。问题本身表明,您在尝试将该值分配到其他位置时没有遇到错误。您的回答没有解释为什么将
{}
分配给应用程序…我仍然不明白。@tkoomzaaskz:但在您的问题中,您声明“我确实理解
xxx |{}”
expression-如果第一个元素不是falsy,则返回第一个元素,如果不是falsy,则返回第二个元素