在javascript

时间:2018-05-28 18:36:07

标签: javascript properties escaping

我有一个像这样的属性的对象:

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

在这一点上我错了吗?

1 个答案:

答案 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

如果您不能相信代码是正确的,那么您就会遇到问题。

相关问题