一个未定义的变量怎么会抛出类型错误?
How could an undefined variable throw a type error?
我有一个用户得到错误
TypeError: a is undefined
我不明白这是怎么发生的。访问未定义的变量不会抛出引用错误吗?在什么情况下会抛出类型错误?
正如@jgillich在他的回答中指出的那样,以下代码在undefined
对象上生成TypeError
> a
ReferenceError: a is not defined
> var a;
> a.x
TypeError: a is undefined
要理解其中的原因,我们可以参考ECMAScript 5.1规范11.2.1 Property Accessors。我们对步骤5感兴趣
5。调用CheckObjectCoercible ( baseValue )。
在我们的示例中,baseValue是引用a
的值。即baseValue为undefined
。
CheckObjectCoercible
定义在章节9.10
抽象操作CheckObjectCoercible如果其参数是不能使用ToObject转换为Object的值,则抛出错误。它由表15定义:
我们可以在表15中看到,对于undefined
和null
值,会抛出一个TypeError
。
所以我们有TypeError
而不是ReferenceError
的原因,像往常一样,因为规范是这样说的!
还有其他方法可以在undefined
上获得TypeError
,值得注意的是,ToObject也会为undefined
抛出TypeError
。
TypeError: can't convert undefined to object
:
Object.defineProperties({}, undefined);
Object.prototype.toLocaleString.call(undefined);
Object.prototype.valueOf.call(undefined);
虽然这一次的信息更清晰一些。
直接调用undefined
也会产生TypeError: undefined has no properties
undefined.foo();
undefined.x;
所有这些都是使用Firefox 33.0a2 (Aurora)进行测试的。
> a
ReferenceError: a is not defined
> var a;
> a.x
TypeError: a is undefined
相关文章:
- 为什么会出现错误;未捕获的类型错误:undefined不是函数;
- 未捕获的类型错误:无法设置属性'innerHTML'如果为null,则将脚本移动到正文不会;不起作用
- 为什么分配给“NaN”或“未定义”会导致类型错误
- {} + [] 和 [] + {} 结果怎么会不同
- 角度:当您需要“跟踪”但您没有唯一的属性可以跟踪时,您会怎么做
- 我怎么会滥用选择器的开头
- 你会怎么写一个“;构造函数”;
- 哪里有“;请求”;以及“;响应”;来自,我怎么会发现
- Realm React Native-需要迁移:目标类型'字符串'不会'不存在于属性'电
- 为什么当我指定POST时,即使我已经尝试了类型和方法选项,我的ajax代码仍然会触发GET请求
- 我刚刚显示的 javascript 变量怎么会立即错误为未定义
- Javascript不会更新或显示系统时间<怎么会
- 怎么了?j ?类型J:变量J=9;
- FLEX ExternalInterface.available检查怎么会失败,但仍然不可用
- 触摸怎么会被拦截,某些元素会执行一些自定义动作,而其他元素会发生通常的行为
- 两个相同的字符串怎么会不相等呢
- 我怎么会有'this'setTimeout参数中的关键字
- jquery中的+$.怎么会只有基本的$
- 一个未定义的变量怎么会抛出类型错误?
- 长轮询怎么会有帮助呢?