《javascript》ppt教程-微盘下载

第一章:javascript语法结构....................................................................................... 2

1.1字符集.............................................................................................................. 2

1.2 区分大小写...................................................................................................... 2

1.3注释.................................................................................................................. 2

1.4 标识符和保留字.............................................................................................. 2

1.5 命名习惯.......................................................................................................... 3

第二章:类型、值和变量.............................................................................................. 4

2.1 数字................................................................................................................. 4

2.2文本.................................................................................................................. 4

2.3 布尔类型.......................................................................................................... 5

2.4 null和undefined........................................................................................... 5

2.5 类型转化.......................................................................................................... 6

2.6 变量作用域...................................................................................................... 7

2.7 JS堆栈和拷贝.................................................................................................. 8

第三章:表达式和运算符.............................................................................................. 8

第四章:语句................................................................................................................. 9

第五章:对象.............................................................................................................. 10

5.1 创建对象....................................................................................................... 10

第一章:javascript语法结构

【web前端全套】链接:https://pan.baidu.com/s/16K9bdHmXf4EEWBtsSH9r5A 密码:mb4q

1.ps 链接:

https://pan.baidu.com/s/1mjYbcJA

密码:pqdt

2.HTML5+CSS3从入门到精通.iso 链接:

https://pan.baidu.com/s/1cUHz3o

密码:gdyw

3.Javascript视频教程 链接: https://pan.baidu.com/s/1i6eC5YP

密码:ku5k

4.Jquery视频教程 链接:https://pan.baidu.com/s/17DbNSnR3q5OGSjdw9tvCEA

密码:twcp

5.Bootstrap视频教程 链接: https://pan.baidu.com/s/1jKb2UDS

密码:wr8c

6.Vue.js 链接:

https://pan.baidu.com/s/1slYqBa1

密码:75xd

7.Smarty模板引擎视频教程 链接: https://pan.baidu.com/s/1smewom5

密码:v8vp

8.Nodejs 链接: https://pan.baidu.com/s/1sm509GD

密码:fux1

9.Mysql视频教程 链接: https://pan.baidu.com/s/1kVTdjcr

密码:e37d

10.PHP视频教程 链接: https://pan.baidu.com/s/1kWE0qZP

密码:xc4q

11.oracle视频教程 链接: https://pan.baidu.com/s/1i6jwpal

密码:hk6p

12.nginx视频教程 链接: https://pan.baidu.com/s/1nxccLg1

密码:x2q8

13.ajax 链接:

https://pan.baidu.com/s/1dHctdXv

密码:jfwf

14.mongodb视频教程 链接: https://pan.baidu.com/s/1c3EE7U4

密码:7v8b

15.Angular.js链接: https://pan.baidu.com/s/1jJhYrEu

密码:ddci

16.React链接:

https://pan.baidu.com/s/1nwnrQxb

密码:942g

17.dedeCMS织梦视频 链接: https://pan.baidu.com/s/1bpQBCbP

密码:ikns

18.ThinkPHP视频教程 链接: https://pan.baidu.com/s/1ggiKvYV

密码:7p5h

19.案例和总结 链接: https://pan.baidu.com/s/1eTSNB5C

密码:5rx7

20.天猫商城购物车实战 链接: https://pan.baidu.com/s/1smVjb7v

密码:cu4c

21.Java学科链接:https://pan.baidu.com/s/1DtnDNv1p9ENZETLqIuKytw

密码:82lk

22.Python链接:https://pan.baidu.com/s/1scBXSLdiTs9SBixdkykflw

密码:ck51

23.nodejs微信开发链接:https://pan.baidu.com/s/15tYBZ2yVz9aPO57LKqt7Mg

密码:jrwb


java300集链接:https://pan.baidu.com/s/1nh-hcdQfdWlEjmSAYO4uWQ 密码:2iza


Python链接:https://pan.baidu.com/s/1m4cMqkOYRUFv-2T5Rm6Qmg 密码:2kpz


Web前端:链接:https://pan.baidu.com/s/1-2tZKmjSRIbBaxwuZjnsnA 密码:i5f1


大数据链接:https://pan.baidu.com/s/1eUz4AB0InYRoJddAG-6j6Q 密码:quo9

1.1字符集

Javascript是用unicode字符集编写的,unicode是ascii和latin-1的超集,并支持地球上几乎所有在用的语言。

1.2 区分大小写

Js是区分大小写的。

1.3注释

// 单行注释

/*

 *多行注释

*/

1.4 标识符和保留字

标识符用来对变量和函数进行命名,js标识符必须是字母、下划线或美元符开头,后续的字符可以是字母、数字、下划线和美元符。保留字不能当做标识符或函数名

JavaScript 保留关键字

javascript教程

JavaScript 对象、属性和方法

您也应该避免使用 JavaScript 内置的对象、属性和方法的名称作为 Javascript 的变量或函数名:

javascript教程

HTML 事件句柄

除此之外,您还应该避免使用 HTML 事件句柄的名称作为 Javascript 的变量及函数名。

实例:

javascript教程g

1.5 命名习惯

类型

前缀

例子

数组

a

aArray

布尔值

b

bMale

浮点

f

fTax

函数

fn

fnSwap

整型

i

iAge

对象

o

oCar

正则

re

rePattern

字符串

s

sUniversity

 

第二章:类型、值和变量

2.1 数字

2.1.1 整型
2.1.2 浮点类型

3.14

.3333

6.02e23  //6.02*1023

1.4732e-32  //1.4732*10-32

2.2文本

2.2.1 单引号,双引号

在js程序中的字符串是由单引号或者双引号括起来的字符序列,由单引号定界的字符串中可以包含双引号,由双引号定界的字符串中也可以包含单引号。

        var s='tesing';

        var s='name="myfrom"';

        var s="you’re right,it cant’t be quote ";//如果想要里面的'作为普通字符串输出则需要进行转义处理,转义方式 \’

 

2.2.2 字符串的使用

        var s="hello world";

        console.log(s.length);//获取长度

        console.log(s.charAt(0));// "h" 第一个字符

        console.log(s.substring(1));

        console.log(s.substring(1,4));//"ell" 第2~4个字符

        console.log(s.slice(1,4));//同上

        console.log(s.slice(-3));//"rld" 最后三个字符

        console.log(s.indexOf("l"));//第一次出现的索引

        console.log(s.lastIndexOf("l"));//最后一次出现的索引

        console.log(s.indexOf("l",3));//在位置3及之后首次出现字符l的位置

        console.log(s.split(","));//变数组

        console.log(s.toUpperCase());//变大写

        console.log(s.toLowerCase());//变小写

        console.log(s.replace("h","H"));//替换

        console.log(s[0]);//es5中,字符串可以当做只读数组

        console.log(s[s.length-1]);

 

2.3 布尔类型

2.4 null和undefined

Undefined类型只有一个值,即undefined。当声明的变量还未被初始化时,变量的默认值为undefined。
Null类型也只有一个值,即null。null用来表示尚未存在的对象,常用来表示函数企图返回一个不存在的对象。

var oValue;

alert(oValue == undefined); //output "true"

这段代码显示为true,代表oVlaue的值即为undefined,因为我们没有初始化它。

alert(null == document.getElementById('notExistElement'));

当页面上不存在id为"notExistElement"的DOM节点时,这段代码显示为"true",因为我们尝试获取一个不存在的对象。

 

        alert(typeof undefined); //output "undefined" 

        alert(typeof null); //output "object"

第一行代码很容易理解,undefined的类型为Undefined;第二行代码却让人疑惑,为什么null的类型又是Object了呢?其实这是JavaScript最初实现的一个错误,后来被ECMAScript沿用下来。在今天我们可以解释为,null即是一个不存在的对象的占位符,但是在实际编码时还是要注意这一特性。

alert(null == undefined); //output "true"

ECMAScript认为undefined是从null派生出来的,所以把它们定义为相等的。但是,如果在一些情况下,我们一定要区分这两个值,那应该怎么办呢?可以使用下面的两种方法。

alert(null === undefined); //output "false" 

alert(typeof null == typeof undefined); //output "false"

使用typeof方法在前面已经讲过,null与undefined的类型是不一样的,所以输出"false"。而===代表绝对等于,在这里null === undefined输出false。

2.5 类型转化

转化为字符串

数字

布尔值

undefined


NaN

false

null

null

0

false

true

“true”

1


false

“false”

0


“”


0

false

“1.2”(非空,数字)


1.2

true

“one”(非空,非数字)


NaN

true

0

“0”

0

false

-0

“0”


false

NaN

“NaN”


false

Infinity(存放无穷大的数值)

Eg

var t1=1.7976931348623157E+10308

document.write(t1)   //结果Infinity

“infinity”


true

-   Infinity

“-Infinity”


true

1

“1”


true

{} (任意对象)



true

[](任意数组)

“”

0

true

function(){}


NaN

true

2.6 变量作用域

当代码进入到了<script>或者一个function里面就是进入到了一个作用域,进入到作用域后,浏览器里面的js解析器,就会执行两个步骤:

1) 去找var 、function、方法参数,进行js预解析。

a=undefined;//所有的变量,在正式运行代码之前,都会提前赋一个值:未定义

所有的函数,在正式运行代码之前,都是整个函数块。

2) 逐行解读代码。

当看到 表达式:+  - * / % = ++ -- ! 参数……  就会去修改步骤1里面的内容。

javascript教程

javascript教程

javascript教程

javascript教程

第三章:表达式和运算符

名称

含义

例子

= ==   ===



<   > <= >=



in

左边为字符串或可转成字符串,右边为一个对象,左边的属性存在于右边对象,则返还ok

function Test(   ) {

    var o={x:1,y:2};

    if("x" in o){}//true

    if("z" in o){}//false

    if("toString" in o){}//true,对象继承了toString方法

 }

instanceof

左侧对象为右侧类的实例,则返回true

 

var d=new Data();

if(d instanceof Date){}//true   if(z instanceof Date){}//false

 

&&、 || 、 !



+=、-=、*=、/=、%=、^=



?:



typeof



delete


function Test(   ) {

    var o={x:1,y:2};

    delete o.x;

    if("x" in o){}//false

 }

 

第四章:语句

名称

含义

例子

if/else   if/else



switch   case



break/continue/return



for



while



do while



for in


function Test(   ) {

    var o={x:1,y:2};

    for(i in o){

        console.log(o[i]);

    }

 }

try..catch..finally


function Test(   ) {

    try{

        var n=Number(prompt("请输入一个正整数"));

        var f=factorial(n);

        alert(n+"!="+f);

    }

    catch(ex){

        alert(ex);

    }

    finally{

        aler("不管是否有异常,都显示");

    }

}

function factorial(x)   {

    if(x<0){

        throw new Error("x不能为负数");

    }

    if(isNaN(x)){

        throw new Error("你输入的不是一个数字");

    }

    for(var f=1;x>1;x--){

        f*=x;

    }

    return f;

 }

 

with


function Test()   {

    //   document.forms[0].username.value = "aa";

    //   document.forms[0].pwd.value = "aa";

    //   document.forms[0].qq.value = "aa";

    //   document.forms[0].realname.value = "aa";

    //   document.forms[0].tel.value = "aa";

 

    //简写方式

    with(document.forms[0]){

        username.value="aa";

        pwd.value="aa";

        qq.value="aa";

        tel.value="aa";

        realname.value="aa";

    }

}

第五章:面向对象

5.1 创建对象

5.1.1 对象直接量

      var empty={};//没有任何属性的对象

      var point={x:0,y:0};//两个属性

      var point2={x:point.x,y:point.y};//更复杂的值

      var book={

          "main title":"javascript",//属性妹子里有空格,必须用字符串表示

          "sub-title":"xxxxxx",//属性名字里有连接符的,必须用字符串表示

          "for":"alllx",//属性名如果是保留字,必须用引号

          author:{

              firstname:"ddd",

              surnmae:"fff"

          }

      }

5.1.2 new一个对象/原型

        function createPerson(name, sex) {//构造方法

            var obj = new Object();

            obj.name = name;

            obj.sex = sex;

            obj.showName = function () {

                alert("我的名字叫" + this.name);

            }

            obj.showSex = function () {

                alert("我的性别是" + this.sex);

            }

            return obj;

        }

        var p1=createPerson("blue","男");

        var p2=createPerson("leo","女");

        p1.showName();

        p1.showSex();

        p2.showName();

        p2.showSex();

以上代码的问题:每创建一个对象的时候,就会创建一次自己的showName和showSex方法,很浪费资源。类似下面:

var arr1 = new Array(12, 5, 7, 2);

        var arr2 = new Array(22, 3, 4, 2);

        // arr1.sum=function(){

        //     var result=0;

        //     var i=0;

        //     for(i=0;i<this.length;i++){

        //         result+=this[i];

        //     }

        //     return result;

        // }

        // alert(arr1.sum());

        // alert(arr2.sum());//此时就会报错

 

        Array.prototype.sum = function () {//原型方法

            var result = 0;

            var i = 0;

            for (i = 0; i < this.length; i++) {

                result += this[i];

            }

            return result;

        }

        alert(arr1.sum());

        alert(arr2.sum());//此时都会有

所以创建对象通常的写法是:

        function Person(name, sex) {

            //调用构造方法new了之后,系统内部 var this=new Object();

            this.name = name;

            this.sex = sex;

            //调用构造方法new了之后,系统内部  return this;

        }

        Person.prototype.showName = function () {

            alert("我的名字叫:" + this.name);

        }

        Person.prototype.showSex = function () {

            alert("我的性别是:" + this.sex);

        }

        var p1 = new Person("blue", "男");

        var p2 = new Person("leo", "女");

        p1.showName();

        p1.showSex();

        p2.showName();

        p2.showSex();

优先级:

        Array.prototype.a=12;//相当于给div加class

        var arr=[1,2,3];

        alert(arr.a);//12

        arr.a=5;//相当于给div内部加 style=""

        alert(arr.a);//5

        delete arr.a;

        alert(arr.a);//12

5.2 删除属性

           var o={x:1};

           delete o.x;//刪除x,返回true

           delete o.toString();//什麼也沒做(繼承來的不能刪除,要刪除繼承來的方法或者屬性,

           //必須從定義這個屬性的原型對象上刪除它,而且會影響到所有繼承這個原型的對象)

5.3 检测属性

        var o={x:1};

        //方式一:

        "x" in o;//true

        "y" in o;//false

        "toString" in o;//true , o继承toString属性

        //方式二:

        o.hasOwnProperty("x");//true

        o.hasOwnProperty("y");//false

        o.hasOwnProperty("toString");//false

        //方式三:

        o.x!==undefined;//true

        o.y!==undefined;//false

        o.toString!==undefined;//true

        

5.4 关于this的问题

function Aaa(){

          this.a=12;

          //setInterval(this.show,1000);//setInterval和setTimeout的回调函数中this的指向都是window。

                                        //这是因为JS的定时器方法是定义在window下的,即window.setInterval,所以此时的this.show调用的不是Aaa里面的show

          var _this=this;

          setInterval(function(){//这样写才是调用的是Aaa里面的show

              _this.show();

          },1000);                             

         

      }

      Aaa.prototype.show=function(){

          alert(this.a);

      }

      var obj=new Aaa();

      obj.show();

 

function Bbb() {

            this.b = 5;

            //document.getElementById("btn1").onclick=this.show;//此处的this表示的是按钮,不是Bbb对象

            var _this = this;

            document.getElementById("btn1").onclick = function () {

                _this.show();//这时调用的才是Bbb的对象

            }

        }

        Bbb.prototype.show = function () {

            alert(this.b);

        }

        window.onload = function () {

            new Bbb();

        }

5.5  call方法使用

调用一个对象的一个方法,以另一个对象替换当前对象。

      function Cat(){

      }

      Cat.prototype={

          food:"fish",

          say:function(){

              alert("i love "+this.food);

          }

      }

      var blackCat=new Cat();

      blackCat.say();

      //当需要一条黑狗也说他喜欢什么的时候,

      blackDog={food:"bone"};

      //我们不想对他重新定义say方法,那么我们可以通过call用blackCat的say方法

      blackCat.say.call(blackDog);

 

        function A(name) {//A

            this.name = name;

            this.showName = function () {

                alert(this.name);

            }

        }

 

        function B(name, age) { //B

            this.name = name;

            this.age = age;

        }

        var a = new A("aaa"); //a对象是有showName方法的

        var b = new B('bbb', 10);//b对象没有showName方法

        a.showName.call(b);//但是这里showName,显示的是b的名字,也就是b调用了a的showName方法

call实现继承:

        function A(name) {//A 类 还是这个例子,A有showName

            this.name = name;

            this.showName = function () {

                alert(this.name);

            }

        }

        function B(name, age) { //B 类,

            //B类中通过A.call,相当于执行了A(name),但在A中所有this其实都是B。那么B就有name这个属性,同时也拥有showName方法了。

            A.call(this, name);

   //A.apply(this,[name]);//和上面的效果是一样的,区别是只是传入的参数列表形式不同:如 func.call(func1,var1,var2,var3)   对应的apply写法为:func.apply(func1,[var1,var2,var3]),也就是说:call调用的为单个,apply调用的参数为数组

            this.age = age;

        }

        var b = new B('bbb', 10);

        b.showName();//B继承了A,所以b也有showName方法。

5.6 typeof 和instanceof区别

        //typeof会返回一个变量的基本类型,只有以下几种:number,boolean,string,object,undefined,function;例:

        alert(typeof (1));//number

        alert(typeof ("abc"));//string

        alert(typeof (true));//boolean

        alert(typeof (m));//undefined

 

        //instanceof返回的是一个布尔值,如:

        var a = {};

        alert(a instanceof Object);  //true

        var b = [];

        alert(b instanceof Array);  //true

        function Person(){}

        var p=new Person();

        alert(p instanceof Person);

//需要注意的是,instanceof只能用来判断对象和函数,不能用来判断字符串和数字等

 

5.7 系统对象

本地对象(常用对象):Object、Function、Array、String、Boolean、Number、Date、RegExp、Error

内置对象(静态对象):Golobal、Math

宿主对象(由浏览器提供的对象)

DOM -----document

BOM-----window

5.8 json

    JSON字符串:

    var str1 = '{ "name": "cxh", "sex": "man" }';

    JSON对象:

var str2 = { "name": "cxh", "sex": "man" };

1)jQuery插件支持的转换方式

$.parseJSON( jsonstr ); //jQuery.parseJSON(jsonstr),可以将json字符串转换成json对象 
2)浏览器支持的转换方式(Firefox,chrome,opera,safari,ie9,ie8)等浏览器:

JSON.parse(jsonstr); //可以将json字符串转换成json对象 
JSON.stringify(jsonobj); //可以将json对象转换成json对符串 

注:ie8(兼容模式),ie7和ie6没有JSON对象,推荐采用JSON官方的方式,引入json.js。

3) Javascript支持的转换方式

eval('(' + jsonstr + ')'); //可以将json字符串转换成json对象,注意需要在json字符外包裹一对小括号 
注:ie8(兼容模式),ie7和ie6也可以使用eval()将字符串转为JSON对象,但不推荐这些方式,这种方式不安全eval会执行json串中的表达式。 

JSON官方的转换方式: 
http://www.json.org/提供了一个json.js,这样ie8(兼容模式),ie7和ie6就可以支持JSON对象以及其stringify()和parse()方法; 
可以在https://github.com/douglascrockford/JSON-js上获取到这个js,一般现在用json2.js。

第六章:数组

6.1 创建数组

       var empty=[];

       var primes=[2,3,4,5,6];

       var a=new Array();//等同[]

       var a=new Array(10);//规定了长度

       var a=new Array(2,3,4,5,6);//等同[2,3,4,5,6]

       var a=[[1,2],[3,4,6,7,8],[34,3,2]];//多维数组

 

6.2 数组长度

length属性

6.3 数组元素删除和添加

        var a=[];

        a.push("zero");//添加一个,push() 方法可向数组的末尾添加一个或多个元素,并返回新的长度。

        a.push("one","two");//添加两个

        delete a[1];

        "one" in a;//false

        alert(a.pop());//pop() 方法用于删除并返回数组的最后一个元素。

6.4 遍历数组

       var a=[2,3,4,5,6,7,8,2];

       var iSum=0;

       //方式一

       for(var i=0;i<a.length;i++){

          iSum+=a[i];

       }

       //方式二

       a.forEach(function(i){

           iSum+=i;

       });

6.5 数组方法

6.6 数组类型

Array.isArray([]);//true

6.7 作为数组的字符串

var s=”test”;

s.charAt(0);//“t”

s[1];//”e”

第七章:正则表达式

7.1 正则表达式定义

js 正则表达式用RegExp对象表示,可以使用RegExp()构造函数创建RegExp对象,不过RegExp对象更多是通过一种特殊的直接量语法来创建,正则表达式直接量定义为包含在一对斜杠/之间的字符,如:

var pattern=/s$/

等价于:

var pattern=new RegExp(“s$”);

7.2 字符类

正则

含义

说明

[…]

方括号里的任意字符


[^…]

不在方括号内的任意字符


.

换行符以外的任意字符


\w

匹配所有的字母和数字

等价于[a-zA-Z0-9   ]

\W

匹配所有除字母和数字以外的字符

等价于[^a-zA-Z0-9   ]

\s

空白符


\S

空白符以外的


\d

数字

等价于[0-9]

\D

数字以外的


7.3 重复

正则

含义

说明

{n,m}

匹配至少出现n次,不超过m次


{n,}

至少出现n次


{n}

出现n次


?

出现0次或者1次


+

出现1次或多次


*

0次或多次


 

如:

/\d{2,4}/  匹配2~4个数字     

/\w{3}\d?/  匹配三个单词和一个可选的数字      

/\s+java\s+/   匹配前后哦带有一个或多个空格的字符串java

/[^(]*/  匹配一个或多个非左括号的字符

非贪婪重复

“{m,n}?”、“{m,}?”、“??”、“*?”和“+?”。 

源字符串:aa<div>test1</div>bb<div>test2</div>cc 
正则表达式一:<div>.*</div> 
匹配结果一:<div>test1</div>bb<div>test2</div> 
正则表达式二:<div>.*?</div> 
匹配结果二:<div>test1</div>(这里指的是一次匹配结果,所以没包括<div>test2</div>) 

根据上面的例子,从匹配行为上分析一下,什是贪婪与非贪婪模式。 
正则表达式一采用的是贪婪模式,在匹配到第一个“</div>”时已经可以使整个表达式匹配成功,但是由于采用的是贪婪模式,所以仍然要向右尝试匹配,查看是否还有更长的可以成功匹配的子串,匹配到第二个“</div>”后,向右再没有可以成功匹配的子串,匹配结束,匹配结果为“<div>test1</div>bb<div>test2</div>”。当然,实际的匹配过程并不是这样的,后面的匹配原理会详细介绍。 
仅从应用角度分析,可以这样认为,贪婪模式,就是在整个表达式匹配成功的前提下,尽可能多的匹配,也就是所谓的“贪婪”,通俗点讲,就是看到想要的,有多少就捡多少,除非再也没有想要的了。 
正则表达式二采用的是非贪婪模式,在匹配到第一个“</div>”时使整个表达式匹配成功,由于采用的是非贪婪模式,所以结束匹配,不再向右尝试,匹配结果为“<div>test1</div>”。 
仅从应用角度分析,可以这样认为,非贪婪模式,就是在整个表达式匹配成功的前提下,尽可能少的匹配,也就是所谓的“非贪婪”,通俗点讲,就是找到一个想要的捡起来就行了,至于还有没有没捡的就不管了。

        var pattern = /8(.*)8/;// 使用了贪婪,匹配到了google8 8google8 8google

        var str = '8google8 8google8 8google8';

        document.write(str.replace(pattern, '<strong>$1</strong>')) //$1 google8 8google8 8google

 

 

var pattern = /8(.*?)8/;// 使用了贪婪,匹配到了google8 8google8 8google

        var str = '8google8 8google8 8google8';

        document.write(str.replace(pattern, '<strong>$1</strong>')) //$1只匹配到了第一个google

 

var pattern = /8(.*?)8/g;// 使用了贪婪,匹配到了google8 8google8 8google

        var str = '8google8 8google8 8google8';

        document.write(str.replace(pattern, '<strong>$1</strong>'))//匹配到了所有的google

 

7.4 js正则标志/g /i /m的用法

js正则标志/g,/i,/m说明

/g 表示该表达式将用来在输入字符串中查找所有可能的匹配,返回的结果可以是多个。如果不加/g最多只会匹配一个

/i  表示匹配的时候不区分大小写

/m 表示多行匹配,什么是多行匹配呢?就是匹配换行符两端的潜在匹配。影响正则中的^$符号

1.     <script type="text/javascript">  

2.     str = "tankZHang (231144)"+  

3.      "tank ying (155445)";  

4.     res = str.match(/tank/);    //没有加/g  

5.     alert(res);                 //显示一个tank  

6.       

7.     res = str.match(/tank/g);   //加了/g  

8.     alert(res);                 //显示为tank,tank  

9.     <strong></script></strong>  

 

1.     <script type="text/javascript">  

2.     str = "tankZHang (231144)"+  

3.      "tank ying (155445)";  

4.     res = str.match(/tank/);    //没有加/g  

5.     alert(res);                 //显示一个tank  

6.       

7.     res = str.match(/tank/g);   //加了/g  

8.     alert(res);                 //显示为tank,tank  

9.     <strong></script></strong>  

10.   <script type="text/javascript">  

11.   str = "tankZHang (231144)"+  

12.    "tank ying (155445)";  

13.   res = str.match(/tank/);    //没有加/g  

14.   alert(res);                 //显示一个tank  

15.     

16.   res = str.match(/tank/g);   //加了/g  

17.   alert(res);                 //显示为tank,tank  

18.   <strong></script></strong>  

7.5 其他匹配

?=n    ?=n 量词匹配任何其后紧接指定字符串 n 的字符串。

        //对其后紧跟 "all" 的 "is" 进行全局搜索:

var str="Is this all there is";

var patt1=/is(?= all)/g;//下面被标记的文本显示了表达式获得匹配的位置:Is this all there is

?!n 量词匹配其后没有紧接指定字符串 n 的任何字符串。

        //对其后没有紧跟 "all" 的 "is" 进行全局搜索:

var str="Is this all there is";

var patt1=/is(?! all)/g;//下面被标记的文本显示了表达式获得匹配的位置: Is this all there is

行首行尾

^..$ 

汉字,UTF-8编码

[\u4e00-\u9fa5]

或字符:

        var pattern1 = /google|baidu|bing/;//或模式匹配

        alert(pattern1.test('this is baidu'))//true

        alert(pattern1.test('soso'))//false

代替字符:

        var pattern1 = /(.*)\s(.*)/;//替换

        var str = 'google baidu';

        alert(str.replace(pattern1, '$2 $1'));//baidu google

        var pattern1 = /8(.*)8/;//获取88之间的任意字符

        var str = 'this is 8google8';

        document.write(str.replace(pattern1, '<strong>$1</strong>'))

7.6 方法

search

stringObject.search(regexp) 方法用于检索字符串中指定的子字符串,或检索与正则表达式相匹配的子字符串。

返回值

stringObject 中第一个与 regexp 相匹配的子串的起始位置。

注释:如果没有找到任何匹配的子串,则返回 -1。

        var str = "Visit W3School!"

        document.write(str.search(/w3school/i))//结果6

replace

replace() 方法用于在字符串中用一些字符替换另一些字符,或替换一个与正则表达式匹配的子串。

var str="Visit Microsoft!"

document.write(str.replace(/Microsoft/, "W3School")) //结果Visit W3School!

 

name = "Doe, John";

name.replace(/(\w+)\s*, \s*(\w+)/, "$2 $1");//我们将把 "Doe, John" 转换为 "John Doe" 的形式:

 

match()

var str="1 plus 2 equal 3"

document.write(str.match(/\d+/g)) //1,2,3

QQ截图20180109221353.png

 

exec方法

方法用于检索字符串中的正则表达式的匹配。

QQ截图20180109221402.png

和match方法不同,不管正则表达式是否具有全局修饰符g,exec()都会返回一样的数组,

第八章:window对象

8.1 计时器

setInterval

setTimeout

8.2 浏览器的定位和导航

window.location

显示当前页面的url

8.3 载入新的文档

QQ截图20180109221501.png

8.4 浏览历史

  history.forward();//前进

          history.back();//后退

          history.go(-2);//相当于单击"后退"按钮两次

          history.go(2);//相当于单击"前进"按钮1次

8.5 对话框

confirm alert prompt 

8.6 打开和关闭窗口

QQ截图20180109221553.png

第九章:脚本化文档

9.1 dom概述

文档对象模型(Document Object Model,简称DOM),是W3C组织推荐的处理可扩展标志语言的标准编程接口。在网页上,组织页面(或文档)的对象被组织在一个树形结构中,用来表示文档中对象的标准模型就称为DOM

QQ截图20180109221641.png

9.2 选取文档元素

        document.getElementById("d1");//通过id找

        document.getElementsByName("a1");//通过name属性找

        document.getElementsByTagName("p")[0];//通过标签来找

        document.getElementsByClassName("c1");//通过class名称来找

9.3 文档结构和遍历

        document.getElementById("item1").parentNode; //返回父节点

        document.body.childNodes;//子节点集合

        document.body.firstChild;//第一个子节点

        document.body.lastChild;//最后一个子节点,如果没有子节点返回null

        document.getElementById("item1").nextSibling();//后面的那个兄弟节点

        document.getElementById("item1").previousSibling();//前面的那个兄弟节点

        document.getElementsByTagName("BUTTON")[0].childNodes[0].nodeValue;//nodeValue节点值

        document.body.nodeName;//获得 body 元素的节点名称

 

9.4 属性

QQ截图20180109222126.png

9.5 元素的内容

innerHTML 设置或获取位于对象起始和结束标签内的 HTML 

innerText 设置或获取位于对象起始和结束标签内的文本 

outerHTML 设置或获取对象及其内容的HTML形式 

outerText 设置(包括标签)或获取(不包括标签)对象的文本

    var innerHTML = document.getElementById("mydiv").innerHTML;

    var innerText = document.getElementById("mydiv").innerText; //Firefox不支持  

    var outerHTML = document.getElementById("mydiv").outerHTML;

    var outerText = document.getElementById("mydiv").outerText; //Firefox不支持  

    console.info(innerHTML);  //输出<span style="color:red">span1</span> span2 

    console.info(innerText);  //输出span1 span2 

    console.info(outerHTML);  //输出<div id="mydiv"><span style="color:red">span1</span>span2</div> 

    console.info(outerText);  //输出span1 span2

PS: innerHTML是符合W3C标准的属性,而innerText对Firefox是不支持的,因此,尽可能地去使用innerHTML,

而少用innerText,如果要输出不含HTML标签的内容,可以使用innerHTML取得包含HTML标签的内容后,

再用正则表达式去除HTML标签,下面是一个简单的符合W3C标准的示例: 

console.info(document.getElementById('mydiv').innerHTML.replace(/<.+?>/gim,'')); 

9.6 创建、插入和删除节点

9.6.1 创建节点

var newnode=document.createTextNode("hello world");

9.6.2 插入节点

QQ截图20180109222256.png

9.6.3 删除和替换节点

window.onload = function () {

      var oInp = document.getElementById('inp');

      var oBtn = document.getElementById('btn');

      var oUl1 = document.getElementById('ul1');

      var oP = document.getElementById('p1');

      var oBtn1 = document.getElementById('btn1');

      var oDiv = document.getElementById('div1');

      oBtn.onclick = function () {

        var oLi = document.createElement('li'); //动态创建li元素

        oLi.innerHTML = oInp.value;

        //oUl1.appendChild(oLi);  // 追加子元素

        //在指定的元素之前插入新元素

        if (oUl1.children[0]) {      //兼容IE

          oUl1.insertBefore(oLi, oUl1.children[0]);

        } else {

          oUl1.appendChild(oLi)

        }

        var oA = document.createElement('a');

        oA.innerHTML = '删除';

        oA.href = 'javascript:;';

        oA.onclick = function () {

          oUl1.removeChild(this.parentNode);  //删除节点 只能在父级下进行操作

        }

        oLi.appendChild(oA);

      }

      oBtn1.onclick = function () {

        //                document.body.replaceChild(oP,oDiv);  //p标签替换div

        oDiv.appendChild(oP);  // 也可以操作已有的节点 把p标签添加到div里面

      }

    }

<input type="text" id="inp" />

  <input type="button" value="添加" id="btn" />

  <ul id="ul1"></ul>

  <hr/>

  <p id="p1">我是P标签</p>

  <button id="btn1">替换</button>

  <div id="div1">我是div</div>

 

 


 

第十章:Canvas

10.1 创建画图环境、画矩形、划线

        window.onload = function () {

            var oC = document.getElementById("c1");

            var oGC = oC.getContext("2d");//绘图环境

 

            //demo1:绘制实心方块,left/top/width/height 默认是黑色

            //oGC.fillRect(100,50,200,100);

 

            //demo2:带边框的空心方块,边框默认为2px,要让它默认为1px,left,top多加0.5

            //oGC.strokeRect(100,50,200,100);

 

            //demo3:oGC.fillStyle="#f00";//填充颜色   

            //oGC.fillRect(100,50,200,100);

            //   oGC.strokeStyle="#00f";

            //   oGC.lineWidth=10;

            //   oGC.strokeRect(100,50,200,100);

 

            //demo4:边界绘制

            //oGC.lineJoin = "round";//圆角

            // oGC.lineJoin = "bevel";//斜角

            // oGC.lineWidth=10;

            // oGC.strokeRect(100,50,200,100);

 

            //demo5:绘制路径

            // oGC.beginPath();

            // oGC.moveTo(100,100);

            // oGC.lineTo(200,200);

            // oGC.lineTo(300,200);

            // oGC.closePath();//闭合

            // oGC.stroke();//默认是黑色的

            // oGC.beginPath();

            // oGC.moveTo(300, 300);

            // oGC.lineTo(200, 200);

            // oGC.lineTo(300, 200);

            // oGC.closePath();//闭合

            // oGC.fill();//填充

 

            //demo6:绘制矩形

            // oGC.rect(20, 20, 150, 100);

            //oGC.fill();//填充

            // oGC.stroke();//画边框

            // oGC.clearRect(0,0,oC.width,oC.height);//清除

 

            //demo7:保存状态

            //没有save和restore那么oGC.fillStyle = "red";对两个都有作用,有了后,只对第一个有作用,第二个没有作用

            // oGC.save();//保存路径

            // oGC.fillStyle = "red";

            // oGC.beginPath();

            // oGC.moveTo(100, 100);

            // oGC.lineTo(200, 200);

            // oGC.lineTo(300, 200);

            // oGC.closePath();

            // oGC.fill();

            // oGC.restore();//恢复路径

            // oGC.beginPath();

            // oGC.moveTo(300, 300);

            // oGC.lineTo(400, 400);

            // oGC.lineTo(500, 600);

            // oGC.closePath();

            // oGC.fill();

 

            //demo8:端点样式

            // oGC.lineWidth=20;

            // oGC.lineCap="round";//圆角,如果设置为square则高度多出为宽一半的值

            // oGC.moveTo(100,100);

            // oGC.lineTo(200,200);

            // oGC.stroke();

        }

 

10.2 画圆

    var oC = document.getElementById("c1");

    var oGC = oC.getContext("2d");//绘图环境

 

    //demo1:绘制圆形

    //oGC.moveTo(200,200);

    //参数:x,y起始位置,半径,起始弧度(角度*Math.PI/180), 旋转方向

    // oGC.arc(200,200,150,0,90*Math.PI/180,false);//0度在圆的最右边,最上面为-90度,最下面为正90度

    // oGC.stroke();

 

    //demo2:画钟表

    function toDraw() {

        var oDate = new Date();

        var oHours = oDate.getHours();

        var oMin = oDate.getMinutes();

        var oSen = oDate.getSeconds();

        var oHoursValue = (-90 + oHours * 30 + oMin / 2) * Math.PI / 180;

        var oMinValue = (-90 + oMin * 6) * Math.PI / 180;

        var oSenValue = (-90 + oSen * 6) * Math.PI / 180;

        var x = 200;

        var y = 200;

        var r = 150;

        oGC.clearRect(0, 0, oC.width, oC.height);

        oGC.moveTo(x, y);

        oGC.arc(x, y, r, 0, 6 * Math.PI / 180, false);

 

        oGC.beginPath();

        for (var i = 0; i < 60; i++) {

            oGC.moveTo(x, y);

            oGC.arc(x, y, r, 6 * i * Math.PI / 180, 6 * (i + 1) * Math.PI / 180, false);

        }

        oGC.closePath();

        oGC.stroke();

 

        oGC.fillStyle = "#fff";

        oGC.beginPath();

        oGC.moveTo(x, y);

        oGC.arc(x, y, r * 19 / 20, 0, 360 * Math.PI / 180, false);

        oGC.closePath();

        oGC.fill();

 

        oGC.lineWidth = 3;

        oGC.beginPath();

        for (var i = 0; i < 12; i++) {

            oGC.moveTo(x, y);

            oGC.arc(x, y, r, 30 * i * Math.PI / 180, 30 * (i + 1) * Math.PI / 180, false);

        }

        oGC.closePath();

        oGC.stroke();

 

        oGC.fillStyle = "#fff";

        oGC.beginPath();

        oGC.moveTo(x, y);

        oGC.arc(x, y, r * 18 / 20, 0, 360 * Math.PI / 180, false);

        oGC.closePath();

        oGC.fill();

 

        oGC.lineWidth = 5;

        oGC.beginPath();

        oGC.moveTo(x, y);

        oGC.arc(x, y, r * 8 / 20, oHoursValue, oHoursValue, false);

        oGC.closePath();

        oGC.stroke();

 

        oGC.lineWidth = 3;

        oGC.beginPath();

        oGC.moveTo(x, y);

        oGC.arc(x, y, r * 13 / 20, oMinValue, oMinValue, false);

        oGC.closePath();

        oGC.stroke();

 

        oGC.lineWidth = 1;

        oGC.beginPath();

        oGC.moveTo(x, y);

        oGC.arc(x, y, r * 17 / 20, oSenValue, oSenValue, false);

        oGC.closePath();

        oGC.stroke();

    }

    setInterval(toDraw, 1000);

    toDraw();

 

10.3 颜色、样式、阴影、渐变

window.onload = function () {

var c = document.getElementById("myCanvas");

var ctx = c.getContext("2d");

//demo1:填充矩形

//ctx.fillStyle = "#0f0";//

//ctx.fillRect(20, 20, 100, 100);

 

//demo2:矩形框

//ctx.strokeStyle = "#0000ff";

//ctx.strokeRect(20, 20, 150, 100);

 

//demo3 阴影

//ctx.shadowBlur = 20;//模糊级数是 20

//ctx.shadowOffsetX = 20;//带有向右偏移 20 像素的阴影

//ctx.shadowOffsetY = 20;//带有向下偏移 20 像素的阴影

//ctx.shadowColor = "black";

//ctx.fillStyle = "blue";

//ctx.fillRect(20, 20, 100, 80);

 

//demo4:线性渐变

//var grd = ctx.createLinearGradient(0, 0, 170, 0);//渐变开始点的 x 坐标,渐变开始点的 y 坐标,渐变结束点的 x 坐标,渐变结束点的 y 坐标

//grd.addColorStop(0, "black");

//grd.addColorStop(0.5, "red");

//grd.addColorStop(1, "white");

//ctx.fillStyle = grd;

//ctx.fillRect(20, 20, 150, 100);

 

//demo5:图片重复

//var img = document.getElementById("lamp");

//var pat = ctx.createPattern(img, "repeat");//repeat默认,repeat-x,repeat-y,no-repeat

//ctx.rect(0, 0, 150, 100);

//ctx.fillStyle = pat;

//ctx.fill();

 

//demo6:径向渐变

//var grd = ctx.createRadialGradient(75, 50, 5, 90, 60, 100);//渐变的开始圆的 x 坐标,渐变的开始圆的 y 坐标,开始圆的半径,   渐变的结束圆的 x 坐标,渐变的结束圆的 y 坐标,结束圆的半径

//grd.addColorStop(0, "red");

//grd.addColorStop(1, "white");

//ctx.fillStyle = grd;

//ctx.fillRect(10, 10, 150, 100);

10.4 路径方法

var c = document.getElementById("myCanvas");

var ctx = c.getContext("2d");

//demo1:剪切

//ctx.rect(50, 20, 200, 120);

//ctx.stroke();

//ctx.clip();

//// 在 clip() 之后绘制绿色矩形

//ctx.fillStyle = "green";

//ctx.fillRect(0, 0, 150, 100);

//demo2:绘制一条二次贝塞尔曲线

var c = document.getElementById("myCanvas");

var ctx = c.getContext("2d");

ctx.beginPath();

ctx.moveTo(20, 20);

ctx.quadraticCurveTo(20, 100, 200, 20);//贝塞尔控制点的 x 坐标,贝塞尔控制点的 y 坐标,结束点的 x 坐标,结束点的 y 坐标

ctx.stroke();

QQ截图20180109222359.png

//demo3:绘制一条三次贝塞尔曲线

var c = document.getElementById("myCanvas");

var ctx = c.getContext("2d");

ctx.beginPath();

ctx.moveTo(20, 20);

ctx.bezierCurveTo(20, 100, 200, 100, 200, 20);//第一个贝塞尔控制点的 x 坐标,   第一个贝塞尔控制点的 y 坐标,第二个贝塞尔控制点的 x 坐标,第二个贝塞尔控制点的 y 坐标,结束点的 x 坐标,结束点的 y 坐标

ctx.stroke();

 

QQ截图20180109222427.png

//在画布上创建介于两个切线之间的弧:

var c = document.getElementById("myCanvas");

var ctx = c.getContext("2d");

ctx.beginPath();

ctx.beginPath();

ctx.moveTo(20, 20);           // 创建开始点

ctx.lineTo(100, 20);          // 创建水平线

ctx.arcTo(150, 20, 150, 70, 50); // 创建弧, 弧的起点的 x 坐标, 弧的起点的 y 坐标, 弧的终点的 x 坐标, 弧的终点的 y 坐标, 弧的半径

ctx.lineTo(150, 120);         // 创建垂直线

ctx.stroke();                // 进行绘制

 

//绘制一个矩形,如果点 20,50 位于当前路径中:

var c = document.getElementById("myCanvas");

var ctx = c.getContext("2d");

ctx.rect(20, 20, 150, 100);

if (ctx.isPointInPath(20, 50)) {

ctx.stroke();

};

10.5 转换

   var c = document.getElementById("myCanvas");

            var ctx = c.getContext("2d");

 

            //demo1:放大或者缩小

            //ctx.strokeRect(5, 5, 25, 15);

            //ctx.scale(2, 2);//绘制矩形,放大到 200%,然后再次绘制矩形

            //ctx.strokeRect(5, 5, 25, 15);

 

            //demo2:旋转

            //ctx.rotate(20 * Math.PI / 180);//旋转角度,以弧度计,如需将角度转换为弧度,请使用 degrees*Math.PI/180 公式进行计算。

            //ctx.fillRect(50, 20, 100, 50);

 

            //demo3:位移

            //ctx.fillRect(10, 10, 100, 50);

            //ctx.translate(70, 70);//添加到水平坐标(x)上的值,添加到垂直坐标(y)上的值

            //ctx.fillRect(10, 10, 100, 50);

 

            //demo4:替换绘图的当前转换矩阵

            ctx.fillStyle = "yellow";

            ctx.fillRect(0, 0, 250, 100)

 

            ctx.transform(1, 0.5, -0.5, 1, 30, 10);//transform() 允许缩放、旋转、移动并倾斜当前的环境。

            //水平缩放绘图,水平倾斜绘图,垂直倾斜绘图,垂直缩放绘图,水平移动绘图,垂直移动绘图

            ctx.fillStyle = "red";

            ctx.fillRect(0, 0, 250, 100);

 

            ctx.transform(1, 0.5, -0.5, 1, 30, 10);

            ctx.fillStyle = "blue";

            ctx.fillRect(0, 0, 250, 100);

10.6 文本

ctx.font = "40px Arial";

ctx.fillText("Hello World", 10, 50);

ctx.strokeText("Hello World!", 10, 50);

10.7 图像/视频绘制

10.7.1 图片:

var img = document.getElementById("ig");

ctx.drawImage(img, 30, 10, 200, 100);//图片对象,开始剪切的 x 坐标位置,开始剪切的 y 坐标位置,被剪切图像的宽度,被剪切图像的高度

10.7.2 视频:

var v = document.getElementById("video1");

v.addEventListener("play", function () {

var i = setInterval(function () {

ctx.drawImage(v, 0, 0, 270, 135);

}, 20);

});

v.addEventListener('pause', function () { window.clearInterval(i); });

v.addEventListener('ended', function () { clearInterval(i); });

10.7.3 创建新的、空白的 ImageData 对象

var imgData = ctx.createImageData(100, 100);

for (var i = 0; i < imgData.data.length; i += 4) {

imgData.data[i + 0] = 255;//red

imgData.data[i + 1] = 0;//green

imgData.data[i + 2] = 0;//blue

imgData.data[i + 3] = 255;//alpha

}

ctx.putImageData(imgData, 10, 10);

10.7.4 getImageData() 方法返回 ImageData 对象,该对象拷贝了画布指定矩形的像素数据

ctx.fillStyle = "red";

ctx.fillRect(10, 10, 50, 50);

function copy() {

var imgData = ctx.getImageData(10, 10, 50, 50);//通过 getImageData() 复制画布上指定矩形的像素数据,然后通过 putImageData() 将图像数据放回画布

ctx.putImageData(imgData, 10, 70);

}

copy();

10.8 合成

10.8.1 globalAlpha

ctx.fillStyle = "red";

ctx.fillRect(20, 20, 75, 50);

// 调节透明度

ctx.globalAlpha = 0.2;

ctx.fillStyle = "blue";

ctx.fillRect(50, 50, 75, 50);

ctx.fillStyle = "green";

ctx.fillRect(80, 80, 75, 50);

10.8.2 globalCompositeOperation

ctx.fillStyle = "red";

ctx.fillRect(20, 20, 75, 50);

ctx.globalCompositeOperation = "source-over"; //蓝色在上面

ctx.fillStyle = "blue";

ctx.fillRect(50, 50, 75, 50);

ctx.fillStyle = "red";

ctx.fillRect(150, 20, 75, 50);

ctx.globalCompositeOperation = "destination-over";//红色在上面

ctx.fillStyle = "blue";

ctx.fillRect(180, 50, 75, 50);

 


发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

Powered By Z-BlogPHP 1.7.3

深圳seo|深圳seo顾问|免费提供seo方案|seo优化