Check whether a value belongs to a set.

set-membership Use `.has(value)` when membership matters more than position. A set membership check is clearer than searching through a list by hand.

Set Membership

role
set_has.js
Replay: real traced execution (multi-file project)
const role = "viewer";
const canEdit = new Set(["admin", "editor"]).has(role);
const label = canEdit ? "allowed" : "blocked";

console.log("role=" + role);
console.log("label=" + label);
const role = "admin";
const canEdit = new Set(["admin", "editor"]).has(role);
const label = canEdit ? "allowed" : "blocked";

console.log("role=" + role);
console.log("label=" + label);
const role = "editor";
const canEdit = new Set(["admin", "editor"]).has(role);
const label = canEdit ? "allowed" : "blocked";

console.log("role=" + role);
console.log("label=" + label);
  1. role ← viewer, canEdit ← false, label ← blocked

    1const role→ viewer = "viewer"; //@role="admin", "editor"2const canEdit→ false = new Set(["admin", "editor"]).has(roleviewer);3const label→ blocked = canEditfalse ? "allowed" : "blocked";45console.log("role=" + roleviewer);6console.log("label=" + labelblocked);
    outputrole=viewer
    label=blocked
  1. role ← admin, canEdit ← true, label ← allowed

    1const role→ admin = "admin";2const canEdit→ true = new Set(["admin", "editor"]).has(roleadmin);3const label→ allowed = canEdittrue ? "allowed" : "blocked";45console.log("role=" + roleadmin);6console.log("label=" + labelallowed);
    outputrole=admin
    label=allowed
  1. role ← editor, canEdit ← true, label ← allowed

    1const role→ editor = "editor";2const canEdit→ true = new Set(["admin", "editor"]).has(roleeditor);3const label→ allowed = canEdittrue ? "allowed" : "blocked";45console.log("role=" + roleeditor);6console.log("label=" + labelallowed);
    outputrole=editor
    label=allowed