将表单名称转换为有效的JavaScript名称的方法?

时间:2009-12-15 00:52:13

标签: javascript

我正在处理JavaScript中的一个对象,该对象是从API返回的,该API可能包含非有效JavaScript变量名的变量名。 (这些名称在我正在使用的API系统的命名约定中有效)

在一种情况下,名称以数字开头,例如'5story'

将此名称转换为有效的JavaScript变量名称的最佳方法是什么?

(我熟悉合法的JavaScript名称的形式。这个问题的一个有用的答案是(希望很简单)算法,例如在名称前加一个$,然后在将表单返回给API时将其删除)

(我注意,如果JavaScript API没有创建无效名称,那将是更好的选择)

2 个答案:

答案 0 :(得分:1)

请注意,我不确定您是否询问html标识符名称(您提及“表单”)或Javascript变量标识符,但如何剥离任何不是单词字符的字符(A-Za-z0-9_)并在下划线前加上?

var v = ' .-*&*$*$W 5 foo Bar';
v = '_' + v.replace(/\W/g, '');
v; // _W5fooBar

.replace()将删除not legal in variable identifiers字符。

您也可以使用$符号而不是下划线作为合法变量名称。

答案 1 :(得分:1)

您可以创建一个包装对象,该对象也包含对原始名称的反向引用。

function MyApiClient()
{
        var _self = this;
        this.RegisterWrapper = function(strName, objValue, explicitName)
        {
                var newName = (explicitName != null) ? explicitName : '_' + strName.replace(/\W/g, '');
                _self[newName] = {ApiName : strName, Value : objValue};
                return _self[newName];
        }
}

//implementation
var client = new MyApiClient();
client.RegisterWrapper('5story', [0,1,2,3,4,5]);
console.log(client._5story.Value); //output: Array() [0,1,2,3,4,5];
//or
var o = client.RegisterWrapper('5story', {a:'b'}, '_myName');
console.log(o.Value); //outpus Object a: 'b'
console.log(client._myName.Value); //outpus Object a: 'b'

这增加了一些额外的好处

  • 范围:创建新对象时,它们将被封装而不是全局
  • 参考:如果您引用了此对象 - 您可以使用它来点击您的API(因为它将包含旧名称)
  • 灵活性:您可以在解析从api返回的字符串时动态地通过循环注册包装器,也可以像上面那样明确地注册包装器。

您是否有关于实际api的更多信息?