| .. | ||
| CHANGELOG.md | ||
| README.md | ||
@woocommerce/expression-evaluation
在可选上下文中评估类 JavaScript 表达式。
简单表达式的例子:
1 + 2
foo === 'bar'
foo ? 'bar' : 'baz'
复杂表达式的例子:
foo.bar.baz === 'qux'
foo.bar
&& ( foo.bar.baz === 'qux' || foo.baz === 'quux' )
foo.bar
&& ( foo.baz === "qux" || foo.baz === "quux" )
&& ( foo.quux > 1 && foo.quux <= 5 )
foo.bar
&& ( foo.baz === "qux" || foo.baz === "quux" )
&& ( foo.quux > 1 && foo.quux <= 5 )
? "boo"
: "baa"
foo
+ 5
/* 这是一个注释 */
* ( bar ? baz : qux )
API
evaluate
在可选上下文中评估一个表达式。
用法
import { evaluate } from '@woocommerce/expression-evaluation';
const result = evaluate( '1 + foo', { foo: 2 } );
console.log( result ); // 3
参数
- expression
string: 要计算的表达式。 - context
Object: 可选。计算表达式时所在的上下文。表达式中的变量将在此对象中查找。
返回值
any: 表达式求值的结果。
表达式语法
语法和类型
表达式语法基于 JavaScript。形式化语法定义于 parser.ts。
一个表达式由单个语句组成。
不支持 if 语句、for 循环、函数调用和变量赋值等产品特点。
支持以下类型:
null- 布尔值:
true和false - 数值:整数或浮点数。
- 字符串:表示文本的字符序列。
字面量
表达式中的价值可以写作字面量。
null
null
布尔值
true
false
数值
1
5.23
-9
字符串
字符串字面量可以用单引号或双引号书写。如果字符串包含单引号或双引号,这会很有帮助。
'foo'
"foo"
'foo "bar"'
"foo 'bar'"
引号可以用反斜杠转义。
'foo \'bar\''
"foo \"bar\""
上下文变量
变量可在表达式中使用。变量的值会在上下文中查找。
const result = evaluate( 'foo', { foo: 1 } );
console.log( result ); // 1
嵌套属性可通过点运算符访问。
const result = evaluate( 'foo.bar', { foo: { bar: 1 } } );
console.log( result ); // 1
运算符
支持以下运算符。
比较运算符
相等 (==)
如果操作数相等则返回 true。
1 == 1
不相等 (!=)
如果操作数不相等则返回 true。
1 != 2
严格相等 (===)
如果操作数相等且类型相同,则返回 true。
1 === 1
严格不相等 (!==)
如果操作数不相等和/或类型不同,则返回 true。
1 !== "1"
大于 (>)
如果左操作数大于右操作数,则返回 true。
2 > 1
大于或等于 (>=)
如果左操作数大于或等于右操作数,则返回 true。
2 >= 2
小于 (<)
如果左操作数小于右操作数,则返回 true。
1 < 2
小于或等于 (<=)
如果左操作数小于或等于右操作数,则返回 true。
2 <= 2
算术运算符
加法 (+)
返回两个操作数的和。
1 + 2
减法 (-)
返回二个操作数的差。
2 - 1
乘法 (*)
返回二个操作数的积。
2 * 3
除法 (/)
返回两个操作数的商。
6 / 2
取模 (%)
返回两个操作数的余数。
5 % 2
取反运算符 (-)
返回操作数的负值。
-1
逻辑运算符
逻辑与 (&&)
如果两个操作数都为 true,则返回 true。
true && true
逻辑或 (||)
如果任一操作数为 true,则返回 true。
true || false
逻辑非 (!)
如果操作数为 false 则返回 true。
!false
条件(三元)运算符
如果条件为 true 则返回第一个值,否则返回第二个值。
true ? 1 : 2
评论
评论可用于记录表达式。评论被视为空格,解析器会忽略它们。
/* This is a comment */