JavaScript语言核心之词法结构

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

  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可以轻易的区分开标识符和数字)。

时间: 2024-10-14 21:10:16

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

第一章:Javascript语言核心

本节是javascript语言的一个快速预览,也是本书的第一部分快速预览. 本章之后,我们将主要关注javascript的基础知识.第二章我们讲解javascript的注释,分号和unicode字符集:第三章会更有意思,主要讲解javascript的变量和赋值 这里有一些实例代码说明前两章的重点内容. <script type="text/javascript"> //双斜杠之后之后的内容都于属于注释 //仔细阅读这里的注释,它将会对javascript代码做解释 // 变

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

使用Firebug和chrome-devToolBar调试页面样式或脚本是前端开发每天必做之事.这个开发神器到底能给我们带来哪些更神奇的帮助呢?这几天看的一些资料中给了我启发,能不通过Firebug和chrome-devToolBar发现JS的全局对象的全部属性呢?能不能发现document对象中含有哪些不常用而又需要深刻理解的属性呢? 我们在此开8! 一.浅析for-in语句 for-in循环也被称为“枚举”,用在非数组对象的遍历上,这个语句可以返回对象中的属性或属性对应的值. 从技术上将,你

JavaScript语言核心(一)-- prototype

类似C++强类型的静态语言中,类型 决定了 值具备的属性及method.设计好的类型在running的过程中,无法变更 JavaScript弱类型 动态语言中没有 class 即 语言中是"没有类型",对象的类型 是由运行过程中的值决定. 本类型不具备的方法借用其他类型的方法 扩展其他类型 字符串类型 不具备join方法,但可以借用 其他类型 Array中的方法 let str = 'foo'; var res = Array.prototype.join.call(str,'-');

JavaScript语言核心

ECMAScript:是一套标准.核心,定义规范.语法.数据类型.基本对象.关键字 … HTML标签类型:block.inline.inline-block.table...... 类型可以让我们分辨不同类型的标签知道给它定义什么样式.比如block类型可以设置宽高. JavaScript中的数据类型: /* 根据typeof 来划分数据类型: number(NaN).string.function.boolean.object(obj.文档中的元素.[].{}.null).undefined(

JavaScript语言核心—The Next Day

JavaScript中的valueOf()与toString() [1] toString() 方法把一个逻辑值转换为字符串,并返回结果. [2] valueOf() 返回指定对象的原始值. var m = ['1','2','3']; m.valueOf();              //返回 ['1','2','3'] m.toString();             //返回 1,2,3 toString()与valueOf()方法属于Object对象,由于所有的对象都继承了Objec

JavaScript语言核心—One Day

字符串的使用 除了length属性,字符串还提供了以下可以调用的方法: var z = "hello cnblogs";    //定义字符串 z.charAt(0);                //返回 h 第一个字符 z.charAt(z.length-1);       //返回 s 最后一个字符 z.substring(1,4);           //返回 ell 返回字符2~4 z.slice(1,4);               //返回 同上 z.slice(-

第一部分 JavaScript语言核心(三)

第六章 对象 P123 在ES3中,点运算符后的标识符不能是保留字.如果一个对象的属性名是保留字,name必须使用方括号的形式访问它们,如o["for"]和o["class"].ES5可以在点运算符后直接使用保留字. P123 JS对象都是关联数组:数组元素通过字符串索引而不是数字索引,也称散列.映射或字典. P141 JSON.stringify(o);//序列化 JSON.parse(o);//还原 同时使用用于深拷贝 第七章 数组 P146 非负整数索引被当做

JavaScript权威设计--JavaScript语言核心(简要学习笔记一)

//对象名/值得映射 var book={ top:"a", fat:true } //访问对象属性 book.top book["fat"] //通过赋值创建一个新属性 book.dou="v"; //数组 var p=[1,2,3]; p[3]=4;//通过赋值来添加新元素 p[3]=5;//通过赋值来改变已有的元素 //函数是一种值,可以赋值给变量 var sp=function(x){ return x*x; }; //按照惯例,构造函数

javascript基础语法——词法结构

× 目录 [1]java [2]定义 [3]大小写[4]保留字[5]注释[6]空白[7]分号 前面的话 javascript是一门简单的语言,也是一门复杂的语言.说它简单,是因为学会使用它只需片刻功夫:而说它复杂,是因为要真正掌握它则需要数年时间.实际上,前端工程师很大程度上就是指javascript工程师.前端入门容易精通难,说的是前端,更指的是javascript.本文是javascript基础语法的第一篇——词法结构 与java关系 关于javascript有这样一个说法,java和jav