JS词法结构
字符集:
(1)js程序是用Unicode字符集编写的。
(2)区分大小写。也就是说,关键字,变量,函数名和所有标识符都必须采取一致的大小写形式。
例如:关键字:"while"必须写为"while",其他写法:"While","WHILE"都无效。
变量名:"deleteFlg", "Deleteflag", "deleteflag", "DeleteFlag"是四个不同的变量名。
需要注意的是:HTML并不区分大小写,但JS区分,这点不要混淆。
许多客户端JS对象和属性与他们所表示的HTML标签和属性同名,在HTML中,这些标签和属性名可以使用大写,也可以使用小写,但在JS中则必须使用小写。
例如:onclick事件在HTML代码中,可以有多种写法,如下
<input type="button" οnclick="alert(1);" value="onclick"/>
<input type="button" onClick="alert(1);" value="onClick"/>
js写法种就必须用小写
document.getElementById("btn2").onclick = function() { alert(2); }; // 正确 onclick
document.getElementById("btn2").onClick = function() { alert(2); }; // 错误 onClick
命名规则这部分,要以开发团队的命名规定为准。否则,代码的维护成本会增加。
(3)空格,换行符和格式控制符
JS代码中通常使用空格符,换行符来编写出整齐的,一致缩进的代码,以提高代码的可读性。
JS可以识别如下的空格符:
普通空格符(\u0020)、水平制表符(\u0009)、垂直制表符(\u000b)、换页符(\u000c)、不中断空白(\u00a0)o、字节序标记(\ufeff)、以及在Unicode中所有Zs类别的字符。
行结束符:
换行符(\u000a)、回车符(\u000d)、行分隔符(\u2028)、段分隔符(\u2029)。
回车符加换行符在一起被解析为一个单行结束符。
(4)Unicode转义序列
JS使用6个ASCII字符来代表任意16位Uenicode内码,这些Uniicode转义序列均以'\u'为前缀,其后跟随4为十六进制数。
这种Unicode转义写法可以用在js字符串直接量,正则表达式直接量,和标识符中(关键字除外)。
例如:
console.log('caf\u00e9'); // café
console.log('cafe\u0301'); // café
console.log("café" == "caf\u00e9"); // true
console.log("café" == "cafe\u0301"); // false
(5)标准化
Unicode允许使用多种方法对同一字符进行编码,例如,上面的"é"可以使用Unicode字符"\u00e9"表示,也可以使用cafe跟随一个语调符\u0301。在文本编辑中,两种编码('caf\u00e9' 和 'cafe\u0301')方式显示是一样的,但是计算机中二进制码表示是不一样的,在计算机中也不相等。
附带JS:
/**
* 字符转Unicode码
* @param str 需要进行转换的字符
* @return 转换后的Unicode码
*/
function toUnicode(str) {
var unicodeStr = str.charCodeAt(0).toString(16);
while(unicodeStr.length < 4) {
unicodeStr = "0" + unicodeStr;
}
return "\\u" + unicodeStr;
} /**
* Unicode码转字符串
* @param unicodeStr Unicode码
* @return Unicode码对应的字符
*/
function toChar(unicodeStr) {
return unescape(unicodeStr.replace(/\u/g, "%u"));
}
// 一些测试
console.log("半角英文空格的Unicode码:" + toUnicode(" "));
console.log("水平制表符的Unicode码:" + toUnicode("\t"));
console.log("垂直制表符的Unicode码:" + toUnicode("\v"));
console.log("换页符的Unicode码:" + toUnicode("\f"));
console.log("不中断空白的Unicode码:" + toUnicode(" "));
console.log("-----------------------------------------");
console.log("换行的Unicode码:" + toUnicode("\n"));
console.log("回车的Unicode码:" + toUnicode("\r"));
console.log("-----------------------------------------");
console.log('caf\u00e9'); // café
console.log('cafe\u0301'); // café
console.log("café" == "caf\u00e9"); // true
console.log("café" == "cafe\u0301"); // false