javascript数组键名限制

时间:2015-12-16 16:54:32

标签: javascript arrays key

我正在编写一个函数,用于从页面上另一个表中的过滤数据动态创建计算值表。我想传递这个函数一个表头(列标题)数组,一个表数据数组和一个使用

设置的表参数数组
var tableAttributes = {border:"1px", width:"100%",height:"50px"};
for (attributeID in tableAttributes) {
    table.setAttribute(attributeID,tableAttributes[attributeID]);
}   

一切正常,直到我尝试使用" - "创建一个键/值对。登录

var tableAttributes = {border:"1px", border-collapse:"collapse"};

当它抛出错误时:

SyntaxError: missing : after property id

只是用双引号弹出键的情况吗?

2 个答案:

答案 0 :(得分:0)

我认为这应该是一种更为惯用的方式来实现你正在尝试的......

var tableAttributes = {
  "border": "1px",
  "width": "100%",
  "height": "50px",
  "border-collapse": "collapse"
};

Object.keys(tableAttributes).forEach(function(element) {
  table.setAttribute(element, tableAttributes[element]);
});

如果你运行它,你会看到带有破折号的属性。

答案 1 :(得分:0)

如果包含错误定义的Unicode" Pattern_Syntax"中的任何字符,则应将标识符放在引号中。它不是解决方案,它只会杀死症状!

标识符名称的ECMA脚本语法是

IdentifierName ::
    IdentifierStart
    IdentifierName IdentifierPart

IdentifierStart ::
    UnicodeIDStart
    $
    _
    \ UnicodeEscapeSequence

IdentifierPart ::
    UnicodeIDContinue
    $
    _
    \ UnicodeEscapeSequence
    <ZWNJ>
    <ZWJ>

<ZWNJ><ZWJ>为空白字符为零)

语法进一步解释

  

UnicodeIDStart ::具有Unicode属性“ID_Start”或“Other_ID_Start”的任何Unicode代码点

     

UnicodeIDContinue ::具有Unicode属性“ID_Continue”,“Other_ID_Continue”或“Other_ID_Start”的任何Unicode代码点

这些定义来自unicode联盟的一些表格,其中包含一个示例here。把它们全部挤出来是一项繁琐的工作,但是其他人已经完成了它,你可以看看它one of those here。一个很长的列表,但在大多数情况下只有printables ASCII字符具有更大的重要性,因此如果您想要安全并且仅使用ASCII,请不要使用以下字符作为标识符。

['!','"','#','$','%','&','\'','(',')','*','+',',','-',
'.','/',':',';','<','=','>','?','@','[','\\',']','^','`',
'{','|','}','~']

正如您所看到的,$也在其中,但我们有JQuery?这就是为什么$在ECMA脚本语法中被明确列为允许的原因。