Reject invalid data by throwing an error.

throw-validation `throw` stops the current path and sends control to the nearest matching `catch`. Validation code often throws when an input is not acceptable.

Throwing Validation Errors

count
throw_validation.js
Replay: real traced execution (multi-file project)
const count = 3;
let status = "";

function requirePositive(value) {
  if (value <= 0) {
    throw new Error("count must be positive");
  }
  return value;
}

try {
  const accepted = requirePositive(count);
  status = "accepted:" + accepted;
} catch (error) {
  status = "rejected";
}

console.log("count=" + count);
console.log("status=" + status);
const count = 0;
let status = "";

function requirePositive(value) {
  if (value <= 0) {
    throw new Error("count must be positive");
  }
  return value;
}

try {
  const accepted = requirePositive(count);
  status = "accepted:" + accepted;
} catch (error) {
  status = "rejected";
}

console.log("count=" + count);
console.log("status=" + status);
const count = 8;
let status = "";

function requirePositive(value) {
  if (value <= 0) {
    throw new Error("count must be positive");
  }
  return value;
}

try {
  const accepted = requirePositive(count);
  status = "accepted:" + accepted;
} catch (error) {
  status = "rejected";
}

console.log("count=" + count);
console.log("status=" + status);
  1. count ← 3, status ← (empty)

    1const count→ 3 = 3; //@count=0, 82let status→ (empty) = "";
  2. try

    8  return value;9}1011try {12  const accepted = requirePositive(count3);13  status = "accepted:" + accepted;
  3. function requirePositive(value)

    1const count = 3; //@count=0, 82let status = "";34function requirePositive(value3) {5  if (value <= 0) {6    throw new Error("count must be positive");7  }8  return value3;9}
  4. accepted ← 3, status ← accepted:3

    11try {12  const accepted→ 3 = requirePositive(count3);13  status = "accepted:" + accepted3;14} catch (error) {
    values this stepaccepted:3status
  5. console.log("count=" + count);

    15  status = "rejected";16}1718console.log("count=" + count3);19console.log("status=" + statusaccepted:3);
    outputcount=3
    status=accepted:3
  1. count ← 0, status ← (empty)

    1const count→ 0 = 0;2let status→ (empty) = "";
  2. try

    8  return value;9}1011try {12  const accepted = requirePositive(count0);13  status = "accepted:" + accepted;
  3. function requirePositive(value)

    1const count = 0;2let status = "";34function requirePositive(value0) {5  if (value <= 0) {
  4. if (value <= 0)

    4function requirePositive(value) {5  if (value0 <= 0) {6    throw new Error("count must be positive");7  }
  5. status ← rejected

    13  status = "accepted:" + accepted;14} catch (error) {15  status = "rejected";16}
    values this steprejectedstatus
  6. console.log("count=" + count);

    15  status = "rejected";16}1718console.log("count=" + count0);19console.log("status=" + statusrejected);
    outputcount=0
    status=rejected
  1. count ← 8, status ← (empty)

    1const count→ 8 = 8;2let status→ (empty) = "";
  2. try

    8  return value;9}1011try {12  const accepted = requirePositive(count8);13  status = "accepted:" + accepted;
  3. function requirePositive(value)

    1const count = 8;2let status = "";34function requirePositive(value8) {5  if (value <= 0) {6    throw new Error("count must be positive");7  }8  return value8;9}
  4. accepted ← 8, status ← accepted:8

    11try {12  const accepted→ 8 = requirePositive(count8);13  status = "accepted:" + accepted8;14} catch (error) {
    values this stepaccepted:8status
  5. console.log("count=" + count);

    15  status = "rejected";16}1718console.log("count=" + count8);19console.log("status=" + statusaccepted:8);
    outputcount=8
    status=accepted:8