===================================================
词法结构

字符集,大小写敏感性,空白符和换行符,可选的分号,注释,直接量,标识符,保留字

1 字符集
JavaScript程序是用Unicode字符集编写的。与7位的ASCII编码(只适用于英语)和8位的ISO Latin-1编码(只适用于英语的西欧语言)不同,16位的Unicode编码可以表示地球上通用的每一种书面语言。这是国际化的一个重要特征,对那些不讲英语的程序设计者尤为重要。

美国以及其他讲英语的国家的程序设计者通常都用仅支持ASCII码和Latin-1编码的文本编辑器编写程序,因此他们难以访问完整的Unicode字符集。但是这并不成问题,因为ASCII编码和Latin-1编码都是Unicode编码的子集,所以用这两种编码集合编写的JavaScript程序都是绝对有效的。JavaScript程序中的每个字符都是用两个字节表示的,习惯于认为字符都是用8位表示的程序设计者可能会对此感到惊讶,不过这个事实对程序设计者来说是透明的,所以可以忽略它。

虽然ECMAScript v3标准允许Unicode字符出现在JavaScript程序中的任何地方,但是该标准的第1版和第2版都只允许Unicode字符出现在注释或用引号括起来的字符串直接量中,ECMAScript v3程序的其他部分只能用ASCII字符集。ECMAScript标准化之前的JavaScript版本通常根本不支持U nicode编码。

2 大小写敏感性
JavaScript是区分大小写的语言。

3 空白符和换行符
JavaScript会忽略程序中记号之间的空格,制表符和换行符,除非它们是字符串或正则表达式直接量的一部分。

4 可选的分号
省略分号有时会改变程序的意图,而并不引起语法错误。
省略分号并不是一种好的编程习惯,应习惯于使用分号!

5 注释
//这里是单行注释

/*这里也是单行注释*/

/*
*这里则是多行注释
*
*/

6 直接量(literal)
就是程序中直接显示出来的数据值。


7 标识符(identifier)
在JavaScirpt中,标识符用来命名变量和函数,或者用作代码中某些循环的标签。
命名规则和Java以及其它许多语言的规则相同,每一个字符必须是字母,下划线,美元符号。
标识符不能和保留字相同。

8 保留字

保留字是不可以用作变量名,函数名,对象名,循环标签的。

表1列出了ECMAScript v3标准化的关键字。这些关键字对JavaScript来说具有特殊的意义,它们是这种语言的语法自身的一部分。
表1:保留的JavaScript的关键字

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

JavaScript还有一些未来保留字,这些字虽然现在没有用到JavaScrip语言中,但是ECAScript v3保留了它们,以备将来扩展语言时使用到它们。
表2:ECMA扩展保留的关键字

abstract    double        goto        native        static
boolean    enum        implements    package        super
byte        export        import        private        synchronized
char        extends        int        protected    throws
class        final        interface    public        TRansient
const        float        long        short        volatile
debugger

此外,每个特定JavaScript嵌入的客户端或服务器端会有自己的全局属性,也不能作为识标符。
表3:其它避免使用的识标符,是ECAScript v3标准定义的全局变量和全局函数。

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

 

===================================================
JavaScirpt的数据类型(data type)

JavaScript脚本语言同其它语言一样,有它自身的基本数据类型、表达式和算术运算符以及程序的基本框架结构。
JavaScript提供了四种基本的数据类型用来处理数字和文字, 而变量提供存放信息的地方, 表达式则可以完成较复杂的信息处理。

在JavaScript的基本类型中的数据可以是常量,也可以变量。由于JavaScript采用弱类型的形式,因而一个数据的变量或常量不必首先作声明,而是在使用或赋值时确定其数据的类型的。当然也可以先声明该数据的类型,它是通过在赋值时自动说明其数据类型的。

JS数据类型:

三种基本数据类型(也叫原始数据类型):数字(number),字符串(string),布尔值(Boolean)。
两个小数据类型(也叫作细微数据类型):空(null),未定义(undefined),它们各自定义了一个值。
三种复合数据类型:数组,函数,对象;其它一些专用的对象:Date对象,RegExp正则表达式,Error对象

---------------------------------------------------
1。数字(number)(分整数和实数)

在JavaScript中不区别整型数值和浮点型数值,所有的数字都是由浮点型表示的。
它采用IEEE745标准定义的64位浮点格式表示数字。这就是意味着它能表示的最大值是正负1.7976931348623157乘以10的308次方,最小值是正负5乘以10的负324次方。

整型,包括-253和253之间所有整数(包括-253和253),但是要注意JavaScript中某些整数运算(例如逐位运算符)范围从-231和231-1。

数字可以使用十进制、八进制和十六进制来书写。方法如下:
十进制: 直接写数字即可,如1,3,23
八进制: 以零做为引导数字,即以0开头,例如0377
十六进制:以0x做为引导数字,即以”0X”或”0x”开头,例如 0xfff、0XCAE3;

浮点型数字也叫实数,
最大可以到±1.7976931348623157x10308,最小到±5x10-324

为了方便,可以采用传统科学记数法,也可以使用指数记数法。
科学记数法,例如1.13e1、1.5e3(等价于1.5乘10的3次方),
指数记数法,例如6.02e23、1.43E-32

特殊数值Infinity:大于浮点值所能表示范围时返回此值,当负无穷大比所能表示负值还小时返回-Infinity;
非数字特殊值NaN(not a number),例如一个数除与0将返回NaN,它和任何数值不相等,包括本身,用nan表示这个无意义的结果。可以使用isNaN()函数来检测这个值使用方法

---------------------------------------------------
2。字符串(string)

用单引号或双引号括起来的unicode字符序列,
实际上,字符串是一种很独特的JavaScript数据类型。
虽然它有着与对象访问属性及方法相同的语法,但这并不意味字符串就是一种对象类型,字符串它本身并非对象。

JavaScript转义序列
   \0 NUL字符     \b 退格
   \f 走纸换页     \n 换行
   \r 回车      \t 水平制表符
   \v 垂直制表符     \' 单引号
   \" 双引号     \\ 反斜杠变量
   \xXX 2位十六进制指定Lation-1字符 \uXXXX 4位十六进制指定Unicode字符

例如: ”O’Reilly’s”应写为”O\’Reilly\’s”
   Msg = “Hello,” + “world”;
   myColor = “Blue”


---------------------------------------------------
3。布尔值(Boolean)

布尔类型只有两种状态:True或False。 它主要用来说明或代表一种状态或标志,以说明
操作流程。它与C++是不一样的,C++可以用1或0表示其状态,而JavaScript只能用True或False表示其状态。但JavaScript的布尔类型可以轻易地转换成其它数据类型,反之亦然。

在计算机中一般用1表示true,用0表示false
true: on,yes,1
false:off,no,0


---------------------------------------------------
4。null  
    无对象,如果一个变量的值为null,则表明它不是有效的对象,数组,数字,字符串和布尔值。


---------------------------------------------------
5。undefined
    未定义的值,当你使用了一个未声明的变量,或已经声明但还没有赋值的变量,或使用了一个并不存在的对象属性时,就返回这个值。


-----------------------------------
6。数据类型转换
javascript允许在程序中改变变量的类型,最常见的两个类型转换符Number和String。
Number(x)是字符型值——〉数字值型。String与之相反。相对于javascript的自动类型转换,可以将这种转换成为强制类型转换。(强制类型转换需要在javascript1.2及以上版本才可以使用)

转换字符串为数值
ParseInt(“42”,10) = 42
ParseFloat(“42.33”,10) = 42 (截断小数,四舍五入)
转换数值为字符串
最简单的方法是空串与数值字符相加 “”+2500=“2500”

 

===================================================
变量(variable)
变量是一个和数值相关的名字。

1.变量类型

变量的主要作用是存取数据、提供存放信息的容器。

对于变量必须明确变量的命名、变量的类型、变量的声明及其变量的作用域。

      变量的命名
    JavaScript中的变量命名同其计算机语言非常相似,这里要注意以下两点:
    A、必须是一个有效的变量,即变量以字母开头,中间可以出现数字如test1、text2等。除下划线(-)作为连字符外,变量名称不能有空格、(+)、(-)、(,)或其它符号。
    B、不能使用JavaScript中的关键字作为变量。在JavaScript中定义了40多个类键字,这些关键是JavaScript内部使用的,不能作为变量的名称。如Var、int、double、true不能作为变量的名称。变量名尽可能地使用能表明意义的名字或单词。
     
变量的使用注意事项:
    1。在JavaScript中,用var关键字对变量作声明:
    如,var mytest;该例子定义了一个mytest变量。但没有赋予它的值。
        Var mytest=”This is a book”;该例子定义了一个mytest变量, 同时赋予了它的值。
    2。在JavaScript中,变量以可以不作声明,而在使用时再根据数据的类型来确其变量的类型。
        如:x=100    y="125" xy= True    cost=19.5等。
       其中x整数,y为字符串,xy为布尔型,cost为实型。
3。在C、C++、Java中,变量只能存放所声明的数据类型,但JavaScript弱类型语言,变量是无类型的,你可以先把一个数值赋给变量,然后再把字符串赋给它,这是合法的。
4。JavaScript变量可以在使用前先作声明,并可赋值。
5。使用一个变量之前必须先声明,如果没有指定初始值那变量初始值是undefined,重复使用var声明同一个变量是合法的。
6。如果给一个未声明的变量赋值,JavaScript会隐式声明该变量,并且该变量会被创建为全局变量,但如果程序读取一个未声明的变量,将会报错。
7。对变量作声明的最大好处就是能及时发现代码中的错误;因为JavaScript是采用动态编译的,而动态编译是不易发现代码中的错误,特别是变量命名的方面。
8。在JavaScript中同样有全局变量和局部变量。全局变量是定义在所有函数体之外,其作用范围是所有函数;而局部变量是定义在函数体之内,只对它所在的函数起作用,而对其它函数则是不不起作用的。

例子:
创建变量
var anumber = 137;   // 变量的值是一个数
var anumber1=2;
var astring = “1”;        // 变量的值也可以是一个字符串
var astring1=“hello”;
变量名
以字母开头,不能有空格
组合命名,myAge


<script>
var myStr = "我是全局变量";
function getStr1(){
       var myStr = "我是局部变量";
        alert (myStr);
}
function getStr2(){
        alert (myStr);
}
getStr1();
getStr2();
// 测试会弹出两个提示框,第一个提示“我是局部变量”,第二个提示“我是全局变量”
</script>


2.常量
JavaScript的常量通常又称字面常量,它是不能改变的数据。

    整型常量可以使用十六进制、八进制和十进制表示其值。
    实型常量是由整数部分加小数部分表示,如12.32、193.98 。可以使用科学或标准方法表示:5E7、4e5等。
    布尔常量只有两种状态:True或False。 它主要用来说明或代表一种状态或标志,以说明操作流程。它与C++是不一样的,C++可以用1或0表示其状态,而JavaScript只能用True或False表示其状态。
      字符型常量使用单引号(‘)或双引号(“)括起来的一个或几个字符。如 "This is a book of JavaScript "、"3245"、"ewrt234234" 等。
      空值,JavaScript中有一个空值null,表示什么也没有。如试图引用没有定义的变量,则返回一个Null值。
      特殊字符,同C语言一样,JavaScript中同样以有些以反斜杠(/)开头的不可显示的特殊字符。通常称为控制字符。

 

 

 


===================================================
表达式与运算符


JavaScript 表达式和基本操作符类似于C, PERL,和 Java

表达式:

在定义完变量后,就可以对它们进行赋值、改变、计算等一系列操作,这一过程通常由表达式来完成,可以说它是变量、常量、布尔及运算符的集合,因此表达式可以分为算术表达式、字串表达式、赋值表达式以及布尔表达式等。


运算符:

1.算术运算符:
+(加) 、-(减)、 *(乘)、 /(除)、 %(取模) -(取反)、++(递加1)、--(递减1)。
        例:11%2=1 ; 如果x=2   ++x+4=7     x+++4=6
         
(++x是先执行加1,x++是执行完语句之后x在自加1)
<script>
   var i=0, j=0;
   alert(i++ + " " + ++j + " " + i);
   // 输出“0 1 1”,
   //可见i++是先输出了i,然后进行运算,而++j是先对j进行了自加运算,然后输出j的值
</script>

2.比较运算符:
==(等于)、!=(不等于)、<(小于)、>(大于)、<=(小于等于)、>=(大于等于)
          (基本操作过程是,首先对它的操作数进行比较,然后再返回一个true或False值。)

3.逻辑运算符:
位逻辑运算符:& (逻辑与)、| (逻辑或)、^ (逻辑异或) ,用于对两个32 位整型数按位进行逻辑运算
布尔操作符:&& (与), || (或), ! (非) ,只能对布尔变量使用
<< 按位左移,最左端的位(高位)抛弃,右端填零。
>> 按位右移,最高位的符号位(位31)保留并复制填充左端。
>>> 零填充右移,不对符号位作特殊处理。

4.赋值运算符:
赋值操作符有=, +=, -=, *=, /=, %=, <<=, >>=, >>>=, &=, |=, ^= ;
其中x += y; 表示 x= x + y;
x %= y; 表示 x = x%y;     // x mod(y)

5.连接操作符:+
   用于连接两个字符串:(”my“+”javascript“结果等于”my javascript“)

6.条件运算符:(?:,也叫三目运算符)
变量 = 操作数?结果1:结果2
        若操作数的结果为真,则表述式的结果为结果1,否则为结果2。
        例:status=(age>=18)?"adult":"child";如果大于18,则表达式的值为adult。

7.typeof()运算符:用来返回变量或数据的类型。

8.运算符又分单目运算符和双目运算符。
双目运算符:
    +(加) 、-(减)、 *(乘)、 /(除)、 %(取模) 、|(按位或)、&(按位与)、<<(左移)、 >>(右移)、 >>>(右移,零填充)。
    单目运算符: -(取反)、~(取补)、++(递加1)、--(递减1)。

范例
    下面是一个跑马灯效果的JavaScript文档。
    Test2_1.html
    <html>
    <head>
    <script Language="JavaScript">
    var msg="这是一个跑马灯效果的JavaScript文档";
    var interval = 100;
    var spacelen = 120;
    var space10=" ";
    var seq=0;
    function Scroll() {
    len = msg.length;
    window.status = msg.substring(0, seq+1);
    seq++;
    if ( seq >= len ) {
    seq = spacelen;
    window.setTimeout("Scroll2();", interval );
    }
    else
    window.setTimeout("Scroll();", interval );
    }
    function Scroll2() {
    var out="";
    for (i=1; i<=spacelen/space10.length; i++) out +=
    space10;
    out = out + msg;
    len=out.length;
    window.status=out.substring(seq, len);
    seq++;
    if ( seq >= len ) { seq = 0; };
    window.setTimeout("Scroll2();", interval );
    }
    Scroll();
    </script>
    <body>
    </body>
    </html>