Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/421.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 - Fatal编程技术网

为什么在javascript中引用不存在的对象属性不会';不返回引用错误?

为什么在javascript中引用不存在的对象属性不会';不返回引用错误?,javascript,Javascript,如果我试图引用一个不存在的变量,我会在JavaScript中得到ReferenceError。为什么引用不存在的对象属性会返回“undefined”? 以下是一些代码,前提是我在浏览器中编写: alert(a); ReferenceError: a is not defined //error is thrown alert({}.a) undefined //no error 这就是语言的工作原理。它基于对象的方法非常灵活,您可以在运行时动态添加、更新和删除对象的属性。访问当前不存在的文件应

如果我试图引用一个不存在的变量,我会在JavaScript中得到ReferenceError。为什么引用不存在的对象属性会返回“undefined”? 以下是一些代码,前提是我在浏览器中编写:

alert(a);
ReferenceError: a is not defined //error is thrown
alert({}.a)
undefined //no error

这就是语言的工作原理。它基于对象的方法非常灵活,您可以在运行时动态添加、更新和删除对象的属性。访问当前不存在的文件应该会产生
undefined
,而不是引发异常。例如,这允许检查单个表达式中是否存在和类型:

if (prop in obj && typeof obj[prop] == "function") obj[prop]();
// can be written shorter:
if (typeof obj[prop] == "function") obj[prop]();
您可以不使用它而获得值。在大多数情况下,使用未定义的
将抛出


相反,变量是在其作用域中静态声明的。访问未声明的变量总是一个错误,这使抛出
ReferenceError
s合法化。

这就是语言的工作方式。它基于对象的方法非常灵活,您可以在运行时动态添加、更新和删除对象的属性。访问当前不存在的文件应该会产生
undefined
,而不是引发异常。例如,这允许检查单个表达式中是否存在和类型:

if (prop in obj && typeof obj[prop] == "function") obj[prop]();
// can be written shorter:
if (typeof obj[prop] == "function") obj[prop]();
您可以不使用它而获得值。在大多数情况下,使用未定义的
将抛出


相反,变量是在其作用域中静态声明的。访问未声明的变量总是一个错误,这使抛出
ReferenceError
s合法化。

您能发布一些代码吗?如果我是一个赌徒,我会说它确实存在,但不是空的就是空的。你用控制台调试过吗?你是在问为什么语言是这样设计的吗@Mikehomechko-我敢打赌:不存在的属性确实返回未定义的
属性,而
null的属性返回
null
(如果“empty”是指返回空字符串的空字符串);让事情变得更加混乱的是,确实存在但已分配值
undefined
的属性也返回
undefined
@nnnnnnnn我想他是…@nnnnnn您还有1分钟的时间来扩展您的注释。。。走,走,走D@nnnnnn哦,哇,真奇怪,我从来没有注意到这一点+为了把我从母体中唤醒,我的生活一直是个谎言!你能发一些代码吗?如果我是一个赌徒,我会说它确实存在,但不是空的就是空的。你用控制台调试过吗?你是在问为什么语言是这样设计的吗@Mikehomechko-我敢打赌:不存在的属性确实返回未定义的
属性,而
null的属性返回
null
(如果“empty”是指返回空字符串的空字符串);让事情变得更加混乱的是,确实存在但已分配值
undefined
的属性也返回
undefined
@nnnnnnnn我想他是…@nnnnnn您还有1分钟的时间来扩展您的注释。。。走,走,走D@nnnnnn哦,哇,真奇怪,我从来没有注意到这一点+为了把我从母体中唤醒,我的生活一直是个谎言!谢谢,但我都知道。我对“幕后”过程感兴趣,例如,我建议阅读,特别是关于对象的第8.6、8.7和8.12节,关于运算符的第11.2.1和11.4.1节,以及关于变量和范围的第10[.2]节。然而,规范没有解释为什么,只是说明了什么。请注意,“ReferenceError”仅在严格模式下存在。中提供了严格模式的更改摘要。严格模式限制无法解析的引用。对象属性不是无法解析的引用。谢谢,但我知道所有这些。我对“幕后”过程感兴趣,例如,我建议阅读,特别是关于对象的第8.6、8.7和8.12节,关于运算符的第11.2.1和11.4.1节,以及关于变量和范围的第10[.2]节。然而,规范没有解释为什么,只是说明了什么。请注意,“ReferenceError”仅在严格模式下存在。中提供了严格模式的更改摘要。严格模式限制无法解析的引用。对象属性不是无法解析的引用。