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已结束。