woocommerce/packages/js/expression-evaluation/zh-cn/README.md
2026-04-15 10:18:01 +08:00

314 lines
No EOL
4.1 KiB
Markdown

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