首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >这个instanceof错误消息是什么意思?

这个instanceof错误消息是什么意思?
EN

Stack Overflow用户
提问于 2011-05-17 01:47:22
回答 1查看 17.1K关注 0票数 17

我正在使用Chrome中的instanceof,但是我得到了一个错误信息。我想我知道原因(您必须在instanceof关键字之后提供一个函数,该函数是用来创建对象的构造函数),但错误消息似乎说明了一些其他问题:

代码语言:javascript
复制
[1,2,3] instanceof Array
// true

[1,2,3] instanceof []
// TypeError: Expecting a function in instanceof check, but got 1,2,3

这是否意味着我应该用函数替换[1,2,3]?我会认为[1,2,3]是正确的,[]是问题所在,应该用一个函数替换,但看起来错误消息说的正好相反。

有人能解释一下我是如何错误地解释错误消息的吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-05-17 01:49:16

对象是构造函数的实例,因此测试的目的是查看左手是否是右手的实例,因此右手必须是函数(并且必须是构造对象的构造函数才能返回true)。

代码语言:javascript
复制
[1,2,3] instanceof [].constructor;  // true

因此,为了更直接地回答这个问题,您最初的理解是正确的,错误消息似乎具有误导性(至少对我而言)。

从规范中:http://ecma262-5.com/ELS5_HTML.htm#Section_11.8.6

1.8.6 instanceof operator

ShiftExpression的生产RelationalExpression: RelationalExpression实例评估如下:

让lref为RelationalExpression.

  • Let lval的求值结果GetValue(lref).

  • Let rref为ShiftExpression.

  • Let rval的求值结果be GetValue(rref).

  • If exception.

  • If ( rval ) is not exception.

  • Return,抛出一个 rval没有[
  • ]内部方法,抛出TypeError rval的[HasInstance]内部方法调用带有参数lval的[ TypeError ]rval的结果。

http://ecma262-5.com/ELS5_HTML.htm#Section_15.3.5

15.3.5函数实例的属性

除了必需的内部属性外,每个函数实例都有一个[Call]内部属性,并且在大多数情况下使用不同版本的[Get]内部属性。根据函数实例的创建方式(请参阅8.6.2、13.2、15和15.3.4.5),函数实例可能具有[HasInstance]内部属性、[Scope]内部属性、[Construct]内部属性、[FormalParameters]内部属性、[Code]内部属性、[TargetFunction]内部属性、[BoundThis]内部属性和[BoundArgs]内部属性。

因此,如果右手没有内部[[HasInstance]]属性,但没有指定措辞,则需要一个TypeError

Firefox4给了我一个更合理的错误信息:

代码语言:javascript
复制
[1,2,3] instanceof [];

// TypeError: invalid 'instanceof' operand []
票数 25
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6021245

复制
相关文章

相似问题

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