在javascript中分配不存在的变量
我发现了一行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,则返回第一个元素,否则返回第二个元素。例
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,则返回第二个元素