Javascript TypeError示例|解决JavaScript中的TypeError

如果您正在学习Javascript代码,则经常会遇到TypeError。 Javascript TypeError对象表示无法执行操作时的错误,通常(但非排他)是当值不是预期类型时。

JavaScript TypeError

内容概述

  • 1个JavaScript TypeError
  • 2个TypeError方法
  • 3个TypeError属性
  • 4创建一个TypeError
  • 5解决:未捕获的类型错误:无法设置属性
  • 6 Javascript TypeError不是函数
  • 7 TypeError:不是构造函数

当传递给函数的操作数或参数与该运算符或函数期望的类型不兼容,尝试修改无法更改的值或尝试滥用值时,可能引发JS TypeError。

句法

new TypeError((message(, fileName(, lineNumber))))

所有参数都是可选的。

该消息是该错误的易于理解的描述。

文件名是包含导致异常的代码的文件的名称。

lineNumber是导致异常的代码的行号。

请参见以下代码示例。

// app.js

let num = 11;
try {
  num.toUpperCase();
}
catch (err) {
  console.log(err)
}

输出量

➜  es git:(master) ✗ node app
TypeError: num.toUpperCase is not a function
    at Object. (/Users/krunal/Desktop/code/node-examples/es/app.js:3:7)
    at Module._compile (internal/modules/cjs/loader.js:722:30)
    at Object.Module._extensions..js (internal/modules/cjs/loader.js:733:10)
    at Module.load (internal/modules/cjs/loader.js:620:32)
    at tryModuleLoad (internal/modules/cjs/loader.js:560:12)
    at Function.Module._load (internal/modules/cjs/loader.js:552:3)
    at Function.Module.runMain (internal/modules/cjs/loader.js:775:12)
    at startup (internal/bootstrap/node.js:300:19)
    at bootstrapNodeJSCore (internal/bootstrap/node.js:826:3)
➜  es git:(master) ✗

我们收到如下错误:TypeError:num.toUpperCase不是一个函数

在此示例中,我们尝试将数字转换为字符串,这是不可能的,这就是为什么捕获TypeError的原因。

如果在JavaScript中添加11和H,或者尝试对两个类型不匹配的操作数执行操作,则JavaScript会引发TypeError。

我们可以使用error.name属性获取错误的名称。请参阅以下代码。

// app.js

let num = 11;
try {
  num.toUpperCase();
}
catch (err) {
  console.log(err.name)
}

输出量

➜  es git:(master) ✗ node app
TypeError
➜  es git:(master) ✗

TypeError方法

全局TypeError不包含其自身的函数;但是,它通过原型链继承了一些方法。

TypeError属性

有TypeError的以下属性。

TypeError.prototype.constructor

它指定了创建实例原型的函数。

TypeError.prototype.message

它给出了错误信息。尽管ECMA-262指定TypeError应该提供其message属性,但在

SpiderMonkey,它继承了Error.prototype.message。

TypeError.prototype.name

它给出错误名称。继承自Error。

TypeError.prototype.fileName

它提供了引发此错误的文件的路径。继承自Error。

TypeError.prototype.lineNumber

它给出了引发此错误的文件中的行号。继承自Error。

TypeError.prototype.columnNumber

它在出现此错误的行中提供列号。继承自Error。

TypeError.prototype.stack

它给出堆栈跟踪。继承自Error。

让我们在代码示例中查看一些属性。

// app.js

let num = 11;
try {
  num.toUpperCase();
}
catch (err) {
  console.log(err.message)
  console.log(err.stack)
  console.log(err.name)
}

输出量

➜  es git:(master) ✗ node app.js
num.toUpperCase is not a function
TypeError: num.toUpperCase is not a function
    at Object. (/Users/krunal/Desktop/code/node-examples/es/app.js:3:7)
    at Module._compile (internal/modules/cjs/loader.js:722:30)
    at Object.Module._extensions..js (internal/modules/cjs/loader.js:733:10)
    at Module.load (internal/modules/cjs/loader.js:620:32)
    at tryModuleLoad (internal/modules/cjs/loader.js:560:12)
    at Function.Module._load (internal/modules/cjs/loader.js:552:3)
    at Function.Module.runMain (internal/modules/cjs/loader.js:775:12)
    at startup (internal/bootstrap/node.js:300:19)
    at bootstrapNodeJSCore (internal/bootstrap/node.js:826:3)
TypeError
➜  es git:(master) ✗

创建一个TypeError

现在,要记住的一件事是,我在Node.js而不是浏览器上运行此Javascript程序,因此,某些属性值可能未定义,但我想在浏览器中可以正常工作,我尚未对其进行检查,但我在这里假设。您也可以检查。

// app.js

let num = 11;
try {
  throw new TypeError('Oops!! Error', "app.js", 10);
}
catch (err) {
  console.log(err instanceof TypeError);
  console.log(err.message);
  console.log(err.name);
  console.log(err.fileName);
  console.log(err.lineNumber);
  console.log(err.columnNumber);
  console.log(err.stack);
}

输出量

➜  es git:(master) ✗ node app.js
true
Oops!! Error
TypeError
undefined
undefined
undefined
TypeError: Oops!! Error
    at Object. (/Users/krunal/Desktop/code/node-examples/es/app.js:3:9)
    at Module._compile (internal/modules/cjs/loader.js:722:30)
    at Object.Module._extensions..js (internal/modules/cjs/loader.js:733:10)
    at Module.load (internal/modules/cjs/loader.js:620:32)
    at tryModuleLoad (internal/modules/cjs/loader.js:560:12)
    at Function.Module._load (internal/modules/cjs/loader.js:552:3)
    at Function.Module.runMain (internal/modules/cjs/loader.js:775:12)
    at startup (internal/bootstrap/node.js:300:19)
    at bootstrapNodeJSCore (internal/bootstrap/node.js:826:3)
➜  es git:(master) ✗

解决:未捕获的类型错误:无法设置属性

您可以先使用toString()函数将数字转换为字符串,然后再使用toUpperCase()函数将该字符串转换为大写字符。

// app.js

let num = 11;
try {
  num.toString().toUpperCase();   
}
catch (err) {
  console.log(err.message);
}

输出量

➜  es git:(master) ✗ node app.js
➜  es git:(master) ✗

不会出现任何错误。它通过将数字转换为字符串来解决TypeError。

TypeError与console.log()相关

我们经常可以在浏览器中发现以下与console.log相关的TypeError。

TypeError: Property 'log' of object # is not a function (Chrome)
TypeError: console.log is not a function (Firefox) 
TypeError: 'your string' is not a function (evaluating 'console.log("your string")') (Safari)
TypeError: Function expected (IE)

JavaScript TypeError不是函数

让我们假设您已经定义了一个变量,然后将该变量作为导致此TypeError的函数调用。

// app.js

let num = 11;

try {
  num();
}
catch (err) {
  console.log(err.message);
}

输出量

➜  es git:(master) ✗ node app.js
num is not a function
➜  es git:(master) ✗

您只能在JavaScript中调用函数。您可以调用对象属性。

TypeError:不是构造函数

除非在特定函数的说明中指定,否则未将Javascript内置函数对象标识为不实现((Construct))内部方法的构造函数。

最后,JavaScript TypeError示例解决Java中的TypeError已结束。

资讯来源:由0x资讯编译自APPDIVIDEND,版权归作者Krunal所有,未经许可,不得转载
你可能还喜欢