Exceptions are run-time errors.
A try catch block allows you to control program flow after run-time errors.
Error types, such as ReferenceError and TypeError are thrown to the catch block.
You can throw errors according to your own logic in the try block.
A finally block always executes.
You can create custom Errors with custom message properties.
Try blocks can be nested within catch blocks.