JavaScript教程

01章 JavaScript入门JavaScript具有相当强大的页面处理能力,是衡量一个程序员水平高低的重要标志。学习JavaScript首先要了解JavaScript的“对象(object)、 类(class)、对象标识(id)、对象名称(name)” 等重要概念之间的区别,熟练掌握基本语法。学习JavaScript之前必须首先学会HTML和CSS。仅仅从网上搜索下载一些技巧便认为自己掌握了JavaScript的人决非是标准的程序员,只会通过一些工具而不懂概念语法之人, 决不是一位好程序员,甚至根本够不上程序员的资格。不同的浏览器所支持的JavaScript的语法和功能也略有不同,不同的JavaScript版本之间也同样有功能区别, 甚至浏览器的不同版本之间也会有升级的问题。因此这儿只以IE6.0为基准来介绍。JavaScript的写法<script type="text/javascript"><!--JavaScript语句<noscript>不支持JavaScript的注释。</noscript>//--></script><!--...//-->是HTML的注释,JavaScript的注释和Java相同,单行注释//,多行注释用/*...*/。大小文字也是有区别的。JavaScript的版本选择<script language="javascript1.2"><!--JavaScript语句// --></script>这是HTML4.1以前的写法,现在一般不用language属性,而用type属性JavaScript保存到外部文件<script type="text/javascript" src="../test.js"></script>src属性后的内容是带路径的文件名,后缀一般用.js。如果保存在多个文件中,可重复使用这一语句。JavaScript对事件操作的声明<meta http-equiv="Content-Script-Type" content="text/javascript">如果要用onClick等事件时,必须用meta元素的http-equiv来声明其属性值为:Content-Script-Type。JavaScript嵌在HTML中的写法<input type="button" value="Click Me!!" onclick="window.alert('Hello!!');"><a href="javascript:alert('Hello!!');">Click Me</a>如果要用onClick等事件时,必须用meta元素的http-equiv来声明其属性值为:Content-Script-Type。JavaScript执行时序<html><head><script type="text/javascript">alert(documet.title);</script><title>My test</title><script type="text/javascript">alert(documet.title);</script></head><body><script type="text/javascript">alert(document.myFrm.test.value);</script><form name_myFrm><input name="test" value="My Test"></form><script type="text/javascript">alert(document.myFrm.test.value);//--></script></body></html>上例中粉红色是错的,兰色才是正确的。当Html文中的对象还没有出现时就被使用,这显然不正确。02章 概念的理解学习JavaScript首先要了解JavaScript的“对象(object)、 类(class)、对象标识(id)、对象名称(name)、动态页面(DynamicPage)” 等重要概念之间的区别,熟练掌握基本语法。学习JavaScript之前必须首先学会HTML和CSS。对象对象主要包括Html中各Tag对象和JavaScript中用于运算控制的诸如String对象、Date对象等。Html文中的一段文字本身不是对象,但用Tag如<B>...</B>将文字括起来,这就变成了对象,也就可以对其进行操作。如果对某一段Html文你不需要用特殊意义的Tag括起来时,可以用<div></div>或<span></span>来将Html文括起来进行控制。对象标识每个对象内部都可指定一个标识符,JavaScript便可用来对其进行控制。<span id="code01">Sample1</span><p id="code01">Sample2</p><font id="code03" color="red">Sample2</font><input id="code04" type="button" onClick="func1();">对象名称与服务器处有数据交换的对象基本都有name属性,如:<img>、<a>、<input>、<form>等。HTTP在传送数据时将name一道打包在requst或response里面。而ID是纯客户端的东西,服务器端无法根据ID来取得数据。<a name="n01" href="test.html">Sample1</a><input name="n02" type="text" value="test">classclass是CSS的内容,是用来控制对象的位置、尺寸、段落、字体、颜色等。学习JavaScript重点就是要控制这些内容。.title {    font-size: medium;    margin: 0;    padding: 0.3em;    color: #ffffff;    background-color: #000000;}动态页面动态页面是指用JavaScript对Html文(即页面)的对象的CSS属性值进行控制,从而达到页面能动态地变化的效果。方法和属性属性和方法相当于谜题和函数,变量和函数是对整个程序而言,方法和属性是对对象而言。属性和方法被引用时,前面要加对象。当所处的位置正是该对象内时,对象吸以省略。window.alert("Hello"); // 对话框navigator.appName      // 浏览器的名称03章 运算符JavaScript的运算符与Java基本相同,因为是Script,在数据类型的限制方面要松散的多。赋值、加减乘除、余除“=、+、-、*、/、%”分别代表“赋值、加减乘除、余除”xx = 3 + 2;     // xx的值为  5xx = 3 - 2;     // xx的值为: 1xx = 3 * 2;     // xx的值为: 6xx = 3 / 2;     // xx的值为: 1.5xx = 3 % 2;     // xx的值为: 1增1减1“++a、a++、--a、a--”分别代表“前增1、后增1、前减1、后减1”a = 5; b = a++; // a的值为: 6、b的值为: 5a = 5; b = ++a; // a的值为: 6、b的值为: 6a = 5; b = a--; // a的值为: 4、b的值为: 5a = 5; b = --a; // a的值为: 4、b的值为: 4字符串运算作为运算符只有“+”来连接2个字符串,至于查找、截取等功能要用字符串类的各种方法实现。注意:字符串与其它类型相加时,其它类型将被自动转换为字符串类型,再相加。xx = "abcd" + "xyz"     //xx的值为: "abcdxyz"xx = "1234" + 56        //xx的值为: "123456"var dd = new Date(1999, 11, 31);xx = "今天是=" + dd     //xx的值为: "今天是=Fri Dec 31 00:00:00 UTC+0900 1999"逻辑运算符“&&、||、!”分别表示“与、或、非”if ((1 <= mon) && (mon <= 12)) {    alert("xx is between 1 and 12.");}if ((xx == "ABC") || (xx == "abc")) {    alert("xx is ABC.");}if (!(xx == 5)) {    alert("xx is not five.");}位运算符“&、|、^、~”分别表示“与、或、异或、取反”xx = 0x87654321 & 0xffff0000;   // xx的值为  0x87650000xx = 0x87654321 | 0xffff0000;   // xx的值为  0xffff4321xx = 0xffff0000 ^ 0xff00ff00;   // xx的值为  0x00ffff00xx = ~0xffff0000;               // xx的值为  0x0000ffff“<<、>>、>>>”分别表示“左移、右移、补0右移”xx = 0x12345678 <<  8;     // xx的值为  0x34567800xx = 0x12345678 >>  8;     // xx的值为  0x00123456xx = 0x87654321 >>  8;     // xx的值为  0xff876543xx = 0x87654321 >>> 8;     // xx的值为  0x00876543比较运算符相等(==)、不等(--)、大于(>)、小于(<)、大于等于(>=)、小于等于(<=)if (xx == 5) {    alert("xx is five.");}if (yy != "ABC") {    alert("yy is not ABC.");}if (xx == null) {    alert("xx is Null.");}if (yy != null) {    alert("yy is not Null.");}if (xx < 123) {    alert("xx is smaller than 123");}当类型不一致时,将被自动转换为字符串类型。如果不需要自动转换,可以用“===和!==”来代替“==”和“!=”。if ( 123  ==   123 ) { ... }     // true(真)if ("123" ==  "123") { ... }     // true(真)if ("123" ==   123 ) { ... }     // true(真)if ( 123  ==  "123") { ... }     // true(真)if ( 123  ===  123 ) { ... }     // true(真)if ("123" === "123") { ... }     // true(真)if ("123" ===  123 ) { ... }     // false(假)if ( 123  === "123") { ... }     // false(假)复合运算符加减乘除并赋值(+=、-=、*=、/=、%=、&=、|=、^=、<<=、>>=、>>>=)xx += 5;      // xx = xx + 5;xx -= 5;      // xx = xx - 5;xx *= 5;      // xx = xx * 5;xx /= 5;      // xx = xx / 5;xx %= 5;      // xx = xx % 5;xx &= 0xff;   // xx = xx & 0xff;xx |= 0xff;   // xx = xx | 0xff;xx ^= 0xff;   // xx = xx ^ 0xff;xx <<= 8;     // xx = xx << 8;xx >>= 8;     // xx = xx >> 8;xx >>>= 8;    // xx = xx >>> 8;条件运算符“exp1 ? exp2 : exp3”这和Ifelse语句相同功能但用法不同,这是运算符。yy = (xx >= 5) ? "big" : "small";     //若xx>5,则yy的值为: "big"; 若xx<=5,则yy的值为: "small"逗号分隔符主要用于函数的参数之间分隔,for循环语句中也用来分隔语句。for (i = 0, j = 0; i < 10; i++) {    ......}null时注意当对象为null时,该对象的方法和属性都不能使用,要特别注意。运算符的优先顺序优先顺序运算符↑高低↓数组([]) 括弧(( ))増1減1(++ --) 负号(-) 取反(~) 非(!)乗除余(* / %)加減(+ -) 文字列连接(+)位移(<< >> <<<)比较(< <= >= >)比较(== != === !==)AND(&)XOR(^)OR(|)与(&&)或(||)条件(? :)赋值(=) 复合(+=等)逗号(,)04章 基本语法JavaScript的流程控制语法基本与Java类似。当控制语句部分只有一句时,{}可以省略。条件分支(if...else...)if (条件) {     ......} else if (条件) {     ......} else {     ......}if (n < 10) {    alert("SMALL");}if (n < 10) {    alert("SMALL");} else {    alert("BIG");}if (n < 10) {    alert("SMALL");} else if (n > 20) {    alert("BIG");} else {    alert("NORMAL");}条件分支(switch)switch (表达式) {case 表达式的值1:    ...    break;case 表达式的值2:    ...    break;default:    ...    break;}switch (xx) {case 1:    alert("ONE");    break;case 2:    alert("TWO");    break;case 3:case 4:    alert("THREEorFOUR");    break;default:    alert("OTHER");    break;}循环(while)while (条件) {    ......}n = 0;while (n < 10) {    document.write(n);    n++;}循环(do)do {    ......} while (条件)n = 0;do {    document.write(n);    n++;} while (n < 10);循环(for)for (初始条件; 终止条件; 条件改变语句) {    ......}for (i = 0; i < 10; i++) {    document.write(i);}for (variable in array) {    //数组的情况下,也可这样使用    ......}xx = new Array(3);xx[0] = "A";xx[1] = "B";xx[2] = "C";for (i in xx) {    document.write(xx[i]);}中断(break)break;          //跳到循环结束之后break label;    //跳到循环外的某个标签处for (i = 0; i < 10; i++) {    if (i == 5) {        break;    }    document.write(i);}abc:for (i = 0; i < 10; i++) {    for (j = 0; j < 10; j++) {        xx = i * 10 + j;        if (xx > 20) {            break abc;        }        document.write(xx + "<br>");    }}继续下一轮循环(continue)continue;          //跳到循环内的开始处continue label;    //跳到某个标签处(循环内外都可以)for (i = 0; i < 10; i++) {    if (i == 5) {        continue;    }    document.write(i);}abc:for (i = 0; i < 10; i++) {    for (j = 0; j < 10; j++) {        xx = i * 10 + j;        if (xx > 20) {            continue abc;        }        document.write(xx + "<br>");    }}对象操作(with)with (对象) {    ......}with (document) {    write(bgColor); write(fgColor);}05章 数据类型虽然JavaScript没有明确地区分类型,我们仍要搞清楚以下几点:数值型和字符串型是最常见的基本类型、字符串同时作为对象处理的。日期型也是作为对象来处理的。布尔型一向简单,而数组需要重点掌握。数值型JJavaScript的数值型包括10进制、8进制、16进制、实数、小数、整数等都可以使用。O开头的整数是8进制,0x开头的整数是16进制。12345    // 10进制的123451.23     // 实数的 1.231.23e4   // 1.23 × 10的4次方1.23E4   // 1.23 × 10的4次方012      // 8进制的12(10进制的10)0x1b     // 16进制的1B(10进制的27)字符串型字符串的内容很多,专门作为一章来学习。这儿简单一提。str = "这是字符串";布尔型布尔型只有2个值:true和false。 True、TRUE、False、FALSE等都是错误的写法。作为条件比较时要特别注意:◆ 数值的0和-0,特殊变量的null、false、NaN、undefined、空字符串("")都作为false处理◆ 其它都作为true处理xx = (3 = 4);    //xx的值为: falsexx = (100 > 50); //xx的值为: true日期型日期型的内容也较多,专门作为一章来学习。这儿简单一提。dd = new Date(1999, 11, 31, 23, 59, 59, 999);数组型严格地说数组不能算基本数据类型,数组在任何语言中都是必须掌握的。xx = new Array(3); xx[0] = "Sun"; xx[1] = "Mon"; xx[6] = "Sat"; yy = new Array("Sun", "Mon", "Thu");对象类用java的思想来说,一切都是类。事实上数值型和布尔型也都封装了相应的类,即Number和Boolean。因过于简单,不用也罢。xx = new Number(123);     //等价于: xx = 123;xx = new Number("123");   //等价于: xx = palseInt("123");xx.toString();            //转换成字符串,事实上,在使用时JavaScript会自动转换。xx.toString(16);          //转换成16进制的字符串: 7Byy = new Boolean(true);   //等价于: yy = true;另外,Number类中封装了一些可以直接使用的常数。Number.NaN                 //不正确的数值Number.MAX_VALUE           //JavaScript可用的最大数Number.MIN_VALUE           //JavaScript可用的最小数Number.POSITIVE_INFINITY   //JavaScript正数无穷大Number.NEGATIVE_INFINITY   //JavaScript负数无穷小常量null        空undefined   未定义NaN         非数值Infinity    无穷大数值JavaScript将所有整数和小数都转换为浮点小数,当用不正确的类型数据进行数学运算时就转换成NaN正数大到JavaScript无法表示时,便转换成Positive Infinity负数小到JavaScript无法表示时,便转换成Negative InfinityavaScript是区分正0和负0的。null不属于任何一种数据类型,表示“没有值”。你可以将null赋给某一变量,这等于删除这个变量的值,但却保留这个变量的定义。。当null参于运算时便产生undefined结果。06章 字符串类型字符串类型在在在论何语言都是很重要的,JavaScript中的字符串替换功能要用到正则表达式,必须熟练掌握。新建字符串几乎所有类型都自动转换为字符串。字符串既可以用String类来生成,也可以用各种类型的对象的toString()方法来转换。xx = "abc";xx = new String("abd");      //String类yy = 123;xx = yy.toString();          //Integer类的toString()方法yy = new Date(2004,11,25);xx = yy.toString();          //Date类的toString()方法xx = "abc" + 123 + "xyz";    //123自动转换为字符串转意字符以下的转意字符要注意。例:在对话框中输出2行文字:alert('你好!\n欢迎光临。');\n - 换行\r - 回车\f - フォームフィード\b - 退格字符\t - Tab字符\' - 单引号(')\" - 双引号(")\\ - 反斜杠(\)\nnn - 8进制(例 "A" 写成: "\101")\xnn - 16进制(例 "A" 写成: \x41")\unnnn - Unicode字符(例 "あ"  写成: "\u3042")字符串的长度string.length        //取字符串的长度,汉字和英数字都作为1个Unicode字符。xx = "abc五笔字型".length;      //xx的值为: 7xx = "abc\n五笔字型".length;    //xx的值为: 8取字符串的部分内容string.charAt(n)    //取第n个字符xx = "abcd".charAt(2)             //xx的值为: "c"xx = "静坐常思自己过".charAt(2)   //xx的值为: "常"string.substring(from,to)    //取从from到to的字符串(不包含第to个字符)string.substring(from)       //取从from开始到最后的字符串                              //注:负数当作0处理,超过长度时,超过部分忽略不计。dd = "静坐常思自己过".substring(2)     //xx的值为: "常思自己过"dd = "静坐常思自己过".substring(0,2)   //xx的值为: "静坐"dd = "静坐常思自己过".substring(-5,2)  //xx的值为: "静坐"dd = "静坐常思自己过".substring(0,-2)  //xx的值为: ""dd = "静坐常思自己过".substring(2,20) //xx的值为: "常思自己过"dd = "静坐常思自己过".substring(2,-7) //xx的值为: "静坐"string.substr(from, len)    //取从from的len个字符串                             //注:from是负数时,则从右向左取数。len为负数时作0处理。dd = "静坐常思自己过".substr(2)     //xx的值为: "常思自己过"dd = "静坐常思自己过".substr(1,3)   //xx的值为: "坐常思"dd = "静坐常思自己过".substr(-2)    //xx的值为: "己过"dd = "静坐常思自己过".substr(1,12)  //xx的值为: "坐常思自己过"dd = "静坐常思自己过".substr(1,-2)  //xx的值为: ""string.slice(from [, to])   //注:当from为0或正数时,与substring完全相同。from为0或负数时,则从右向左取数。dd = "静坐常思自己过".substring(2)     //xx的值为: "常思自己过"dd = "静坐常思自己过".substring(-1,3) //xx的值为: "自己"字符串的分割与连接string.split(sep [,limit])    //将字符串按sep分割limit次。                               //注:sep不指定时,返回整个字符串,limit为负数时,等同不指定。xx = "aa:bb:cc:dd:ee:ff".split(":");      //结果: xx[0] = "aa"; xx[1] = "bb"; xx[2] = "cc";                                           //       xx[3] = "dd"; xx[4] = "ee"; xx[5] = "ff";xx = "aa:bb:cc:dd:ee:ff".split(":", 2);   //结果: xx[0] = "aa"; xx[1] = "bb";xx = "aa:bb:cc:dd:ee:ff".split(":", -2);  //结果: xx = "", 等同于split(":",0)。string.concat(string2)    //连接字符串,与+功能相同。xx = "谦受益".concat("满招损");     //等价于: xx = "谦受益"+"满招损";字符串的查找string.indexOf(key[,from])    //从from个字符开始查找字符串按key。                               //注:若找不到,则返回-1。找到则返回所在的位置。xx = "abcdefABCDEF".indexOf("CD");       //xx的值为: 8xx = "abcdefABCDEF".indexOf("cd",2);     //xx的值为: 2xx = "abcdefABCDEF".indexOf("cd",3);     //xx的值为: -1string.lastIndexOf(key[,from])    //从from个字符开始向左查找字符串按key。                                    //注:若找不到,则返回-1。找到则返回所在的位置。xx = "abcdefabcdef".lastIndexOf("cd");       //xx的值为: 8xx = "abcdefabcdef".lastIndexOf("cd",7);     //xx的值为: 2xx = "abcdefabcdef".lastIndexOf("cd",0);     //xx的值为: -1字符串的替换string.replace(regexp,newString)  //string的内容中与regexp正则表达式相符的部分替换成newString。                                   //注:必须具备正则表达式的知识。xx = "abcdefABCDEF".replace("def","xyz");    //xx的值为: "abcxyzABCDEF"string.toUpperCase()    //英文大写string.toLowerCase()    //英文小写xx = "abcdefABCDEF".toUpperCase();     //xx的值为: ABCDEFABCDEFxx = "abcdefABCDEF".toLowerCase();     //xx的值为: abcdefabcdef正则表达式的使用string.match(regexp)    //返回与正则表达式匹配的字符串xx = "abcdefABCDEF".match(/def/i);    //xx的值为: "def"xx = "abcdefABCDEF".match(/xyz/i);    //xx的值为: nullstring.match(regexp)    //返回与正则表达式匹配的字符串的位置,找不到返回-1xx = "abcdefABCDEF".match(/def/i);    //xx的值为: 3xx = "abcdefABCDEF".match(/xyz/i);    //xx的值为: -1字符串与字符的变换string.charCodeAt(n)    //取第n个字符xx = "abcdefABCDEF".charCodeAt(2);    //xx的值为: "c"xx = "abcdefABCDEF".charCodeAt(-1);   //xx的值为: NaNxx = "abcdefABCDEF".charCodeAt(20);   //xx的值为: NaNString.fromCharCode(num1, ... , numN)    //将N个字符转换为字符串xx = String.fromCharCode(0x41, 0x42, 0x43);    //xx的值为: "ABC"xx = String.fromCharCode("A", "B", 0x43);      //JavaScript出错字符串与其它类型的变换ParseInt(string)      //字符串转换为整型ParseFloat(string)    //字符串转换为浮点型Eval(string)          //取第n个字符xx = "abcdefABCDEF".charCodeAt(2);    //xx的值为: "c"xx = "abcdefABCDEF".charCodeAt(-1);   //xx的值为: NaNxx = "abcdefABCDEF".charCodeAt(20);   //xx的值为: NaNString.fromCharCode(num1, ... , numN)   //将N个字符转换为字符串xx = String.fromCharCode(0x41, 0x42, 0x43);    //xx的值为: "ABC"xx = String.fromCharCode("A", "B", 0x43);      //JavaScript出错字符串转换成带Tag修饰string.bold()           //<b>string</b>string.italics()        //<i>string</i>string.fixed()          //<tt>string</tt>string.big()            //<big>string</big>string.small()          //<small>string</small>string.blink()          //<blink>string</blink>string.strike()         //<strike>string</strike>string.sup()            //<sup>string</sup>string.sub()            //<sub>string</sub>string.fontcolor(color) //<font color=color>string</font>string.fontsize(size)   //<font size=size>string</font>string.anchor(name)     //<a name=name>string</a>string.link(name)       //<a href=name>string</a>xx = "abcdefABCDEF".fixed();    //xx的值为: "<fix>abcdefABCDEF</fix>"07章 日期类型同样,日期类型也是非常重要的数据类型,必须熟练掌握。新建日期date = new Date(...);   //...部分是:“年、月、日、时、分、秒”的组合,数字和字符串皆可。   //注:月份是0~11,而不是1~12。   //全部缺省,则表示当前年月日时分秒   //只有年份,则表示1970年01月01日 09:00:00   //只有年月,则日用01表示,时分秒则用00:00:00表示   //只有年月日,则时分秒则用00:00:00表示dd = new Date(0,0);      //dd的结果: Mon Jan 1 00:00:00 UTC+0900 1900dd = new Date(99,12);    //dd的结果: Thu Jan 1 09:00:02 UTC+0900 1970  (年份无效)dd = new Date("2004",10); //dd的结果: Mon Nov 1 00:00:00 UTC+0900 2004dd = new Date(2004,10,21);//dd的结果: Sun Nov 21 00:00:00 UTC+0900 2004注:年份为0~99时,则年份自动加上1900,变成:1900~1999dd = new Date(0,0);       //dd的结果: Sun Nov 21 21:16:38 UTC+0900 2004dd = new Date(99,11);      //dd的结果: Wed Dec 1 00:00:00 UTC+0900 1999dd = new Date(99,0);       //dd的结果: Fri Jan 1 00:00:00 UTC+0900 100dd = new Date(9999,11);    //dd的结果: Wed Dec 1 00:00:00 UTC+0900 9999注:时刻省略时,则用0代替,微秒也可以表示。dd = new Date(2004,0,1,23);             //dd的结果: Thu Jan 1 23:00:00 UTC+0900 2004dd = new Date(2004,0,1,23,59);         //dd的结果: Thu Jan 1 23:59:00 UTC+0900 2004dd = new Date(2004,0,1,23,59,59);     //dd的结果: Thu Jan 1 23:59:59 UTC+0900 2004dd = new Date(2004,0,1,23,59,59,999);//dd的结果: Thu Jan 1 23:59:59 UTC+0900 2004字符串的日期格式dd = new Date("1999/12/31 23:59:59");        //1999年11月31日 星期5 23:59:59dd = new Date("Dec 31, 1999 23:59:59");      //同上dd = new Date("December 31, 1999 23:59:59"); //同上dd = new Date("1999-12-31 23:59:59");        //不正确,这与Windows控制面板中的设置有关日期信息的取得和设置date.getFullYear()     //取得日期的年(YYYY)date.setFullYear(year) //date.getYear()         //取得日期的年:1900~1999年,则返回YY,其它返回YYYYdate.setYear(year)     //date.getMonth()        //取得日期的月(MM)date.setMonth(mon)     //date.getDate()         //取得日期的日(DD)date.setDate(date)     //date.getDay()          //取得日期的星期(WEEK)date.getHours()        //取得日期的时(HH)date.setHours(hour)    //date.getMinutes()      //取得日期的分(MI)date.setMinutes(min)   //date.getSeconds()      //取得日期的秒(SS)date.setSeconds(sec)   //date.getMilliseconds() //取得日期的微秒(MS)date.setMilliseconds(msec)  //dd   = new Date(1985,4,19,23,59,30,999);yyyy = date.getFullYear() 了      //结果为: 1985yy   = date.getYear()             //结果为: 85mm   = date.getMonth()            //结果为: 4 (五月)dd   = date.getDate()             //结果为: 19ww   = date.getDay()              //结果为: 0 (星期日)hh   = date.getHours()            //结果为: 23mi   = date.getMinutes()          //结果为: 59ss   = date.getSeconds()          //结果为: 30ms   = date.getMilliseconds()     //结果为: 999dd.setFullYear(2004);             //结果为: Wed May 19 23:59:30 UTC+0900 2004国际标准时的取得和设置date.getUTCFullYear()          //取得日期的年(YYYY)date.setUTCFullYear(year)date.getUTCYear()              //取得日期的年:1900~1999年,则返回YY,其它返回YYYYdate.setUTCYear(year)date.getUTCMonth()             //取得日期的月(MM)date.setUTCMonth(mon)date.getUTCDate()              //取得日期的日(DD)date.setUTCDate(date)date.getUTCDay()               //取得日期的星期(WEEK)date.getUTCHours()             //取得日期的时(HH)date.setUTCHours(hour)date.getUTCMinutes()           //取得日期的分(MI)date.setUTCMinutes(min)date.getUTCSeconds()           //取得日期的秒(SS)date.setUTCSeconds(sec)date.getUTCMilliseconds()      //取得日期的微秒(MS)date.setUTCMilliseconds(msec)dd = new Date(1985,4,1,1,59,30,999);d1 = dd.getMonth()+"月"+dd.getDate()+"日  星期"+dd.getDay()          //4月1日 星期3t1 = dd.getHours()+":"+dd.getMinutes()+":"+dd.getSeconds()           //1:59:30d2 = dd.getUTCMonth()+"月"+dd.getUTCDate()+"日  星期"+dd.getUTCDay() //3月30日 星期2t2 = dd.getUTCHours()+":"+dd.getUTCMinutes()+":"+dd.getUTCSeconds()  //16:59:30国际时差date.getTimezoneOffset()返回日期对象采用的时区与格林威治时间所差的分钟数。在格林威治东方的市区,该值为负,例如:中国时区(GMT+0800)返回“-480”。 注:Date 日期对象。这个对象可以储存任意一个日期,从 0001 年到 9999 年,并且可以精确到毫秒数(1/1000 秒)。 在内部,日期对象是一个整数,它是从 1970 年 1 月 1 日零时正开始计算到日期对象所指的日期的毫秒数。 如果所指日期比 1970 年早,则它是一个负数。所有日期时间,如果不指定时区,都采用“UTC”(世界时)时区, 它与“GMT”(格林威治时间)在数值上是一样的。(GMT-12:00) 国际换日线以西, 瓜加林岛(GMT-11:00) 中途岛, 萨摩亚(GMT-10:00) 夏威夷(GMT-9:00) 阿拉斯加(GMT-8:00) 太平洋時区 (美 & 加)(GMT-7:00) 山区時間 (美 & 加)(GMT-6:00) 中央時間 (美 & 加), 墨西哥(GMT-5:00) 东部時間 (美 & 加), 波哥大, 利马, 基多(GMT-4:00) 大西洋 時区 (加), 卡拉卡斯(委內瑞拉), 拉巴斯(玻利维亚)(GMT-3:30) 纽芬兰(GMT-3:00) 巴西利亚, 布宜諾艾利斯, 佐治敦(GMT-2:00) 大西洋中部(GMT-1:00) 亚速尔群岛, 维德角群岛(GMT) 格林威治中央標準時間, 伦敦, 都柏林, 里斯本, 卡萨布兰卡, 蒙罗维亚(GMT+1:00) 中西非, 柏林, 罗马, 斯德哥尔摩, 布魯賽尔, 马德里, 巴黎(GMT+2:00) 布加勒斯特, 哈拉雷, 皮托里, 耶路撒冷, 开罗, 南非(GMT+3:00) 巴格达, 科威特, 利雅德, 莫斯科, 聖彼得堡(GMT+3:30) 德黑兰(GMT+4:00) 巴库, 第比利斯, 葉里溫, 阿布达比(GMT+4:30) 喀布尔(GMT+5:00) 伊卡特林堡, 伊斯兰马巴德, 克洛其, 塔什干(GMT+5:30) 辰內, 加尔各答, 孟拜, 新德里(GMT+6:00) 阿马提, 达卡, 可伦坡(GMT+7:00) 曼谷, 河內, 雅加达(GMT+8:00) 北京,台湾,香港,新加坡,伯斯,乌兰巴突(GMT+9:00) 东京, 汉城, 大阪, 札幌, 亚库次克(GMT+9:30) 爱德蓝, 达尔文(GMT+10:00) 布里斯本, 坎培拉, 墨尔本, 雪梨, 海参威(GMT+11:00) 马加丹, 所罗門群岛, 新加勒多尼亚(GMT+12:00) 奧克兰(纽西兰),威灵頓(纽西兰首都),斐济,堪察加半岛,马绍尔群岛现在当地时间: 2021.06.19 星期一  1:26:07日期与字符串的转换date.toString()  //转换为字符串,这与自动转换结果相同  date.toLocaleString() //转换为当地格式的字任串  date.toGMTString() //转换为GMT格式的字任串  date.toUTCString() //转换为UTC格式的字任串dd = new Date("1999/12/31 23:59:59");xx = dd.toString()         //xx的值为: "Fri Dec 31 23:59:59 UTC+0900 1999"xx = dd.toLocaleString()   //xx的值为: "1999年12月31日 23:59:59"xx = dd.toGMTString()      //xx的值为: "Fri, 31 Dec 1999 14:59:59 UTC"xx = dd.toUTCString()      //xx的值为: "Fri, 31 Dec 1999 14:59:59 UTC"日期与数的转换为了说明方便,此处将“1970年1月1日0时0分0秒(UTC)开始的微秒数”称为“绝对时间”date.getTime()         //取得“绝对时间”date.setTime(time)     //设置“绝对时间”date.UTC(year,mon,day,hour,min,sec)    //取得指定日期的“绝对时间”date.parse(string)     //转换“绝对时间”成日期dd = new Date("1970/1/1 00:00:59");xx = dd.getTime()             //xx的值为: -32341000xx = dd.setTime(24*3600)      //xx的值为: "Fri Jan 2 09:00:00 UTC+0900 1970"08章 数组JavaScript中没有多维数组,只有一维数组。因为数组成员的类型是任意,所以,可以对每一个数组成员再赋给它一个数组的方式来解决。数组的基数从0开始。新建数组array = new Array()            //定义一个数组。其元素个数为0array = new Array(n)           //定义一个数组。其元素个数为narray = new Array(e1, e2, ...) //定义一个数组,对其每个元素赋上初值                               //注:JavaScript中数组元素的个数可以任意增加xx = new Array();       //xx的长度是0xx[0] = "January";      //xx的长度变为1xx[1] = "February";     //xx的长度变为2xx[11] = "December";    //xx的长度变为12也可以在新建数组时直接赋值yy = new Array("January", "February", null, null, null, null, null, null, null, null, null, "December");//结果与上例相同//数组的序号也可以用字符串代替, 但排序可能有问题xx = new Array();xx["Jan"] = "January";xx["Feb"] = "February";xx["Dec"] = "December";数组的元素再定义成数组, 便可以产生多维数组或树形数组xx = new Array(3);                         //结果:for (i = 0; i < xx.length; i++) {          //xx[0][0]=0    xx[1][0]=10    xx[2][0]=20    xx[i] = new Array(4);                  //xx[0][1]=1    xx[1][1]=11    xx[2][1]=21    for (j = 0; j < xx[i].length; j++) {   //xx[0][2]=2    xx[1][2]=12    xx[2][2]=22        xx[i][j] = i * 10 + j;             //xx[0][3]=3    xx[1][3]=13    xx[2][3]=23    }                                      //}                                          //--------------------------------------------------------------------------------------//以下是九九乘法表的例子xx = new Array(9);for (i = 0; i < xx.length; i++) {    xx[i] = new Array(i+1);    for (j = 0; j < i+1; j++) {        xx[i][j] = (i+1) * (j+1);    }}数组长度的取得array.lengthyy = new Array("Sun", "Mon", "Thu");len = yy.length;          //len的值为: 3数组的连结array.concat(array2, ...)   //两个数组的连接xx = new Array("Sun", "Mon", "Tue", "Wed");yy = new Array("Thu", "Fri", "Sat");zz = xx.concat(yy);   //zz的值: "Sun", ...., "Sat"array.join([separator])    //用分隔符将数组个元素连接起来xx = new Array("2004", "12", "07");yy = xx.join("/");         // yy的值: "2004/12/07"数组的排序array.sort();      //按升序排序array.reverse();   //按降序排序xx = new Array(9,1,7,3);xx.sort();       //xx的结果是: 1,3,7,9xx.reverse();    //xx的结果是: 9,7,3,1array.sort([func]);    //这是一个让人笑掉大牙的排序function sortMethod(a, b) {     //先定义一个函数,函数名任意起名    return a - b;               //参数必须2个,参数名任意起名}                               //数组内部比较时根据return值来决定//其它资料说:“正数:升序  0:不排序  负数:降序”      --错误的说法//“参数1-参数2:升序  0:不排序  参数2-参数1:降序” --正确的说法xx = new Array(9,1,7,3);xx.sort(sortMethod);         //xx的结果是:  1,3,7,9//将上面改成: return b-a;    //xx的结果是:  9,7,3,1//将上面改成: return b-b;    //xx的结果是:  9,1,7,3取数组的子集array.slice(start [, end])  //start到end的子集,end没有则到最后xx = new Array("A", "B", "C", "D""E", "F", "G");xx.slice(3);      //xx的结果: "D", "E", "F", "G"xx.slice(1,3);    //xx的结果: "B", "C", "D"序列化array.toString()   //所有的类几乎都有toString方法。xx = new Array("A", "B", "C", "D", "E", "F", "G");xx.toString();      //xx的结果: "A, B, C, D, E, F, G"09章 数学函数JavaScript的数学函数全部封装在Math类里面,虽然使用频率不是太高,但却是必不可少的。常量Math.PI       //圆周率:3.14159265Math.E        //自然对数的底:2.718Math.SQRT2    //2的平方根:1.414Math.SQRT1_2  //1/2的平方根:0.707Math.LN2      //2的自然对数:0.693Math.LN10     //10的自然对数:2.302Math.LOG2E    //2为底e的对数:1.442Math.LOG210E  //10为底e的对数:0.434随机数Math.random()   //产生一个大于等于0小于1的随机数xx = Math.floor(Math.random() * 12);  //产生一个大于等于0小于12的随机数小数部分的舍入Math.ceil()    //小数部分不为0,则强行进1Math.floor()   //小数部分强行舍去,即取整Math.round()   //小数部分四舍五入xx = Math.ceil(3.0);      //xx的值为3xx = Math.ceil(2.001);    //xx的值为3xx = Math.floor(3.99);    //xx的值为3xx = Math.round(2.5);     //xx的值为3xx = Math.round(3.49);    //xx的值为3最大、最小、绝对值Math.max(x,y);    //取最大值Math.min(x,y);    //取最小值Math.abs(x);      //取绝对值xx = Math.max(-20,3);     //xx的值为3xx = Math min(23,3);      //xx的值为3xx = Math.abc(-3);        //xx的值为3乘方、开平方、对数Math.pow(n, m);   //n的m次乘方Math.exp(m);      //e的m次乘方Math.sqrt(n);     //n的平方根Math.log(n);      //e为底n的对数      //注: 开n次方的函数没有,但可以根据对数求得。xx = Math.pow(2,10);    //xx的值为: 1024xx = Math.exp(3);       //xx的值为: 20.085536923187668xx = Math.sqrt(10);     //xx的值为: 3.1622776601683795xx = Math.log(10);      //xx的值为: 2.302585092994046三角函数Math.sin(m);   //正弦: (-1~1)Math.cos(m);   //余弦: (-1~1)Math.tan(m);   //正切: (-∞~∞)  //注: 度数采用的是弧度,180度应转化为π(即Math.PI),36度也就是36/180*Math.PI。  //没有余切函数,余切为正切的倒数。xx = Math.sin(30/180*Math.PI);   //xx的值为: 0.49999999999999994yy = Math.cos(30/180*Math.PI);   //yy的值为: 0.8660254037844387zz = Math.tan(45/180*Math.PI);   //zz的值为: 0.9999999999999999ww = eval(Math.pow(xx,2)) + eval(Math.pow(yy,2));  //zz的值为: 1Math.asin(m); //反正弦: (-π/2~π/2)Math.acos(m); //反余弦: (0~π)Math.atan(m); //反正切: (-π/2~π/2)xx = Math.asin(0.5)*180/Math.PI;                //xx的值为: 30.000000000000003yy = Math.acos(0.8660254037844387)*180/Math.PI; //yy的值为: 29.999999999999993zz = Math.atan(1)*180/Math.PI;                  //zz的值为: 45Math.atan2(y,x); //根据(x,y)的坐标求弧度: (-π~π)  //注: 参数是反过来写的。xx = Math.atan2(1, 1.732)   //xx的值为: 0.5236114777699694                            //即: (1.732,1)坐标的度数为: 30度取最大最小值Math.max(x,y);   //取x和y的最大值Math.min(x,y);   //取x和y的最小值xx = Math.max(23, -100);   //xx的值为: 23xx = Math.min(23, -100);   //xx的值为: -10010章 函数在JavaScript中函数的定义比其他语言自由的多,过程也是函数。函数可以给他一个返回值,也可以不给。参数即可以显式定义,也可以不定义而在调用时直接传递。注意,JavaScript中函数变成了对象,这样一来可以解决许多疑难杂症,不过,使用时要当心。关于参数传递,即形式参数还是值参数。JavaScript和Java是完全相同,是值传递参数,也就是说,在函数体中,不管参数如何被修改,都不影响调用处变量的值。当参数是对象时,该对象的属性值被修改时,外面调用处的内容也同时被修改。因为值传递参数时,所传送的实际上是地址,也就是函数外面的对象地址被传经来了,所以函数里面和外面用的是同一对象。(初学者可以只记住现象。)函数定义//标准函数的写法function funcName (arg1, arg2, ...) {    ···    return retValue;}xx = funcName(para1, para2, ...);//没有返回值的函数写法function funcName (arg1, arg2, ...) {    ···    //return retValue;}funcName(para1, para2, ...);//如果硬要写成以下格式,则xx的结果为: "undefined"。xx = funcName(para1, para2, ...);   //xx的结果为: "undefined"//隐式使用参数的函数写法function funcName () {    //用法参考    for (i=0; i<funcName.arguments.length; i++) {       alert(funcName.arguments[i]);    }    ···}xx = funcName("aaa",123);    //结果显示2次对话框//作为对象的函数写法//和上面的方法相同,这种写法不常见funcName = function(arg1, arg2, ..., statements) {    ···}//一次性被使用的函数写法//这是上面方法的引申,一般没有参数,函数名也不需要。例如:window.onbeforeunload = function() {    ···}参数传递//下例传递3种类型的数据(注意:初学者不要深究)function testPara(objX1, objX2, strY, intZ) {    objX1.value = "对象1内容已经被修改";    objX2 = objX1;    //注意和上一句的区别    strY = "字符串没有被修改";    intZ = 9876;}<!--以下是HTML文中的例子--><input id="id1" value="原先的对象1内容"><input id="id2" value="原先的对象2内容"><script type="text/javascript"><!--var objA1 = document.getElementById("id1");var objA2 = document.getElementById("id2");var strB  = "原先的字符串";var intC  = 1234;testPara(objA1, objA2, strB, intC);alert(objA1.value);  //显示: 对象1内容已经被修改alert(objA2.value);  //显示: 原先的对象2内容alert(strB);         //显示: 原先的字符串alert(intC);         //显示: 1234// --></script>参数的取得func.arguments //结果是数组,数组长度就是参数个数11章 对象JavaScript中的对象有2部分,一是HTML文中定义的对象,可以直接使用。一是用JavaScript语句新产生的对象。本章讲述的是后一种的特例,即定义一个新的类以及类的属性、方法。上一章讲到函数也是对象,准确地说应该叫类,只不过权威资料上既然那么写,大家便一直这么称呼。类的定义类的构造函数function MyClass() {    //和普通的函数定义完全相同    ···               //构造函数的参数是任意的}类的属性function MyClass(para1, para2, ...) { //类的所有属性必须在构造函数中    this.att1 = para1;                //用this指定,并赋上初始值。    this.att2 = "." + para2;          //不需要赋值的属性可以赋null。}类的方法function methodOfMyClass() {     //事先定义一个函数备用,    alert(this.att1 + this.att2);  //然后在下面的构造函数中指定。}                                  //用到当前类的属性时,this不可缺。function MyClass(para1, para2, ...) { //构造函数中不指定一下,上面的函数就变成了普通函数,而不是类的方法this.att1 = para1;                     //属性1this.att2 = "." + para2;               //属性2this.method1 = methodOfMyClass;    //构造函数中指定前面定义的函数名}                                      //这是回调函数的用法类的实例(被使用)function test(){    var obj = new MyClass("诸葛", "孔明");    obj.method1();    //结果显示对话框:“诸葛.孔明”    alert(obj.att1);  //结果显示对话框:“诸葛”}生成一个对象实例object = new Object();  //变量先赋于一个既存对象的实例。var obj = new Date();var myobj = new MyClass("1989","06");取类的构造函数定义object.constructor;     //取类的定义程序,注意:这是属性,不是方法//例子1:JavaScript已经定义好的类var now = new Date();     //xx的内容: function Date() {xx = now.constructor;   //              [native code]                          //           }//例子2:自定义的类function myClass(){           //这3行内容显示在下面的对话框中    this.id = Math.random();  //}                             //var myobj = new MyClass();alert(myobj.constructor);   //对话框中显示上面3行类属性的增加Object.prototype.newAttName; //对已经定义的类增加新的属性Date.prototype.DC = "公元前";xx = new Date();alert(xx.DC);        //显示:"公元前"xx.DC = "公元后";alert(xx.DC);        //显示:"公元后"序列化object.toString(); //类都有toString()方法,也可覆盖它function myToString() {         //事先定义一个函数,以备下面的类的方法用    return this.id + this.Name;}function myClass(){    this.id = "abc";    this.name = "xyz"    this.toString = myToString;  //将上面定义的函数变成序列化的方法}var myobj = new MyClass();alert(myobj.toString());     //对话框中显示: "abcxyz"求值object.valueOf();   //根据类型求值  //注: Number型,返回数值; String型,返回字符串;  //日期型,返回getTime()var strX = "abcd";var intX = 123;var dateX = new Date();alert(strX.valueOf());     //对话框中显示: "abcd"alert(intX.valueOf());     //对话框中显示: 123alert(dateX.valueOf());    //对话框中显示: 110252046314012章 正则表达式正则表达式由来已久,查找替换功能非常强大,但模板难记复杂。 JavaScript中String对象的match()、replace()这2个方法都要使用正则表达式的模板。 当模板内容与字符串不相匹配时,match()返回null,replace()返回原字符串。正则表达式的模板对象//标准写法regexp = new RegExp(pattern[, flag]);    pattern:  模板的用法是关键,也是本章的主要内容。    flag:     "i"(ignore)、"g"(global)、"m"(multiline)的组合    i-忽略大小写,g-反复检索,m-多行检索flag中没有g时,返回字符串,有g时返回字符串数组var reg = new RegExp("飞雪","g");var str = "风雨送春归飞雪迎春到,飞雪连天向天横";var xx = str.(str.match(reg));  //xx的结果: xx[0]="飞雪"alert(xx);                      //          xx[1]="飞雪"//常用写法regexp = new RegExp(/pattern /[flag]);  //去掉引号逗号改用“/”ar reg = new RegExp(/飞雪/g);var str = "风雨送春归飞雪迎春到,飞雪连天向天横";var xx = str.(str.match(reg));  //xx的结果: xx[0]="飞雪"alert(xx);                      //          xx[1]="飞雪"//省略写法string.match(/pattern/flag);整个模板对象省略,让JavaScript自动生成//var reg = new RegExp(/飞雪/g);var str = "风雨送春归飞雪迎春到,飞雪连天向天横";var xx = str.(str.match(/飞雪/g));  //xx的结果: xx[0]="飞雪"alert(xx);                          //          xx[1]="飞雪"模板的语法(即正规表现)//字符串相匹配(包括单个字符)【字符串】reg = new RegExp(/abc/ig);   //匹配字符串"abc",多次,大小写不计reg = new RegExp(/abc/ig);xx = "123ABCxyzbcaLMNAbC".match(reg);    //xx为: ABC,AbC   注;bca不符合//多个字符串中任意一个相匹配【|】reg = new RegExp(/abc|xyz/ig);   //字符串abc或xyz之间用|分割    注: 【|】不适用于下面的[...]内容reg = new RegExp(/abc|xyz/ig);xx = "123ABCxyzbcaLMNAbC".match(reg);    //xx为: ABC,xyz,AbC//字符串中任意一个字符相匹配【[...],[.-.]】reg1 = new RegExp(/[abc]/ig);  //匹配任意一个字符用[...]reg2 = new RegExp(/[m-p]/ig);  //连续字符串可用减号[.-.]reg3 = new RegExp(/[0-9]/g);   //判断是否包含数字reg4 = new RegExp(/[a-z]/ig);  //判断是否包含英文字母    //注: 【-】只是用于[...]中reg1 = new RegExp(/[abc]/ig);xx = "123ABCopqbcaLMNAbC".match(reg1);  //xx为: A,B,C,b,c,a,A,b,Creg2 = new RegExp(/[m-p]/ig);yy = "123ABCopqbcaLMNAbC".match(reg2);  //yy为: o,p,M,N//字符串中任意一个字符不包含匹配【[^...]】reg1 = new RegExp(/[^abc]/ig);  //匹配任意一个字符都不被包含用^reg2 = new RegExp(/[^m-p]/ig);  //不包含mnop的任一字符reg3 = new RegExp(/[^0-9]/g);   //判断是否不包含数字reg4 = new RegExp(/[^a-z]/ig);  //判断是否不包含英文字母    注: 【^】是在[...]的里面,不是后面所说的【^】在[...]外面reg1 = new RegExp(/[^abc]/ig);xx = "123ABCopqbcaLMN".match(reg1);  //xx为: 1,2,3,o,p,q,L,M,Nreg3 = new RegExp(/[^0-9]/g);yy = "123opqLMN".match(reg3);        //yy为: o,p,q,L,M,N//多个重复字符相匹配【{m,n}】说明: {m,n}表示从m到n次重复字符相匹配,m,n为大于等于0的整数。{m}和{m,}都是正确的,{ ,n}语法不错,但永远不能匹配reg1 = new RegExp(/abc{2}/ig);    //等价于“/abcc/ig”reg2 = new RegExp(/abc{1,2}/ig); //等价于“/abc|abcc/ig”reg3 = new RegExp(/abc{0,2}/ig); //等价于“/ab|abc|abcc/ig”reg4 = new RegExp(/abc{0,}/ig);   //匹配ab后面跟任意个creg5 = new RegExp(/abc{1,}/ig);   //匹配ab后面跟一个以上的c    注: 【{m,n}】不适用于[...]中reg1 = new RegExp(/abc{2}/ig);xx = "abcABCCabccc".match(reg1);              //xx为: ABCC,abccreg3 = new RegExp(/abc{0,2}/ig);yy = "abxABCCabccc".match(reg3);              //yy为: ab,ABC,abcczz = "abA Ba  bA    b".match(/a {0,}b/ig);    //匹配ab之间任意空格。zz为: ab,A B,a  b,A    bww = "aa1bb22cc321dd9876".match(/[0-9]{2}/g); //匹配2位数字。ww为:22,32,98,76//子表达式即字符串的一部分相匹配【(...)】说明: 对字符串的一部分进行操作,可以用()括起来reg1 = new RegExp(/abc{2}/ig);      //等价于“/abcc/ig”,c被重复了2遍reg2 = new RegExp(/a(bc){2}/ig);  //等价于“/abcbc/ig”,bc被重复了2遍reg1 = new RegExp(/abc{2}/ig);xx = "abcABCbccc".match(reg1);     //xx为: nullreg2 = new RegExp(/a(bc){2}/ig);yy = "abcABCbccc".match(reg2);     //yy为: ABCbc通配符//匹配单个任意字符(不包括\n)【.】xx = "at act ant amount".match(/a.t/gi);      //a与t之间有1个字符。xx=act,antxx = "at act ant amount".match(/a....t/gi);   //a与t之间有4个字符。xx=amount//任意匹配字符或字符串【*】等价于{0,}    “*”星号前面至少必须有一个字符,任意匹配时可以用“.”代替字符    “*”星号前面不能用限定符{...}及其简写形式xx = "at act ant amount".match(/a*t/gi);      //t前面任意个a。xx=at,t,t,txx = "at act ant amount".match(/a.*t/gi);     //a与t之间任意个字符。xx=at,act,ant,amountxx = "at act ant amount".match(/*t/gi);       //语法出错(*前面无字符)xx = "at act ant amount".match(/a{1}*/gi);    //语法出错(*前面不能有限定符)(ie上虽不出错,按字符个数匹配)xx = "at act ant amount".match(/.*ou/gi);     //ou前面任意个字符。xx=at act ant amouxx = "at act ant amount".match(/.*/gi);       //与原字符串相同。xx=at act ant amount//子表达式的任意匹配【?】等价于{0,1}    “?”问号前面至少必须有一个字符,任意匹配时可以用“.”代替字符    “?”问号前面没有用(...)将子表达式括起来,“?”相当于“*”,而不是“.”    “?”问号的主要作用是对(...){.,.}操作xx = "at act,ant amount".match(/a?t/gi);      //t前面有0个或1个a。xx=at,t,t,txx = "at act,ant amount".match(/?t/gi);       //语法出错(*前面无字符)xx = "at act,ant amount".match(/a{1}?/gi);    //对“a{1}”的结果匹配。xx=a,a,a,a//子表达式的1次以上匹配【+】等价于{1,}    “+”加号前面至少必须有一个字符,也可以用“.”代替字符    “+”加号前面没有用(...)将子表达式括起来,“+”相当于“?”或“*”,而不是“.”xx = "at act,ant amount".match(/a+t/gi);      //t前面有1个以上的a。xx=atxx = "at act,ant amount".match(/+t/gi);       //语法出错(*前面无字符)xx = "at act,ant amount".match(/a{1}+/gi);    //对“a{1}”的结果匹配。xx=a,a,a,a//通酡符小结    “.”匹配的字符是任意的,与符号前面的字符没有关系    “?”匹配的字符或字符串与其前面字符或子表达式有关    “.”匹配一个字符,而与“*”、“+”和“?”结合后,能匹配0个或多个    “?”前面没有(...)子表达式时,匹配的是前一个字符    “?”前面有(...)子表达式时,匹配的是前一个子表达式    “?”前面有{m,n}限定符时,匹配的个数就是{m,n}指定的个数xx = "at act,ant amount".match(/a.t/gi);          //xx=act,antxx = "at act,ant amount".match(/a?t/gi);          //xx=at,,a,,t,,a,,t,,a,,,,,t,xx = "at act,ant amount".match(/a*t/gi);          //xx=at,t,t,txx = "atat fatt,gatAT amount".match(/at?/gi);     //x=at,at,at,at,AT,axx = "atat fatt,gatAT amount".match(/(at)?/gi);   //xx=at,at,,,at,,,,at,AT,,,,,,,,xx = "atat fatt,gatAT amount".match(/(at){2}?/gi);//xx=atat,atAT定位符开始【^】和结束【$】位置如果有\n或\r时,要与multiLine配合使用xx = "I am a student".match(/^s/i);       //xx=nullxx = "I am a student".match(/^i/i);       //xx=Ixx = "I am a \nstudent".match(/^s/i);     //xx=nullxx = "I am a \nstudent".match(/^s/mi);    //xx=sxx = "I am a student".match(/m$/i);       //xx=nullxx = "I am a student".match(/m$/i);       //xx=mxx = "I am a\n student".match(/a$/i);     //xx=nullxx = "I am a\n student".match(/a$/mi);    //xx=axx = "I am a student".match(/^s/i);       //xx=nullxx = "I am a student".match(/^i/i);       //xx=Ixx = "I am a \nstudent".match(/^s/i);     //xx=nullxx = "I am a student".match(/^i.*t$/i);   //xx=I am a student转义字符\b 匹配一个【单词边界】(例:回车、换行、空格、逗号)。\B \b除外xx = "I am a student".match(/stu\b/i);    //xx=nullxx = "I am a student".match(/\bstu/i);    //xx=stuxx = "I am a student".match(/ent\b/i);    //xx=entxx = "I am a student".match(/ent\B/i);    //xx=nullxx = "我是学生".match(/学生\B/i);         //xx=nullxx = "我是(student)学生".match(/ent\B/i); //xx=entxx = "我是student学生".match(/ent\B/i);   //xx=ent\cA 匹配一个【Ctrl+A】字符。\d  匹配一个【数字】。等价于[0-9]。\D  \D除外\f  匹配一个【换页符】字符。等价于 \x0c 和 \cL。\n  匹配一个【换行符】。等价于 \x0a 和 \cJ。\r  匹配一个【回车符】。等价于 \x0a 和 \cJ。\s  匹配一个【空白符】。包括空格、制表符、换页符等。等价于[\f\n\r\t\v]。\S  \D除外\t  匹配一个【制表符】。等价于 \x09 和 \cI。\v  匹配一个【垂直制表符】。等价于\x0b 和 \cK。\w  匹配一个【英文数字】。等价于[A-Za-z0-9]。\W  \w除外\onnn 匹配一个【8进制数字】。\xnnn 匹配一个【16进制数字】。(略)\其它字符(正则表达式使用的符号和单双引号)  【\(】【\)】【\[】【\]】【\{】【\}】  【\"】【\'】【\^】【\$】【\\】【\/】(略)

(0)

相关推荐

  • 20个对JavaScript 开发人员的超级有用的技巧

    2021-09-07 JavaScript 是流行编程语言之一,也是许多开发人员最喜欢的语言之一.你可以用它构建 Web 或移动混合应用程序,甚至是机器人开发学习.该语言对于初学者来说,也不是那么困难 ...

  • JavaScript的内置对象

    内置对象:对象是由属性和方法组成的,使用点语法访问 一,array数组 1. 特点: 数组用于存储若干数据,自动为每位数据分配下标,从0开始 数组中的元素不限数据类型,长度可以动态调整 动态操作数组元 ...

  • 前端教程:JavascriptString.search()方法

    此方法执行搜索正则表达式,String对象之间的匹配. 语法 string.search(regexp);1复制代码类型:[java] 下面是参数的详细信息: regexp: 正则表达式对象.如果非R ...

  • Typescript

    Typescript

  • JavaScript 教程

    一.JavaScript简介 JavaScript,就是我们通常所说的JS,是一种嵌入到HTML页面中的脚本语言,由浏览器一边解释一边执行. 我们在"HTML教程"中深入浅出地讲解 ...

  • 前端进阶教程——31个JavaScript技巧总结

    过去的几年中,Python已成为机器学习和深度学习的首选编程语言.与机器学习和深度学习相关的大多数书籍和在线课程要么只用Python,要么再带上R语言.Python有着丰富的机器学习和深度学习库.专门 ...

  • 前端教程——JavaScript函数中重构If/Else语句的方法

    无论使用何种编程语言,代码都需要根据不同的情况对给定的输入做出不同的决定并执行相应的操作.举例来说,在游戏中,如果玩家的生命值是0,游戏就结束了.在气象应用程序中,如果观看早晨的日出,就会看到一张照片 ...

  • JavaScript Promise 对象 | 菜鸟教程

    ECMAscript 6 原生提供了 Promise 对象. Promise 对象代表了未来将要发生的事件,用来传递异步操作的消息. Promise 对象有以下两个特点: 1.对象的状态不受外界影响. ...

  • 小马哥-2020零基础JavaScript基础入门全套教程

    ┃  ┃  ┃  ┣━12-44 hasOwnProperty方法.mp4 ┃  ┃  ┃  ┣━9-5 作用域变量查找的机制(重要).mp4( i+ @) s# M6 w% S, w; M ┃  ┃ ...

  • 前端教程:JavaScript语法

    JavaScript由被放置在<script>...</script>的JavaScript语句,在网页中的HTML标签. 可以将<script>包含您的JavaS ...

  • 前端教程:在浏览器中启用JavaScript

    所有现代浏览器都使用了JavaScript的内置支持.很多时候,你可能需要启用或手动禁用此支持. 本教程将让您知道如何启用和禁用JavaScript支持,在您的浏览器:IE浏览器,Firefox和Op ...

  • 前端教程:在HTML文件放置JavaScript

    在HTML文档中的任何地方可包括JavaScript代码.但也有以下的最佳方法来包含JavaScript在HTML文件. 在 <head>...</head> 部分. 在 &l ...

  • 前端教程:JavaScript运算符

    简单的答案可以使用表达式4+5等于9.在这里,4和5被称为操作数:+被称为运算符.JavaScript语言支持下列类型的运算符. 算术运算符 比较运算符 逻辑(或关系)运算符 赋值运算符 有条件的(或 ...