类型错误:“x”不是“y”

JavaScript异常“x个是(不是)“发生在意外类型。经常,出乎意料未定义无效的值。

消息

TypeError:无法读取未定义的属性(读取“x”)(基于V8)TypeError:“x”未定义(Firefox)TypeError:“undefined”不是对象(Firefox)TypeError:未定义不是对象(计算“obj.x”)(Safari)TypeError:“x”不是符号(基于V8和Firefox)TypeError:Symbol.keyFor要求第一个参数是符号(Safari)

错误类型

出了什么问题?

出现了意外类型。这种情况经常发生在未定义无效的值。

此外,某些方法,例如对象.create()Symbol.keyFor[(),需要特定类型,必须提供。

示例

无效案例

不能对未定义无效的变量。

js公司
常数foo公司= 未定义;foo公司.子字符串(1); //TypeError:未定义foo

常数食物2= 无效的;足球2.子字符串(1); //TypeError:foo2为空

某些方法可能需要特定类型。

js公司
常数foo公司= {};符号.键For(foo公司); //TypeError:foo不是符号

常数食物2= “酒吧”;对象.创造(食物2); //TypeError:“foo2”不是对象或为空

解决问题

修复空指针未定义无效的值,您可以测试该值是否为未定义无效的第一。

js公司
如果 (foo公司!== 未定义 &&foo公司!== 无效的) {
  //现在我们知道了foo的定义,我们可以开始了。
}

或者,如果你确信foo公司不会是另一个虚伪的类似于值""0或者,如果筛选出这些案例不是问题,您可以简单地测试其真实性。

js公司
如果 (foo公司) {
  //现在我们知道foo是真实的,它不一定是null/undefined。
}

另请参见