为何JavaScript将YAML解析后的列表识别为对象?
为什么YAML解析后的数组用typeof返回'object'而非'list'?
问题场景
配置文件config.yml内容:
key1: list: ['x', 'x', 'x']
使用yaml包解析的代码:
import { parse } from 'yaml'; import { readFileSync } from 'fs'; const parsed = parse(readFileSync('config.yml', 'utf-8')); console.log(typeof parsed['key1']['list']) // 此处返回object而非预期的"list"
原因解释
JavaScript里不存在list这个数据类型。YAML中的数组会被yaml包解析成JavaScript的数组(Array),但在JS中,typeof操作符对数组的返回值就是'object'——这是JS语言本身的特性,和yaml包的解析逻辑无关。
如果要判断某个值是否为数组,应该使用Array.isArray()方法,示例:
console.log(Array.isArray(parsed['key1']['list'])) // 会返回true
另外,你代码里有个大小写错误:ReadFileSync应该写成小写开头的readFileSync,否则会触发未定义变量的报错。
内容的提问来源于stack exchange,提问作者thisismynewdisplayname
相关产品推荐
相关产品推荐

