JS语法name = name?.trim()中?的作用及MDN文档说明
语法说明
你问的?属于JavaScript标准里的可选链操作符(写法为?.),是ES2020版本正式加入的语法特性。
针对你看不懂的name = name?.trim();这行,运行逻辑非常直接:
- 先校验
.左侧的name值:如果name是null或者undefined,会直接短路,不执行后面的.trim()方法调用,整个表达式返回undefined赋值给name,全程不会抛出类型错误 - 如果
name是有效值(比如正常拆分出来的字符串),就正常调用trim()去掉首尾的空白字符,把处理后的结果赋值给name
设计作用
这个语法就是用来简化空值容错的写法。如果不写可选链,直接写name.trim(),一旦遇到name为null/undefined的边界场景(比如传入的Cookie字符串格式不规范,存在多余分号、空字段,解构赋值拿到异常值),代码会直接抛出TypeError,导致整个Cookie解析逻辑中断。
如果不用可选链,要实现同样的容错效果,得写冗余的空值判断:
name = (name !== null && name !== undefined) ? name.trim() : undefined;
MDN文档位置
该语法的官方参考文档在MDN Web Docs的「JavaScript 参考」-「表达式和运算符」分类下,对应条目为可选链(Optional chaining (?.)),里面包含了该语法的所有使用场景、兼容规则和边界说明。
内容的提问来源于stack exchange,提问作者oshox
相关产品推荐
相关产品推荐

