Доступ к экранированным свойствам объекта в JavaScript - PullRequest
0 голосов
/ 28 мая 2018

У меня есть объект со свойством, подобным этому:

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 голосов
/ 28 мая 2018

Во-первых.Это:

var originialString = / user-management / users;

… это просто синтаксические ошибки.

Строковые литералы в JS должны заключаться в кавычки.


Далее:

Символы Escape имеют значение в JavaScript исходный код .

Когда строковый литерал анализируется механизмом JavaScript, этопревратился в строку.Во время этого процесса экранирующие символы используются.

Они вообще не являются частью данных.Если вы вставляете косые черты с регулярными выражениями, то вы просто вставляете косые черты (не escape-последовательности) в строку.

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?

Если вы не можете поверить, что код верен с самого начала, у вас есть проблема.

...