我有一个像这样的属性的对象:
var RouteMetaSet = {
'\/user-management\/users': {
path: '/user-management/users',
name: 'User Management',
iconClassList: ['fa', 'fa-user'],
}
};
我可以像这样轻松获取该属性的值:
console.log(RouteMetaSet['\/user-management\/users'])
但是,如果我将密钥分配给变量然后将其推入括号内,则不可能。
var originialString = /user-management/users;
var escapedString = originialString.replace(/[-/<>*()?]/g, "\\$&"); // it should be "\/user-management\/users"
console.log(RouteMetaSet[escapedString]); // undefined
在这一点上我错了吗?
答案 0 :(得分:2)
首先。这样:
var originialString = / user-management / users;
...只是语法错误。
必须引用JS中的字符串文字。
下一步:
Escape字符在JavaScript 源代码中有意义。
当JavaScript引擎解析字符串文字时,它将变为字符串。在此过程中,将使用转义字符。
它们根本不属于数据。如果使用正则表达式插入斜杠,则只需将斜杠(不是转义序列)插入到字符串中。
var RouteMetaSet = {
'\/user-management\/users': {
path: '/user-management/users',
name: 'User Management',
iconClassList: ['fa', 'fa-user'],
}
};
var originialString = "/user-management/users";
console.log(RouteMetaSet[originialString]);
除此之外:/
字符不需要在JS字符串文字中进行转义,除非它在内联脚本中构成序列</script>
的一部分。
生成的代码通常会转义所有/
个字符,这是避免该问题的一种简单有效的方法。
如果属性名称包含需要转义的字符(例如\
),那么,在解析字符串时,明智地做任何事情都为时已晚。
var originalString = "Example\t";
这应该是一个标签,还是应该是\
后跟t
?
如果您不能相信代码是正确的,那么您就会遇到问题。