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

  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. [小结][N种方法]实现WPF不规则窗体

    原文:[小结][N种方法]实现WPF不规则窗体 WPF实现不规则窗体,方法很多很多多.... 本文总结DebugLZQ认为简洁高效的几种方法 实现WPF不规则窗体的几种常用的方法如下: 1.使用Ble ...

  2. HTML基本介绍

    html 即 超文本标记语言 ,即标准通用标记语言下的一个应用. "超文本"就是指页面内能够包括图片.链接.甚至音乐.程序等非文字元素.超文本标记语言的结构包括"头&qu ...

  3. dev layoutControl 控件使用

    对于排版控件,用微软的方法都是先拉 label再拉一个 Textbox  ,  虽然微软的控件了有类似于 EXCEL的单元格全并功能,但用起来使终不方便, 今天研究了一下 DEV 的这个控件,比微软的 ...

  4. HDU 1711 Number Sequence(算法验证)

    该怎么做.每一个人的人生都应该自己掌握.你给不了别人一切.你也不懂别人的忧伤. 微笑不代表快乐.哭泣不一定悲伤 不努力怎么让关心你的人幸福.不努力怎么让看不起你的人绝望. 我用生命在奋斗--lx_Zz ...

  5. ACdream: ACfun

    ACfun Time Limit: 2000/1000MS (Java/Others)Memory Limit: 128000/64000KB (Java/Others) SubmitStatisti ...

  6. DOM手术台

    CSS分类 排队: <div id="box" style="width:200px;border:1px solid red color:red;font-siz ...

  7. poj2386 Lake Counting(简单DFS)

    转载请注明出处:viewmode=contents">http://blog.csdn.net/u012860063?viewmode=contents 题目链接:http://poj ...

  8. cocos2d_x_06_游戏_一个都不能死

    终于效果图: 环境版本号:cocos2d-x-3.3beta0 使用内置的物理引擎 游戏主场景 // // HeroScene.h // 01_cocos2d-x // // Created by b ...

  9. 【Android进阶】Application对象的详解

    1:Application是什么? Application和Activity,Service一样,是android框架的一个系统组件,当android程序启动时系统会创建一个 application对 ...

  10. Java 内部类分析

    一.简介 因为现在是Android开发实习生.发现在发展过程中越来越多,但他们知道什么时候该使用真实的情况,但没有获得,例如,使用内部类,因此,学习和自己的总结后发现,通过互联网的信息,家分享,如有不 ...