为何对象属性名会影响访问方式?点语法访问异常咨询
问题原因及两种属性访问方式的差异
你的问题核心在于JavaScript对两种属性访问方式的规则限制不同:
点符号(
.)访问的限制
使用点符号时,后面跟的属性名必须是合法的JavaScript标识符。合法标识符的规则是:- 只能以字母、下划线(
_)或美元符号($)开头 - 后续字符可以是字母、数字、下划线或美元符号
- 不能是JavaScript的关键字(如
function、if等)
你的属性名
registered_business_name里包含连字符(-),这违反了合法标识符的规则。此时facility.registered_business_name会被JavaScript解析成registered减去business再减去name的表达式,而不是访问属性,所以返回undefined。- 只能以字母、下划线(
方括号(
[])访问的灵活性
方括号里的属性名是以字符串形式传入的,只要是有效的字符串(哪怕包含连字符、空格、特殊字符),都能精准匹配对象的属性键。所以facility['registered_business_name']能正确找到对应的属性值。
举个简单的验证例子:
const obj = { "my-property": "test value" }; console.log(obj.my-property); // 报错:ReferenceError: my is not defined console.log(obj['my-property']); // 输出:test value
内容的提问来源于stack exchange,提问作者That_LEGO_Guy
相关产品推荐
相关产品推荐

