首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >为什么读取属性有时会在javascript中抛出错误?

为什么读取属性有时会在javascript中抛出错误?
EN

Stack Overflow用户
提问于 2014-05-15 19:40:24
回答 5查看 482关注 0票数 3

假设我有一些变量:

代码语言:javascript
复制
var s = 's', i = 0, o = {}, a = [], n = null, nan = NaN, u;

如何理解当阅读x.p TypeError**?**会返回未定义的,以及何时会抛出

代码语言:javascript
复制
s.p;  // undefined
i.p;  // undefined
o.p;  // undefined
a.p;  // undefined
n.p;  // TypeError!
nan.p;  // undefined
u.p;  // TypeError!

nullundefined是这种情况下唯一奇怪的值吗?还有其他人吗?

编辑

我知道,通过像我一样声明变量,我的一些值已经被对象(例如Number)自动包装,尽管它是原语。因此,我可以将它们视为“适当”对象(例如{}[]),并尝试读取它们的属性。但我找不到多少解释什么是和不是这样包装。

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2014-05-15 20:10:43

是的,nullundefined是在属性访问中使用时抛出异常的唯一值。点和括号property accessors调用内部CheckObjectCoercible function,定义如下:

如果抽象操作CheckObjectCoercible的参数是不能使用ToObject转换为对象的值,则会引发错误。表15对此作了定义: 表15 - CheckObjectCoercible结果参数类型抛出一个TypeError异常。布尔值,返回数字,返回字符串,返回对象,返回

nullundefined是不代表任何东西的值,不能转换为对象(正如您所说的“包装”)。请注意,您当然可以拥有一个具有现有属性的对象,该属性在访问时抛出,如

代码语言:javascript
复制
var o = {get p() { throw new TypeError("you may not access this"); }};
o.p // TypeError
票数 5
EN

Stack Overflow用户

发布于 2014-05-15 19:44:47

当你读一些未定义的东西的属性时。你是在说:

什么是未定义的?或者在空的情况下,什么是空的未定义的?未定义或null都不是对象,因此不能在它们上设置或获取属性。记住这一点,就会抛出一个错误。

票数 1
EN

Stack Overflow用户

发布于 2014-05-15 19:46:35

当对象为空/未定义时,它将抛出一个错误,因为将尝试访问一个首先不存在于中的对象的属性。

在其他情况下,它将尝试访问现有对象的属性,并返回未定义的属性,因为找不到该属性。

请注意,js中的几乎所有东西都是一个对象,您可以看到here

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23687233

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档