web前端 【JavaScript】 学习笔记

第一课 JavaScript介绍

在HTML页面嵌入JavaScript的代码有两种方法:

    · 使用JavaScript:前缀构建执行JavaScript代码

        例:

            <a href="javascript:alert('使用前缀运行JavaScript');"

            </a>

    · 使用<script>...</script>标签来包含JavaScript代码

        例:

                <script type="text/javascript">

                    alert("直接运行的JavaScript");

                </script>

导入外部JavaScript文件可让脚本与HTML页面分离,方便维护。

语法如下:

    <script src="xxx.js" type="text/javascript"></script>

第二课 JavaScript基础语法

定义变量

隐式定义:

    例:

        <script type="text/javascript">

        temp="welcome,JavaScript!";    #使用隐式定义直接赋值

        alert(temp);

        </script>

显式定义:(使用var关键字定义变量)

    例:

        <script type="text/javascript">

        var temp;    #显示声明 可用“,”一次性多个变量

        temp=12;    #给变量赋值

        alert(temp);

        </script>

变量名称规则:

    1.首字是字母,下划线或美元符号$。

    2.余下字母可是下划线,美元符$和任意字母数字。

    3.变量名不能为关键字。

数据类型:

数值(整数和浮点数),布尔(true和false),字符串(使用引号),未定义(undefined 确定创建但未使用的变量),空(null 值为空)对象(对象,数组等)。

数据类型转换

    · 通过“+”连接两个字符串 用toString()将数值转化成字符串。

        例:

            var a = 3; b = 10;

            var c = a.toString();    #转化成字符串

            var d = b+c;

            alert(d);    #输出字符串连接为103

    · 通过 parseInt将字符串转换成整型。

        例:

            parseInt(“67red”)    #取起始位整数位置显示,如起始位不是数字报错NaN

            parseInt(“53.5”)    #取整数部分,不进行四舍五入

            parseInt(“pinyin”)    #无整数显示NaN

            parseInt(“0xC”)    #自动进行进制转换并显示结果12

    · 通过 parseFloat将字符串转换成浮点型。

        例:

            parseFloat(“0xC”)    #与整型不同,不进行转换,值截取起始位数字显示。

            parseFloat(“435.34.35”)    #只截取起始位带小数点的数字显示435.34

字符串常用操作方法:

    · charAt()    #获取字符串特定索引出字符 -- 类似python的x[index]

    · toUpperCase()    #转换大写 -- 类似python的upper()

    · toLowerCase()    #转换小写 -- 类似python的lower()

    · indexOf()    #返回字符串中特定字符串第一次出现的位置 -- 类似python的x.index()

    · lastindexOf()    #返回字符串中特点字符串最后一次出现位置 -- 类似python的x.rindex()

    · substring    #返回字符串中的某个子串 

    · slice()    #返回字符串中某个子串,支持负数参数

    · concat()    #将多个字符串拼接成一个字符串

    · replace()    #替换字符串中某个子串 -- 类似python的x.replace(old,new)

    · split()    #将字符串分割成多个字符串,可指定分隔符

    · match()    #使用正则表达式搜索目标字符串,返回匹配字符串

    · search()    #同上,但返回匹配字符串索引值

正则表达式

语法:

    第一种方法:

        var str = "..."

        var reg = /pattern/ ;     #pattern为表达式规则

        alert(reg.exec(str));    #返回查找内容

        alert(reg.test(str));    #返回是否存在查找内容

    第二种方法:

        ...同上

        var reg = new RegExp("pattern");

        ...同上

RegExp对象的常用方法:

    · exec(str)    #检索字符串中指定值,返回找到的值并确定其位置。

    · test(str)    #检索字符串是否有满足指定条件的值,返回true或false。

正则表达式支持的常用通配符:

web前端 【JavaScript】 学习笔记

    例:

        var str="Hello"

        var reg=/o\b/;    #是否以o结尾    \bH判断是否以H开始。

        alert(reg.test(str));    返回true

通配符转义用“\”如 \.

web前端 【JavaScript】 学习笔记

正则表达式量词:

web前端 【JavaScript】 学习笔记

正则表达式修饰符:

web前端 【JavaScript】 学习笔记

语法:

    var str="BACDJKQWBDJKL";

    var reg=/B/g;    #修饰符在表达式后方写入

    alert(reg.test(str));    #匹配到第一个B返回true

    alert(reg.test(str));    #匹配到第二个B返回true

    alert(reg.test(str));    #匹配不到B返回false

JavaScript数组:    #与python的列表类似

语法有三种:

var arr1=[2,4,6];    #定义是直接给数组元素赋值

var arr2=[];    #定义空数组

var arr3=new Array();    #定义空数组并通过索引赋值

    arr3[0]=1;

    arr3[1]="abc";

例:

    var arr=[1,"a",true];    #设置数组

    for(i=0;i<arr.length;i++){    #输入每个数组值,形式类似python的for i in range(len(arr))

        document.write(arr[i]+"<br/>")

    }

    #通过第二和第三种方法赋值,如直接赋值索引值1的位置,跳过的0位置会直接赋值undefined。

常用运算符:

web前端 【JavaScript】 学习笔记

三目运算符:

例:    5>2?alert("5大于2"):alert("5不大于2");    #判断成立执行:前,不成立执行:后。

逗号运算符:

例:    var a,b,c;    a=(b=5,c=2);    alert(a);    #a的值为最右侧变量的值,故输出为2。

void运算符:

例:    var a,b,c;    a=void(b=5,c=2);    alert(a);    #强调不会返回任何值,故为undefined。

typeof:

例:    var a="abc";    alert(typeof(a));    #返回变量的类型,故为string。

instanceof:

例:    var=[1,2];    alert(a instanceof Array);    #判断变量是否为某个类型,JS中只有Object一个父类,其他对象均平级。

流程控制语句

语句主要有if和switch:

if语句:    if(条件){执行语句块} 

                else if {执行语句块} 

                else {执行语句块}

switch语句:    switch(表达式){

                        case值1:执行语句块;break;

                        case值2:执行语句块;break;

                        ...

                        default:执行语句块;}

循环语句:

主要有while循环、do while循环、for循环、for in循环。

while循环:while(循环条件){ 循环体语句块;}

do while循环:do{ 循环体语句块;} while(循环条件);

for循环:for(表达式1-初始化;表达式2-条件;表达式3-更新循环体变量){循环体语句;}

    例:

        var i=0;

        for(i=0;i<=5;i++){document.write("这个数字是:"+i+"<br/>")}

        #类似python中的for i in range(6):print(i)

for in循环:for(变量in对象){执行语句块;}

    例:

        var arr=new Array(3);

        arr[0]=1;arr[2]="abc";arr[4]=true;

        for(var index in arr){ document.write(arr[index]+"<br/>") }

        #类似python中的for i in len(value): print(value[i])

#JavaScript提供了break和continue来改变循环的控制流。

常用特殊语句

    · 语句块

    · 空语句

    · 异常抛出语句

        例:throw new Error("报错了...");

    · 异常捕捉语句

        例:

            try{

                var i=5;

                if(i==5){ throw new Error("报错!") }                

                catch(e){ document.write("错误信息:"+e.message+"<br/>") }

                finally{ document.write("finally<br/>") }

                }        

        #类似python中的try-except-finally。

    · with语句

JavaScript函数详解

定义函数主要有三种方法:

第一种:命名函数 function 函数名(参数列表){ 执行语句块 }

    例:

        function show(name){ alert(name+",你好!") }

        show(“ABC”)

第二种:匿名函数 function (参数列表){ 执行语句块 }

    例:

        var f=function(name){ alert("匿名函数\n你好:"+name)}

        f(“ABC”)

第三种:使用function类构造匿名函数 new function(参数列表,函数值形态);

    例:

        var f=new Function("name","age","alert('名字:')+name+'年龄:'+age;");

        f(“ABC”,22);

函数返回值:JavaScript函数是不会有任何返回值的,如需返回值加入return语句即可。

局部变量和局部函数:和python定义相同。

三种常见调用函数方法:

第一种:直接调用函数: 对象.函数引用; 如没有分配指定对象则默认分配给window对象。

第二种:以call方法调用函数: 函数引用.call(调用者,参数1,参数2...)

第三种:以apply方法调用函数:函数引用.apply(调用者,arguments-数组)

语法:

    function show(name,age){ alert(“你好”+name+“,年龄:”+age); }

    1. window.show("a",30);

    2. show.call(window,“a”,30);

    3. sohw.apply(window,[“a”,30]);

例:

    function show(arr,func){ func.call(window,arr);}

    show([1,2,3,4],function(arr)){

        for (i in arr){ document.write(arr[i]+"<br/>");} })

第三课 常用内置对象

web前端 【JavaScript】 学习笔记

web前端 【JavaScript】 学习笔记

web前端 【JavaScript】 学习笔记

例:

    var d1=new Date();    #获取系统时间

    document.write(d1.toString()+"<br/>")

    var d2=new Date(“2012-12-21”);    #设置时间,可自定义某些部分或全部。

    document.write(d2.toString()+"<br/>")

例:

    var d=new Date();

    var year=d.getFullYear();

    var month=d.getMonth()+1;    #根据JS算法实际月份需+1。

    var date=d.getDate();

    var day=d.getDay();

    switch(day){        #判断执行语句将星期改为中国人习惯的方式。

        case 0:day="星期日";break;

        case 1:day="星期一";break;

        case 2:day="星期二";break;

        case 3:day="星期三";break;

        case 4:day="星期四";break;

        case 5:day="星期五";break;

        case 6:day="星期六";break;

    }

    document.write("今天是"+year+"年"+month+"月"+date+"日,"+day);

web前端 【JavaScript】 学习笔记

对象创建

web前端 【JavaScript】 学习笔记

例:

    function Student(name,age) { 

        this.name=name;    #this为当前对象

        student.gender="male"    #student为当前类对象,故该值不能用this引用。

        }

web前端 【JavaScript】 学习笔记

 例:

    var student=new Object();

    student.name="abc";

    student.age=30;

    student.info=function(){ document.write("名字:"+this.name+",年龄:"+this.age);}

    student.info();

web前端 【JavaScript】 学习笔记

例:

    var person={

        "name":"zhangsan","age":30,

        "son":[ {"name":"jack","age":2 },{"name":"rose","age":5 } ]

        "info":function( ) { document.write( "名字:"+this.name+",年龄:"+this.age+"<br/>");

            for(var child in this.son){ document.write("孩子名字:"+this.son[child].name+",年龄:"+

            this.son[child].age+"<br/>")}; 

        }

    }

    person.info();

第四课 BOM模型

web前端 【JavaScript】 学习笔记

web前端 【JavaScript】 学习笔记

web前端 【JavaScript】 学习笔记

web前端 【JavaScript】 学习笔记

web前端 【JavaScript】 学习笔记

例:

var count=0;    #定义计数器

function showTime(){     #创建调用本地时间函数

    var d=new Date();

    var hour=d.getHours();

    if(hour<10){ hour="0"+hour;}    #如小时为个位数添加0增加美观

    var minute=d.getMinutes();

    var second=d.getSeconds();

    count++;    #计数器+1

    if(count==10){ window.clearInterval(t); }

    docment.getElementById("display").innerHTML=hour+':'+minute+':'+second;    #显示计时器

}

var t=window.setInterval("showTime()",1000);    #设置计时器,并间隔1秒刷新一次

<body>

    <div id="display"></div>

web前端 【JavaScript】 学习笔记

例:

    <body>    #创建第一个页面page1.html

        第一页面<br/>

        <a href="page2.html">下一页</a>

    </body>

    <body>    #创建第二个页面page2.html

        第二页面<br/>

        <a href="page3.html">下一页</a>

        <a href="javascript:history.back()">返回上一页</a>    

        #通过history函数返回上一页(上一页需要被浏览过才可使用)也可用history:go(-1)来实现。

        <a href="javascript:history.forward()">返回上一页</a><br/>

        #通过history函数返回上一页(下一页需要被浏览过才可使用)也可用history:go(1)来实现。

    </body>

    <body>    #创建第三个页面page3.html

        第三页面<br/>

        <a href="javascript:history.back()">返回上一页</a>

        #通过history函数返回上一页(下一页需要被浏览过才可使用)

    </body>

web前端 【JavaScript】 学习笔记

web前端 【JavaScript】 学习笔记

web前端 【JavaScript】 学习笔记

第五课 DOM

        case 0:day="星期日";

web前端 【JavaScript】 学习笔记

web前端 【JavaScript】 学习笔记


web前端 【JavaScript】 学习笔记

web前端 【JavaScript】 学习笔记

web前端 【JavaScript】 学习笔记

web前端 【JavaScript】 学习笔记

web前端 【JavaScript】 学习笔记

web前端 【JavaScript】 学习笔记

web前端 【JavaScript】 学习笔记

web前端 【JavaScript】 学习笔记

web前端 【JavaScript】 学习笔记

web前端 【JavaScript】 学习笔记

web前端 【JavaScript】 学习笔记

web前端 【JavaScript】 学习笔记

web前端 【JavaScript】 学习笔记

web前端 【JavaScript】 学习笔记

添加创建好的选项至列表框或下拉菜单的方式:直接为<select.../>的指定选项赋值    

    列表或下拉菜单对象.options[i]=创建好的option对象

删除列表框、下拉菜单的选项方法:直接使用列表框或下拉菜单对象.remove(index)方法删除指定选项 

    列表框或下拉菜单对象.remove(index) 或  对象.option[index]=null

web前端 【JavaScript】 学习笔记

另一种删除方式:

    city.options[city.options.length-1]=null;

清空列表方法:(直接将列表数量改为0)

    function clearAll(){

        var city=document.getElementById("city");

        if(city.options.length>0){ city.options.length=0;}

    }

web前端 【JavaScript】 学习笔记

web前端 【JavaScript】 学习笔记

web前端 【JavaScript】 学习笔记

第六课 事件概念和监听事件

web前端 【JavaScript】 学习笔记

绑定HTML元素,在元素内增加ONCLICK,缺点是JS无法与HTML文本完全分离,如改动函数名则需要在ONCLICK中调用的函数名同样修改才可。

绑定DOM对象属性,可以将JS与HTML分离,但绑定事件需要在按钮下方执行。

解除HTML元素默认行为,如超链接等,可在绑定事件中加入 return false来阻止。

web前端 【JavaScript】 学习笔记

在DOM标准事件监听中,第三个参数为false执行冒泡事件(从下级往上级逐一执行),true执行捕获事件(从上级往下级逐一执行)

web前端 【JavaScript】 学习笔记

如绑定DOM对象又不希望将JS文件分开,可通过window.onload来实现,此功能是在整个HTML加载完毕后再去执行的命令,故当HTML全部加载后即可找到后续的ID并实现功能。

IE浏览器可通过attachEvent(事件类型,函数)添加监听,detachEvaent(事件类型,函数)来取消监听。

web前端 【JavaScript】 学习笔记

谷歌浏览器给mytest1添加一个监听事件,然后mytest2添加一个函数,通过函数去执行取消监听事件,或给mytest2添加一个监听事件,然后在该监听事件需要执行的函数中创建一个取消mytest1的监听事件的命令。

不建议使用浏览器指定的命令,通常使用标准监听命令,如:

function show() { alert("say something...") }

window.function() { document.getElementById("需绑定标签ID").onclick=show } 

web前端 【JavaScript】 学习笔记

web前端 【JavaScript】 学习笔记

    web前端 【JavaScript】 学习笔记

web前端 【JavaScript】 学习笔记

web前端 【JavaScript】 学习笔记

web前端 【JavaScript】 学习笔记

web前端 【JavaScript】 学习笔记

web前端 【JavaScript】 学习笔记