我正在尝试破译javascript,我发现了这种变量。 有人可以告诉我它是如何工作的吗?在判断我提出这样一个愚蠢的问题而不是谷歌搜索它之前,我想指出用谷歌搜索你甚至不知道的东西是相当困难的。我尝试了javascript变量类型,但没有运气。 :)
if (! this.sh_languages) {
this.sh_languages = {};
}
sh_languages['tcl'] = [
[
[
/#/g,
'sh_comment',
1
],
[
/\b[+-]?(?:(?:0x[A-Fa-f0-9]+)|(?:(?:[\d]*\.)?[\d]+(?:[eE][+-]?[\d]+)?))u?(?:(?:int(?:8|16|32|64))|L)?\b/g,
'sh_number',
-1
],
[
/"/g,
'sh_string',
2
],
[
/'/g,
'sh_string',
3
],
[
/~|!|%|\^|\*|\(|\)|-|\+|=|\[|\]|\\|:|;|,|\.|\/|\?|&|<|>|\|/g,
'sh_symbol',
-1
],
[
/\{|\}/g,
'sh_cbracket',
-1
],
[
/\b(?:proc|global|upvar|if|then|else|elseif|for|foreach|break|continue|while|set|eval|case|in|switch|default|exit|error|proc|return|uplevel|loop|for_array_keys|for_recursive_glob|for_file|unwind_protect|expr|catch|namespace|rename|variable|method|itcl_class|public|protected|append|binary|format|re_syntax|regexp|regsub|scan|string|subst|concat|join|lappend|lindex|list|llength|lrange|lreplace|lsearch|lset|lsort|split|expr|incr|close|eof|fblocked|fconfigure|fcopy|file|fileevent|flush|gets|open|puts|read|seek|socket|tell|load|loadTk|package|pgk::create|pgk_mkIndex|source|bgerror|history|info|interp|memory|unknown|enconding|http|msgcat|cd|clock|exec|exit|glob|pid|pwd|time|dde|registry|resource)\b/g,
'sh_keyword',
-1
],
[
/\$[A-Za-z0-9_]+/g,
'sh_variable',
-1
]
],
[
[
/$/g,
null,
-2
]
],
[
[
/"/g,
'sh_string',
-2
],
[
/\\./g,
'sh_specialchar',
-1
]
],
[
[
/'/g,
'sh_string',
-2
],
[
/\\./g,
'sh_specialchar',
-1
]
]
];
起初我以为这是一本字典,但似乎没那么。
Chrome在尝试声明时会抛出此错误:
未捕获的SyntaxError:意外的令牌[
答案 0 :(得分:4)
正如错误消息所指出的那样,它不是任何类型的变量。这是一个语法错误。
让我们分解一下:
var sh_languages
声明一个名为sh_languages
的变量。
sh_languages['tcl']
访问存储在名为tcl
的变量中的对象的sh_languages
属性。
您不能在同一语句中声明变量并访问该变量中对象的属性。
[
启动一个数组文字。
[[
启动一个数组文字,然后启动另一个数组文字并将第二个数组放在第一个数组的第一个索引中。
[[[
和第三个数组作为第二个数组的第一个索引。它一直是乌龟。
/#/g
是正则表达式文字。它匹配#
个字符并具有全局标志。正则表达式将是第三个数组的第一个索引。
,
逗号将第一个索引与第二个索引分开。
答案 1 :(得分:3)
var sh_languages['tcl'] = ..
无效。它必须是var
后面的普通标识符,而不是表达式(甚至是参考章程类型的表达式)。
与所使用的表格保持一致的更正是:
var sh_languages = {};
sh_languages['tcl'] = ..;
或者,密钥可以写为对象文字本身的一部分:
var sh_languages = {
tcl: ..
};
..
内容,就像原文中的内容一样,是由各种文字(数组,字符串,正则表达式等)组成的表达式。在这种情况下,它是某种形式的树(嵌套数组)规定的格式;其中数据的使用取决于语义。