编程语言的词法结构是一套基础性规则,用来描述如何使用这门语言来编写程序。作为语法的基础,它规定了诸如变量名是什么样的、怎么写注释,以及程序语句之间如何分割的等规则。

  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;"。

③有时候为了可读性较高,我们可能不把一个字符串的内容放在同一行(特别是使用js向HTML页面添加一长段HTML代码时),这时该怎么办呢?没错,就是它——反斜杠\,例如:

var h1_con = "\
<div class='h1_div'>\
<h1>我是h1</h1>\
</div>\
";
document.write(h1_con);

  

  1.1.4 标识符命名规则

  以字母、下划线、美元符($)开始,后续可以使字母、数字、下划线、美元符(不允许数字作为首字符以便JavaScript可以轻易的区分开标识符和数字)(至于在JS中一个标识符的字符数量是否有上限?记得以前学习C语言时看的书上说的是标识符最多32个字符,不过在下在Chrome、IE、FF中测试了几百个字符的标识符都是可以正常使用的,也没有在什么文档上见到过规定标识符字符数量上限的,个人推测应该没有设置上限吧)。

  1.1.5 关键字与保留字

  ①关键字(29个)

break case catch continue debugger default delete do else false
finally for function if in instanceof new null return switch
this throw true try typeof var void while with  

  

  ②保留字(7个)

  class  const  enum  extends  import  super

  ③保留字,严格模式下增加的11个

  implements  interface  let  package  private  protected  public  static  yield  arguments  eval

  注意:①这里所说的关键字及保留字都是全部小写的,因为JavaScript严格区分大小写,所以True就不是关键字了,它是一个普通的标识符;②ECMAScript 3将Java的所有关键字都列为自己的保留字,尽管这些保留字在ECMAScript 5中放宽了限制,但希望代码能在基于ECMAScript 3实现的解释器上运行的话,应当避免使用那些关键字做标识符;③JavaScript还预定义了很多全局变量和函数(30个,不过每一种特定的JavaScript运行环境都有一个自己的全局属性列表),应该避免把它们的名字做变量名或函数名,不过经测试使用它们做变量名浏览器也不会报错,也可以正常使用,但其原来的定义会被覆盖:

arguments Array Boolean Date decodeURI
decodeURIComponent encodeURI encodeURIComponent Error eval
EvalError Function Infinity ifFinite isNaN
JSON Math NaN Number Object
parseFloat parseInt RangeError ReferenceError RegExp
String SyntaxError TypeError undefined URIError

JavaScript语言核心之词法结构的更多相关文章

  1. 第一章:Javascript语言核心

    本节是javascript语言的一个快速预览,也是本书的第一部分快速预览. 读此书之前,感谢淘宝技术团队对此javascript核心的翻译,感谢弗拉纳根写出此书.感谢你们无私的分享,仅以此笔记献给你们 ...

  2. 第一部分 JavaScript语言核心(二)

    第四章 表达式和运算符 P66 运算符优先级,从上到下: p68 属性访问表达式和调用表达式的优先级比运算符优先级都要高,eg: typeof my.functions[x](y) //typeof在 ...

  3. JavaScript语言核心--词法结构

    编程语言的词法结构是一套基础性规则,用来描述如何使用这门语言来编写程序.作为语法的基础,它规定了诸如变量名是什么样的.怎么写注释,以及程序语言之间如何分隔等规则. 1. 字符集 JavaScript程 ...

  4. 第一部分 JavaScript语言核心(一)

    第二章 词法结构 P25 JavaScript是区分大小写的语言:但HTML不区分大小写(XHTML区分大小写,但浏览器具有强大的纠错能力.) 第三章 类型.变量和值 P32 var(variable ...

  5. C#6.0语言规范(二) 词法结构

    程式 AC#程序由一个或多个源文件组成,正式称为编译单元(编译单元).源文件是Unicode字符的有序序列.源文件通常与文件系统中的文件一一对应,但不需要此对应关系.为了获得最大的可移植性,建议使用U ...

  6. Swift5 语言参考(二) 词法结构

    词汇结构 Swift 的词法结构描述了什么样的字符序列形成了语言的有效标记.这些有效令牌构成语言的最低级构建块,用于描述后续章节中的其余语言.令牌由标识符,关键字,标点符号,文字或运算符组成. 在大多 ...

  7. 使用Firebug或chrome-devToolBar深入学习javascript语言核心

    使用Firebug和chrome-devToolBar调试页面样式或脚本是前端开发每天必做之事.这个开发神器到底能给我们带来哪些更神奇的帮助呢?这几天看的一些资料中给了我启发,能不通过Firebug和 ...

  8. javascript权威指南笔记--javascript语言核心(一)

    1.javascript的数据类型分为两类:原始类型和对象类型. 原始类型包括字符串.数字.布尔值.null.undefined. 对象是属性的集合,每个对象都由“名/值”对构成.数组和函数是特殊的对 ...

  9. JavaScript权威指南2.词法结构

    字符集 1.用16位的Unicode字符集编写的,可以表示地球上通用的每一种书面语言.国际化 2.每个字符都是用两个字节表示的 3.大小写敏感:关键字.变量.函数名.标识符:HTML并不区分大小写 H ...

随机推荐

  1. [Python]How to handle the exception in Python?

    This post demonstrates how to use try clause to handle the exceptions def test_exception(case=None): ...

  2. java 注解 学习

    周末闲来无事,想要研究一下注解方面的知识,曾经看过几次,都忘记了,这次学习下,而且写篇文章记录下, 1.元注解  元注解是指注解的注解.包含 @Retention @Target @Document ...

  3. UITabBarController详细说明(简介和设置)

    [objc] view plaincopy - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions ...

  4. Maven学习笔记(十一年):柔性结构

    一个典型的项目将是开发环境.测试环境和生产环境,这些环境的数据库配置是不一样的,并使用正确的配置. Maven为了支持构建的灵活性,内置了三大特性,即属性.Profile和资源过滤.本章将介绍这些特性 ...

  5. php调用webservice的几种方法

    原文:php调用webservice的几种方法 1.WSDL模式: $soap = new SoapClient("http://192.168.6.69:8899/Service1.asm ...

  6. OpenCV——Delaunay三角 [转载]

    从这个博客转载 http://blog.csdn.net/raby_gyl/article/details/17409717 请其它同学转载时注明原始文章的出处! Delaunay三角剖分是1934年 ...

  7. toString()和String.valueof()比较

     toString()和String.valueof()比较 做项目时常常会用到类型转换,比较常用的是toString(),但其实还是用String.valueof()比较好.看源码后他们的区别就更加 ...

  8. 介绍一款替代SSMS的sqlserver管理工具 toad for sqlserver5.7

    原文:介绍一款替代SSMS的sqlserver管理工具 toad for sqlserver5.7 toad for sqlserver5.7 虽然SSMS很好很强大,不过有时候使用一些第三方工具可以 ...

  9. hdu 4945 2048 (dp+组合的数目)

    2048 Time Limit: 3000/1500 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others) Total Submi ...

  10. UVA 257 - Palinwords(弦HASH)

    UVA 257 - Palinwords 题目链接 题意:输出一个文本里面的palinword,palinword的定义为.包括两个不同的回文子串,而且要求回文子串不能互相包括 思路:对于每一个单词推 ...