JavaScript中通过变量访问对象转义属性失败,问题出在哪?
问题分析:为什么通过转义后的变量无法访问对象属性?
咱们先揪出你代码里的两个核心问题,一步步解决:
1. 变量定义的语法错误
你写的 var originialString = /user-management/users; 会直接触发JavaScript语法错误!因为/user-management/会被解析成正则表达式字面量,后面的users会被当作未定义的标识符,浏览器会报Uncaught SyntaxError: Invalid regular expression flags。
正确的做法是把路径定义成字符串类型,给它加上引号:
var originalString = '/user-management/users';
2. 多余的转义操作导致键不匹配
你误以为RouteMetaSet里的键是带反斜杠的\/user-management\/users,但实际上在JavaScript字符串中,\/只是用来表示一个普通的/(而且/在单/双引号字符串里根本不需要转义,所以'\/user-management\/users'和'/user-management/users'是完全等价的)。
也就是说,你的RouteMetaSet的键本质就是/user-management/users,而你通过replace转义后得到的是带反斜杠的字符串\/user-management\/users(实际内容是每个/前都加了\),这个转义后的字符串和对象的键完全不匹配,自然访问不到,返回undefined。
修正后的完整代码
var RouteMetaSet = { '/user-management/users': { path: '/user-management/users', name: 'User Management', iconClassList: ['fa', 'fa-user'] } }; // 正确定义路径字符串 var originalString = '/user-management/users'; // 直接用原字符串访问,不需要转义 console.log(RouteMetaSet[originalString]); // 输出对应的对象内容
总结一下:
- 先把路径变量定义成字符串,避免语法错误
- 对象的键就是你看到的原始路径字符串,不需要额外转义,直接用变量访问即可
内容的提问来源于stack exchange,提问作者vuquanghoang
相关产品推荐
相关产品推荐

