函数用于[[Bases 简介|数据库]]中,通过[[属性|属性]]在[[视图#筛选|筛选]]和[[公式|公式]]中操作数据。请参阅[[Bases 语法|数据库语法]]了解更多关于如何使用函数的信息。
除了[[函数#全局|全局]]函数外,大多数函数取决于你要修改的值的类型:
- [[函数#任意类型|任意类型]]
- [[函数#日期|日期]]
- [[函数#字符串|字符串]]
- [[函数#数字|数字]]
- [[函数#列表|列表]]
- [[函数#链接|链接]]
- [[函数#文件|文件]]
- [[函数#对象|对象]]
- [[函数#正则表达式|正则表达式]]
## 全局
全局函数不依赖于任何类型即可使用。
### `escapeHTML()`
`escapeHTML(html: string): string`
- 转义字符串中的特殊字符,使其可以安全地嵌入 HTML 中。
### `date()`
`date(date: string): date`
- `date(string): date` 解析提供的字符串并返回一个日期对象。
- `date` 字符串的格式应为 `YYYY-MM-DD HH:mm:ss`。
### `duration()`
`duration(value: string): duration`
- 将字符串解析为时间段。`value` 字符串格式请参阅[[Bases 语法#日期运算|日期运算部分]]。
- 在执行日期运算时,时间段不需要显式解析(例如 `now() + '1d'`),但在对时间段执行运算时则需要(例如 `now() + (duration('1d') * 2)`)。
- 当对时间段与标量进行运算时,时间段必须在左侧。例如 `duration('5h') * 2`,而不是 `2 * duration('5h')`。
### `file()`
`file(path: string | file | url): file`
- 返回给定文件或路径对应的文件对象。
- 示例:`file(link("[[filename]]"))` 或 `file("path to file")`。
### `html()`
`html(html: string): html`
- 将字符串转换为可渲染为 HTML 的代码片段。
### `if()`
`if(condition: any, trueResult: any, falseResult?: any): any`
- `condition` 是要评估的条件。
- `trueResult` 是条件为真时的输出。
- `falseResult` 是条件为假时的可选输出。如果未提供,则默认为 `null`。
- 如果 `condition` 为真或为真值,则返回 `trueResult`,否则返回 `falseResult`。
- 示例:`if(isModified, "Modified", "Unmodified")`
### `image()`
`image(path: string | file | url): image`
- 返回一个图片对象,该对象将在视图中渲染图片。
- 示例:`image(image-property)` 或 `image("https://obsidian.md/images/obsidian-logo-gradient.svg")`
### `icon()`
`icon(name: string): icon`
- 返回一个在视图中渲染为图标的值。图标名称必须与支持的 Lucide 图标匹配。
- 示例:`icon("arrow-right")`。
### `link()`
`link(path: string | file, display?: value): Link`
- 解析字符串 `path` 并返回一个 Link 对象,渲染为指向给定路径的链接。
- 可选提供 `display` 参数来更改链接显示的文本。
### `list()`
`list(element: any): List`
- 如果提供的元素是列表,则原样返回。
- 否则,将提供的 `element` 包装在列表中,创建一个只有单个元素的列表。
- 当仓库中某个属性包含字符串和列表的混合值时,此函数很有用。
- 示例:`list("value")` 返回 `["value"]`。
### `max()`
`max(value1: number, value2: number...): number`
- 返回所有提供的数字中的最大值。
### `min()`
`min(value1: number, value2: number...): number`
- 返回所有提供的数字中的最小值。
### `now()`
`now(): date`
- `now()` 返回一个表示当前时刻的日期对象。
### `number()`
`number(input: any): number`
- 尝试将提供的值作为数字返回。
- 日期对象将以自 Unix 纪元以来的毫秒数返回。
- 布尔值将返回 1 或 0。
- 字符串将被解析为数字,如果结果无效则返回错误。
- 示例:`number("3.4")` 返回 `3.4`。
### `duration()`
`duration(value: string): duration`
- 将字符串解析为时间段。`value` 字符串格式请参阅[[Bases 语法#日期运算|日期运算部分]]。
- 在执行日期运算时,时间段不需要显式解析(例如 `now() + '1d'`),但在对时间段执行运算时则需要(例如 `now() + (duration('1d') * 2)`)。
- 当对时间段与标量进行运算时,时间段必须在左侧。例如 `duration('5h') * 2`,而不是 `2 * duration('5h')`。
### `today()`
`today(): date`
- `today()` 返回一个表示当前日期的日期对象。时间部分设置为零。
### `random()`
`random(): number`
- `random()` 返回一个 0 到 1 之间的随机数。
- 每次加载视图时随机数会刷新。在视图之间切换会改变随机数。
## 任意类型
可用于任何值的函数。包括字符串(例如 `"hello"`)、数字(例如 `42`)、列表(例如 `[1,2,3]`)、对象等。
### `isTruthy()`
`any.isTruthy(): boolean`
- 返回将值强制转换为布尔值后的结果。
- 示例:`1.isTruthy()` 返回 `true`。
### `isType()`
`any.isType(type: string): boolean`
- 如果值属于提供的类型,则返回 true。
- 示例:`"example".isType("string")` 和 `true.isType("boolean")` 都返回 true。
### `toString()`
`any.toString(): string`
- 返回任何值的字符串表示。
- 示例:`123.toString()` 返回 `"123"`。
## 日期
可用于日期和时间值的函数,例如 `date("2025-05-27")`。日期比较可以使用[[Bases 语法#日期运算|日期运算]]来完成。
### 字段
以下字段可用于日期:
| 字段 | 类型 | 描述 |
| ------------------- | -------- | ----------------- |
| `date.year` | `number` | 日期的年份 |
| `date.month` | `number` | 日期的月份(1–12) |
| `date.day` | `number` | 日期的日 |
| `date.hour` | `number` | 小时(0–23) |
| `date.minute` | `number` | 分钟(0–59) |
| `date.second` | `number` | 秒(0–59) |
| `date.millisecond` | `number` | 毫秒(0–999) |
### `date()`
`date.date(): date`
- 返回一个去除时间部分的日期对象。
- 示例:`now().date().format("YYYY-MM-DD HH:mm:ss")` 返回类似 "2025-12-31 00:00:00" 的字符串。
### `format()`
`date.format(format: string): string`
- `format` 是格式字符串(例如 `"YYYY-MM-DD"`)。
- 按照 Moment.js 格式字符串指定的格式返回格式化后的日期。
- 示例:`date.format("YYYY-MM-DD")` 返回 `"2025-05-27"`。
### `time()`
`date.time(): string`
- 返回时间部分。
- 示例:`now().time()` 返回类似 "23:59:59" 的字符串。
### `relative()`
`date.relative(): string`
- 返回日期与当前日期时间的可读比较。
- 示例:`file.mtime.relative()` 返回类似 `3 days ago` 的值。
### `isEmpty()`
`date.isEmpty(): boolean`
- 返回 false。
## 字符串
可用于字符序列的函数,例如 `"hello"`。
### 字段
| 字段 | 类型 | 描述 |
| --------------- | -------- | ------------------ |
| `string.length` | `number` | 字符串中的字符数 |
### `contains()`
`string.contains(value: string): boolean`
- `value` 是要搜索的子字符串。
- 如果字符串包含 `value`,则返回 true。
- 示例:`"hello".contains("ell")` 返回 `true`。
### `containsAll()`
`string.containsAll(...values: string): boolean`
- `values` 是一个或多个要搜索的子字符串。
- 如果字符串包含所有 `values`,则返回 true。
- 示例:`"hello".containsAll("h", "e")` 返回 `true`。
### `containsAny()`
`string.containsAny(...values: string): boolean`
- `values` 是一个或多个要搜索的子字符串。
- 如果字符串包含 `values` 中的至少一个,则返回 true。
- 示例:`"hello".containsAny("x", "y", "e")` 返回 `true`。
### `endsWith()`
`string.endsWith(query: string): boolean`
- `query` 是要在末尾检查的字符串。
- 如果此字符串以 `query` 结尾,则返回 true。
- 示例:`"hello".endsWith("lo")` 返回 `true`。
### `isEmpty()`
`string.isEmpty(): boolean`
- 如果字符串没有字符或不存在,则返回 true。
- 示例:`"Hello world".isEmpty()` 返回 `false`。
- 示例:`"".isEmpty()` 返回 `true`。
### `lower()`
`string.lower(): string`
- 返回转换为小写的字符串。
### `replace()`
`string.replace(pattern: string | Regexp, replacement: string): string`
- `pattern` 是要在目标字符串中搜索的值。
- `replacement` 是用于替换找到的模式的值。
- 如果 `pattern` 是字符串,则所有出现的模式都将被替换。
- 如果 `pattern` 是正则表达式,`g` 标志决定是只替换第一个还是替换所有出现的匹配。
- 示例:`""a:b:c:d".replace(/:/, "-")` 返回 `"a-b,c,d"`,而 `"a:b:c:d".replace(/:/g, "-")` 返回 `"a-b-c-d"`。
### `repeat()`
`string.repeat(count: number): string`
- `count` 是重复字符串的次数。
- 示例:`"123".repeat(2)` 返回 `"123123"`。
### `reverse()`
`string.reverse(): string`
- 反转字符串。
- 示例:`"hello".reverse()` 返回 `"olleh"`。
### `slice()`
`string.slice(start: number, end?: number): string`
- `start` 是包含起始位置的索引。
- `end` 是可选的不包含结束位置的索引。
- 返回从 `start`(包含)到 `end`(不包含)的子字符串。
- 示例:`"hello".slice(1, 4)` 返回 `"ell"`。
- 如果省略 `end`,则截取到字符串末尾。
### `split()`
`string.split(separator: string | Regexp, n?: number): list`
- `separator` 是用于分割字符串的分隔符。
- `n` 是可选的数字。如果提供,结果将包含前 `n` 个元素。
- 返回子字符串的列表。
- 示例:`"a,b,c,d".split(",", 3)` 或 `"a,b,c,d".split(/,/, 3)` 返回 `["a", "b", "c"]`。
### `startsWith()`
`string.startsWith(query: string): boolean`
- `query` 是要在开头检查的字符串。
- 如果此字符串以 `query` 开头,则返回 true。
- 示例:`"hello".startsWith("he")` 返回 `true`。
### `title()`
`string.title(): string`
- 将字符串转换为标题大小写(每个单词的首字母大写)。
- 示例:`"hello world".title()` 返回 `"Hello World"`。
### `trim()`
`string.trim(): string`
- 去除字符串两端的空白字符。
- 示例:`" hi ".trim()` 返回 `"hi"`。
## 数字
可用于数值的函数,例如 `42`、`3.14`。
### `abs()`
`number.abs(): number`
- 返回数字的绝对值。
- 示例:`(-5).abs()` 返回 `5`。
### `ceil()`
`number.ceil(): number`
- 将数字向上取整为最接近的整数。
- 示例:`(2.1).ceil()` 返回 `3`。
### `floor()`
`number.floor(): number`
- 将数字向下取整为最接近的整数。
- 示例:`(2.9).floor()` 返回 `2`。
### `isEmpty()`
`number.isEmpty(): boolean`
- 如果数字不存在,则返回 true。
- 示例:`5.isEmpty()` 返回 `false`。
### `round()`
`number.round(digits: number): number`
- 将数字四舍五入为最接近的整数。
- 可选提供 `digits` 参数来四舍五入到指定的小数位数。
- 示例:`(2.5).round()` 返回 `3`,`(2.3333).round(2)` 返回 `2.33`。
### `toFixed()`
`number.toFixed(precision: number): string`
- `precision` 是小数位数。
- 返回以定点表示法表示的数字字符串。
- 示例:`(3.14159).toFixed(2)` 返回 `"3.14"`。
## 列表
可用于有序元素列表的函数,例如 `[1, 2, 3]`。
### 字段
| 字段 | 类型 | 描述 |
| ------------- | -------- | ---------------- |
| `list.length` | `number` | 列表中的元素数量 |
### `contains()`
`list.contains(value: any): boolean`
- `value` 是要搜索的元素。
- 如果列表包含 `value`,则返回 true。
- 示例:`[1,2,3].contains(2)` 返回 `true`。
### `containsAll()`
`list.containsAll(...values: any): boolean`
- `values` 是一个或多个要搜索的元素。
- 如果列表包含所有 `values`,则返回 true。
- 示例:`[1,2,3].containsAll(2,3)` 返回 `true`。
### `containsAny()`
`list.containsAny(...values: any): boolean`
- `values` 是一个或多个要搜索的元素。
- 如果列表包含 `values` 中的至少一个,则返回 true。
- 示例:`[1,2,3].containsAny(3,4)` 返回 `true`。
### `filter()`
`list.filter(value: Boolean): list`
- 通过调用筛选函数来筛选此列表中的元素,该函数使用变量 `index` 和 `value`,并返回一个布尔值表示是否保留该元素。
- `value` 是列表中某个项的值。
- `index` 是当前值的索引。
- 示例:`[1,2,3,4].filter(value > 2)` 返回 `[3,4]`。
### `flat()`
`list.flat(): list`
- 将嵌套列表展平为单个列表。
- 示例:`[1,[2,3]].flat()` 返回 `[1,2,3]`。
### `isEmpty()`
`list.isEmpty(): boolean`
- 如果列表没有元素,则返回 true。
- 示例:`[1,2,3].isEmpty()` 返回 `false`。
### `join()`
`list.join(separator: string): string`
- `separator` 是插入到元素之间的字符串。
- 将所有列表元素连接为单个字符串。
- 示例:`[1,2,3].join(",")` 返回 `"1,2,3"`。
### `map()`
`list.map(value: Any): list`
- 通过调用转换函数来转换此列表中的每个元素,该函数使用变量 `index` 和 `value`,并返回要放入列表中的新值。
- `value` 是列表中某个项的值。
- `index` 是当前值的索引。
- 示例:`[1,2,3,4].map(value + 1)` 返回 `[2,3,4,5]`。
### `reduce()`
`list.reduce(expression: Any, acc: Any): Any`
- 通过为每个元素运行表达式,将列表中的元素归约为单个值。表达式可以使用变量 `index`、`value` 和 `acc`(累加器),并应返回下一个累加器值。
- `expression` 对列表中的每个元素进行求值。
- `value` 是列表中当前项的值。
- `index` 是当前项的索引。
- `acc` 是到目前为止的累积值。
- 示例(求和):`[1,2,3].reduce(acc + value, 0)` 返回 `6`。
- 示例(最大值):`values.filter(value.isType("number")).reduce(if(acc == null || value > acc, value, acc), null)` 返回最大的数字,如果没有则返回 `null`。
### `reverse()`
`list.reverse(): list`
- 就地反转列表。
- 示例:`[1,2,3].reverse()` 返回 `[3,2,1]`。
### `slice()`
`list.slice(start: number, end?: number): list`
- `start` 是包含起始位置的索引。
- `end` 是可选的不包含结束位置的索引。
- 返回从 `start`(包含)到 `end`(不包含)的列表浅拷贝。
- 示例:`[1,2,3,4].slice(1,3)` 返回 `[2,3]`。
- 如果省略 `end`,则截取到列表末尾。
### `sort()`
`list.sort(): list`
- 将列表元素从小到大排序。
- 示例:`[3, 1, 2].sort()` 返回 `[1, 2, 3]`。
- 示例:`["c", "a", "b"].sort()` 返回 `["a", "b", "c"]`。
### `unique()`
`list.unique(): list`
- 去除重复元素。
- 示例:`[1,2,2,3].unique()` 返回 `[1,2,3]`。
## 链接
可用于链接的函数。链接可以从文件(`file.asLink()`)或路径(`link("path")`)创建。
### `asFile()`
`link.asFile(): file`
- 如果链接指向有效的本地文件,则返回文件对象。
- 示例:`link("[[filename]]").asFile()`
### `linksTo()`
`link.linksTo(file): boolean`
- 返回 `link` 所代表的文件是否有指向 `file` 的链接。
## 文件
可用于仓库中文件的函数。
### 字段
以下字段可用于文件:
| 字段 | 类型 | 描述 |
| ----------------- | -------- | --------------------------------- |
| `file.name` | `string` | 此文件的名称。 |
| `file.basename` | `string` | 不含扩展名的文件名称。 |
| `file.path` | `string` | 相对于仓库根目录的完整文件路径。 |
| `file.folder` | `string` | 父文件夹的完整路径。 |
| `file.ext` | `string` | 此文件的扩展名。 |
| `file.size` | `number` | 此文件的大小,以字节为单位。 |
| `file.properties` | `object` | 此文件的笔记属性。 |
| `file.tags` | `list` | 此文件的标签。包括行内标签。 |
| `file.links` | `list` | 此文件中的内部链接。 |
| `file.ctime` | `date` | 此文件创建时的时间戳。 |
| `file.mtime` | `date` | 此文件最后修改时的时间戳。 |
### `asLink()`
`file.asLink(display?: string): Link`
- `display` 链接的可选显示文本。
- 返回一个渲染为可用链接的 Link 对象。
- 示例:`file.asLink()`
### `hasLink()`
`file.hasLink(otherFile: file | string): boolean`
- `otherFile` 是另一个文件对象或要检查的字符串路径。
- 如果 `file` 链接到 `otherFile`,则返回 true。
- 示例:如果从 `file` 到 `otherFile` 存在链接,`file.hasLink(otherFile)` 返回 `true`。
### `hasProperty()`
`file.hasProperty(name: string): boolean`
- 如果笔记具有给定的文件属性,则返回 true。
### `hasTag()`
`file.hasTag(...values: string): boolean`
- `values` 是一个或多个标签名称。
- 如果文件具有 `values` 中的任何标签,则返回 true。
- 示例:如果文件具有标签 `#tag1` 或 `#tag2`,`file.hasTag("tag1", "tag2")` 返回 `true`。这也包括任何[[标签#嵌套标签|嵌套标签]],例如 `#tag1/a` 或 `#tag2/b`。
### `inFolder()`
`file.inFolder(folder: string): boolean`
- `folder` 是要检查的文件夹名称。
- 如果文件在指定的文件夹或其子文件夹中,则返回 true。
- 示例:`file.inFolder("notes")` 返回 `true`。
## 对象
可用于键值对集合的函数,例如 `{"a": 1, "b": 2}`。
### `isEmpty()`
`object.isEmpty(): boolean`
- 如果对象没有自身属性,则返回 true。
- 示例:`{}.isEmpty()` 返回 `true`。
### `keys()`
`object.keys(): list`
- 返回包含对象键的列表。
### `values()`
`object.values(): list`
- 返回包含对象值的列表。
## 正则表达式
可用于正则表达式模式的函数。示例:`/abc/`。
### `matches()`
`regexp.matches(value: string): boolean`
- `value` 是要测试的字符串。
- 如果正则表达式匹配 `value`,则返回 true。
- 示例:`/abc/.matches("abcde")` 返回 `true`。