Logical Operators
Supported Operators
| Operator | Name | Example |
|---|---|---|
&& | Logical AND | true && true → true |
|| | Logical OR | false || true → true |
! | Logical NOT | !false → true |
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)"); // trueShort-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
| Value | Falsy | Truthy |
|---|---|---|
| Boolean | false | true |
| Number | 0 | non-zero |
| String | "" or "0" | other strings |
Operator Precedence
| Operator | Precedence |
|---|---|
! | 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 }); // falsePermission 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" }); // falseNote
|| is the logical OR operator. A single | is the formatting separator.