在javascript对象定义中连接字符串

Concatenating string inside javascript object definition

本文关键字:连接 字符串 定义 javascript 对象      更新时间:2023-09-26

我试图把一个正则表达式路由器,包括一个任意数量的slugs和键值。

我通过创建一个模式对象和它们各自的模块来实现这一点,然后将正则表达式匹配到模块。

但是,当我使用"+"操作符连接对象定义内部的字符串时,JavaScript抛出错误。

// URI PATTERNS
var SLUG =''/[a-z|A-Z|0-9|-]+)(['/]{0,1})?';
var KEYS =''/?('?.*)?$/';
// ROUTES 
var routes = {
    ''/public'/images'  +   KEYS                : 'images', /* <-- ERROR: '+' Unexpected token */
    ''/public'/other'   +   SLUG    +   KEYS    : 'something-else',
};

为什么会抛出这个错误,我如何将这些值连接起来,而不是存储在单独的变量中?

// URI PATTERNS
var SLUG = ''/[a-z|A-Z|0-9|-]+)(['/]{0,1})?';
var KEYS = ''/?('?.*)?$/';
// ROUTES 
var routes = {};
function addRoute(keyParts, value){
  routes[keyParts.join('')] = value;
}
addRoute([''/public'/images', KEYS], 'images');
addRoute([''/public'/other', SLUG, KEYS], 'something-else');
console.log(routes);

这个解决方案怎么样?希望能有所帮助!

var SLUG =''/[a-z|A-Z|0-9|-]+)(['/]{0,1})?';
var KEYS =''/?('?.*)?$/';
function obj(){
    obj=new Object();
    this.add=function(key,value){
        obj[key]=value;
    }
    this.obj=obj
}
routes=new obj();
routes.add([''/public'/images'+ KEYS], 'images');
routes.add([''/public'/other' + SLUG + KEYS],'something-else');
console.log(routes.obj);

使用计算的属性名:

var routes = {
  [`'/public'/images${KEYS}`]: 'images',

上面也使用了ES6模板字面值