我正在处理JavaScript中的一个对象,该对象是从API返回的,该API可能包含非有效JavaScript变量名的变量名。 (这些名称在我正在使用的API系统的命名约定中有效)
在一种情况下,名称以数字开头,例如'5story'
将此名称转换为有效的JavaScript变量名称的最佳方法是什么?
(我熟悉合法的JavaScript名称的形式。这个问题的一个有用的答案是(希望很简单)算法,例如在名称前加一个$,然后在将表单返回给API时将其删除)
(我注意,如果JavaScript API没有创建无效名称,那将是更好的选择)
答案 0 :(得分:1)
请注意,我不确定您是否询问html标识符名称(您提及“表单”)或Javascript变量标识符,但如何剥离任何不是单词字符的字符(A-Z
, a-z
,0-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的更多信息?