Skip to content

Logical Operators

Supported Operators

OperatorNameExample
&&Logical ANDtrue && truetrue
||Logical ORfalse || truetrue
!Logical NOT!falsetrue

Basic Usage

javascript
import { calc } from "a-calc";

calc("5 > 3 && 2 > 1"); // true
calc("5 > 3 && 2 < 1"); // false

calc("5 < 3 || 2 > 1"); // true
calc("5 < 3 || 2 < 1"); // false

calc("!(5 > 3)"); // false
calc("!(5 < 3)"); // true

Short-Circuit Evaluation

javascript
// && short-circuits when left is false
calc("false && (1/0 > 0)"); // false (no division by zero)

// || short-circuits when left is true
calc("true || (1/0 > 0)"); // true (no division by zero)

Truthiness Rules

ValueFalsyTruthy
Booleanfalsetrue
Number0non-zero
String"" or "0"other strings

Operator Precedence

OperatorPrecedence
!9 (highest)
&&3
||2
javascript
// ! has highest precedence
calc("!true && false"); // false  →  (!true) && false

// && has higher precedence than ||
calc("true || false && false"); // true  →  true || (false && false)

Real-World Examples

Form Validation

javascript
const isValid = (data) =>
  calc(
    `
  name != "" &&
  age >= 18 &&
  age <= 100
`,
    data,
  );

isValid({ name: "Alice", age: 25 }); // true
isValid({ name: "", age: 25 }); // false

Permission Check

javascript
const hasAccess = (user) =>
  calc(
    `
  (role == "admin") ||
  (role == "editor" && dept == targetDept)
`,
    { ...user, targetDept: "IT" },
  );

hasAccess({ role: "admin", dept: "HR" }); // true
hasAccess({ role: "editor", dept: "IT" }); // true
hasAccess({ role: "editor", dept: "HR" }); // false

Note

|| is the logical OR operator. A single | is the formatting separator.

Released under the MIT License