如何通过点表示法访问JavaScript中的无效标识符属性?
能不能用点表示法访问带空格的对象属性?
嘿,这个问题问得很实际!直接给你结论:没办法直接用点表示法访问带空格(或者其他不符合JavaScript标识符规则)的属性名。
为什么呢?因为JavaScript里点表示法的语法要求,后面跟的属性名必须是一个有效的标识符——简单说就是只能以字母、下划线_或者美元符$开头,后面可以跟字母、数字、下划线或美元符,空格、连字符这类字符完全不符合规则,所以写person.first name会直接触发语法错误。
举个直观的例子:
const person = { 'first name': 'Bob', 'age': 30, last_name: 'Brown' }; // 合法的方括号访问 console.log(person['first name']); // 输出 Bob // 下面的写法全是语法错误,根本跑不起来 // console.log(person.first name); // console.log(person.last-name);
不过也不是完全没有“曲线救国”的办法,如果你特别想用点表示法的形式,可以试试这些技巧:
- 最推荐:修改属性名:如果能控制对象的定义(比如是你自己写的代码),把带空格的属性改成驼峰式(比如
firstName)或者下划线式(first_name),这样就能正常用person.firstName访问了,还符合JS的编码规范。 - 用getter包装:如果属性名没法改(比如是第三方接口返回的数据),可以给对象添加一个getter方法,把带空格的属性映射成一个合法的标识符属性:
// 给person对象加一个getter Object.defineProperty(person, 'firstName', { get() { return this['first name']; } }); // 现在就能用点表示法啦 console.log(person.firstName); // 输出 Bob
不过要注意,这不是直接用点访问原来的'first name'属性,而是通过新的firstName属性间接获取的。
总的来说,带空格的属性名天生就和点表示法不兼容,方括号表示法才是专门用来处理这类特殊属性名的正确方式。
内容的提问来源于stack exchange,提问作者CryptoBird
相关产品推荐
相关产品推荐

