#
## Error
JavaScript JavaScript `Error`
```javascript
var err = new Error('');
err.message // ""
```
`Error``err``Error``message``Error`
JavaScript `Error``message` JavaScript `Error``name``stack`
- **message**
- **name**
- **stack**
`name``message`
```javascript
if (error.name) {
console.log(error.name + ': ' + error.message);
}
```
`stack`
```javascript
function throwit() {
throw new Error('');
}
function catchit() {
try {
throwit();
} catch(e) {
console.log(e.stack); // print stack trace
}
}
catchit()
// Error
// at throwit (~/examples/throwcatch.js:9:11)
// at catchit (~/examples/throwcatch.js:3:9)
// at repl:1:5
```
`throwit``catchit`
##
`Error`JavaScript 6`Error`6
### SyntaxError
`SyntaxError`
```javascript
//
var 1a;
// Uncaught SyntaxError: Invalid or unexpected token
//
console.log 'hello');
// Uncaught SyntaxError: Unexpected string
```
`SyntaxError`token
### ReferenceError
`ReferenceError`
```javascript
//
unknownVariable
// Uncaught ReferenceError: unknownVariable is not defined
```
`this`
```javascript
//
console.log() = 1
// Uncaught ReferenceError: Invalid left-hand side in assignment
// this
this = 1
// ReferenceError: Invalid left-hand side in assignment
```
`console.log``this``ReferenceError`
### RangeError
`RangeError``Number`
```javascript
//
new Array(-1)
// Uncaught RangeError: Invalid array length
```
### TypeError
`TypeError``new``new`
```javascript
new 123
// Uncaught TypeError: number is not a func
var obj = {};
obj.unknownMethod()
// Uncaught TypeError: obj.unknownMethod is not a function
```
`TypeError``obj.unknownMethod``undefined`
### URIError
`URIError` URI `encodeURI()``decodeURI()``encodeURIComponent()``decodeURIComponent()``escape()``unescape()`
```javascript
decodeURI('%2')
// URIError: URI malformed
```
### EvalError
`eval``EvalError`
###
6`Error`message
```javascript
var err1 = new Error('');
var err2 = new RangeError('');
var err3 = new TypeError('');
err1.message // ""
err2.message // ""
err3.message // ""
```
##
JavaScript
```javascript
function UserError(message) {
this.message = message || '';
this.name = 'UserError';
}
UserError.prototype = new Error();
UserError.prototype.constructor = UserError;
```
`UserError``Error`
```javascript
new UserError('');
```
## throw
`throw`
```javascript
if (x < 0) {
throw new Error('x ');
}
// Uncaught ReferenceError: x is not defined
```
`x``0``x``throw``Error`
`throw`
```javascript
function UserError(message) {
this.message = message || '';
this.name = 'UserError';
}
throw new UserError('');
// Uncaught UserError {message: "", name: "UserError"}
```
`throw``UserError`
`throw`
```javascript
//
throw 'Error';
// Uncaught Error
//
throw 42;
// Uncaught 42
//
throw true;
// Uncaught true
//
throw {
toString: function () {
return 'Error!';
}
};
// Uncaught {toString: }
```
JavaScript `throw``throw`
## try...catch
JavaScript `try...catch`
```javascript
try {
throw new Error('!');
} catch (e) {
console.log(e.name + ": " + e.message);
console.log(e.stack);
}
// Error: !
// at :3:9
// ...
```
`try``throw`JavaScript `catch``catch``catch``try`
`try...catch`
```javascript
try {
f();
} catch(e) {
//
}
```
`f``catch`
`catch`
```javascript
try {
throw "";
} catch (e) {
console.log(111);
}
console.log(222);
// 111
// 222
```
`try``catch`
`catch``try...catch`
```javascript
var n = 100;
try {
throw n;
} catch (e) {
if (e