编程语言的词法结构是一套基础性规则,用来描述如何使用这门语言来编写程序。作为语法的基础,它规定了诸如变量名是什么样的、怎么写注释,以及程序语句之间如何分割的等规则。
1.1字符集
JavaScript程序是用Unicode字符集编写的。至于Unicode字符集,目前虽然查过一些资料,但是至今对UTF-8、UTF-16还是晕菜,也没搞懂一个汉字到底占几个字节的问题,所以这里就不做介绍了(就当埋坑了,以后搞懂了再做介绍吧)。至于计算js中一个字符串所在字节数,曾查到如下实现代码:
1 /** 2 * 计算字符串所占的内存字节数,默认使用UTF-8的编码方式计算,也可制定为UTF-16 3 * UTF-8 是一种可变长度的 Unicode 编码格式,使用一至四个字节为每个字符编码 4 * 5 * 000000 - 00007F(128个代码) 0zzzzzzz(00-7F) 一个字节 6 * 000080 - 0007FF(1920个代码) 110yyyyy(C0-DF) 10zzzzzz(80-BF) 两个字节 7 * 000800 - 00D7FF 8 00E000 - 00FFFF(61440个代码) 1110xxxx(E0-EF) 10yyyyyy 10zzzzzz 三个字节 9 * 010000 - 10FFFF(1048576个代码) 11110www(F0-F7) 10xxxxxx 10yyyyyy 10zzzzzz 四个字节 10 * 11 * 注: Unicode在范围 D800-DFFF 中不存在任何字符 12 * {@link http://zh.wikipedia.org/wiki/UTF-8} 13 * 14 * UTF-16 大部分使用两个字节编码,编码超出 65535 的使用四个字节 15 * 000000 - 00FFFF 两个字节 16 * 010000 - 10FFFF 四个字节 17 * 18 * {@link http://zh.wikipedia.org/wiki/UTF-16} 19 * @param {String} str 20 * @param {String} charset utf-8, utf-16 21 * @return {Number} 22 */ 23 var sizeof = function(str, charset){ 24 var total = 0, 25 charCode, 26 i, 27 len; 28 charset = charset ? charset.toLowerCase() : ‘‘; 29 if(charset === ‘utf-16‘ || charset === ‘utf16‘){ 30 for(i = 0, len = str.length; i < len; i++){ 31 charCode = str.charCodeAt(i); 32 if(charCode <= 0xffff){ 33 total += 2; 34 }else{ 35 total += 4; 36 } 37 } 38 }else{ 39 for(i = 0, len = str.length; i < len; i++){ 40 charCode = str.charCodeAt(i); 41 if(charCode <= 0x007f) { 42 total += 1; 43 }else if(charCode <= 0x07ff){ 44 total += 2; 45 }else if(charCode <= 0xffff){ 46 total += 3; 47 }else{ 48 total += 4; 49 } 50 } 51 } 52 return total; 53 }
此代码来自:http://www.alloyteam.com/2013/12/js-calculate-the-number-of-bytes-occupied-by-a-string/
1.1.1 区分大小写
JavaScript是区分大小写的语言。注意:HTML并不区分大小写,在HTML中设置时间处理程序时,onclick属性可以设置成onClick,但在JavaScript代码中,必须使用小写的onclick。
1.1.2 关于注释
JavaScript支持两种注释。第一种:单行注释"//";第二种:多行注释"/* ... */"。注意:多行注释/* ... */中不能再嵌套/* ... */。
1.1.3 神奇的分号
JavaScript中的语句没有强制性的要求使用分号(;)将语句分隔开。在没有写分号时,其解析规则如下:如果当前语句和下一行语句无法合并解析,则在第一行后填补分号。有两个例外情况:①在涉及return、break和continue语句时,如果在三个关键字后紧跟换行,JavaScript则会在换行处填补分号;例如:
return true
上面代码将解析为“return;true”而不是“return true;”。
②在涉及”++“和”--“运算符时,如果要将其用做后缀表达式,它和表达式应在一行。否则,"++"和”--“将会作为下一行代码的前缀操作符并与之一起解析。例如:
x ++ y
上面的代码将会解析为"x;++y;",而不是"x++;y;"。
1.1.4 标识符命名规则
以字母、下划线、美元符($)开始,后续可以使字母、数字、下划线、美元符(不允许数组作为首字符以便JavaScript可以轻易的区分开标识符和数字)。