这段代码使用了 JavaScript 的可选链操作符(?.)和空值合并操作符(??),用于安全地访问对象属性并提供默认值。以下是详细解释:
const value = formData?.[item.field] ?? '';
一、可选链操作符 ?.
作用:安全地访问嵌套对象属性,避免在中间属性为 null 或 undefined 时抛出错误。
行为:
如果 formData 是 null 或 undefined,表达式会直接返回 undefined,而不会尝试访问 item.field。
否则,尝试访问 formData[item.field]。
二、空值合并操作符 ??
作用:提供默认值。当左侧表达式结果为 null 或 undefined 时,返回右侧的默认值。
行为:
如果 formData?.[item.field] 的结果是 null 或 undefined,则 value 被赋值为空字符串 ''。
否则,value 的值为 formData[item.field] 的实际值。
三、动态属性访问 [item.field]
item.field 是一个动态属性名(可能是字符串或符号),代码会读取 formData 中名为 item.field 的属性值。
四、等价逻辑(传统写法)
let value;
if (formData && formData[item.field] !== undefined && formData[item.field] !== null) {
value = formData[item.field];
} else {
value = '';
}
五、使用场景示例
5.1、假设:
const formData = { username: 'Alice', age: 30 };
const item = { field: 'username' }; // 或 { field: 'nonExistentField' }
5.2、当 item.field 存在时:
const item = { field: 'username' };
console.log(value); // 输出: 'Alice'
5.3、当 item.field 不存在或 formData 为 null/undefined 时:
const item = { field: 'nonExistentField' };
console.log(value); // 输出: ''
// 或
const formData = null;
console.log(value); // 输出: ''
六、关键点总结
安全性:避免因访问 null 或 undefined 的属性而报错。
默认值:确保 value 始终是一个非空值(此处为字符串)。
动态性:支持通过变量(item.field)动态访问对象属性。
这种写法常见于表单处理、API 响应解析等需要健壮性检查的场景。