JavaScript总结

js是运行在浏览器端的脚本语言,主要解决的是前端与用户交互的问题,包括使用交互与数据交互。

1.嵌入页面的方式

-行间事件(主要用于事件)
    <input type='button' name'' onclick="alert('ok!');">

-页面script标签嵌入
   <script type='text/javascript'>
        var a='hello';
        alert(a);
    </script>

-外部引入
    <script type="text/javascript" src="js/index.js"> </script>

注意:
    一条js语句应该以分号;结尾
    注释
       //单行注释
       /*
         多行注释
       */

2.变量

--js是一种弱类型语言,javascript的变量类型由它的值来决定。定义变量需要用关键字'var'
 var a=123;
 var a='hello',b='world';

--变量类型
    5种基本数据类型:number,string,boolean,undefined,null
    1种复合类型

    注意:(变量,函数,属性,函数参数命名规范)
        -区分大小写
        -第一个字符必须是字母,下划线_或美元符号$
        -其他字符可以是字母,下划线,美元符号或数字

3.获取html元素方法

-document.getElementById('div1')
    --方法一
        <div id='div1'>这是一个div元素</div>            
        <script type="text/javascript">
            var oDive=document.getElementById('div1');
        </script>
    #注意:页面是从上往下加载执行

    --方法二
    #将js语句放在window.onload触发函数里面,等页面加载完成后才执行
    <script type="text/javascript">
        window.onload=function(){
            var oDive=document.getElementById('div1');
        }
    </script>

    <div id='div1'>这是一个div元素</div>

4.操作html元素属性

-获取的页面元素,就可以对页面元素属性进行操作,属性的操作包括属性的读和写
-两种方法
    "."操作
    "[]"操作

 -innerHTML   可以读取或者写入标签包裹的内容

-需要注意三点
    --html属性和js里面的属性写法一样
    --class属性改写为 className (因为class在js中也是关键字)
    --style 属性里面的属性,有横杠的改成驼峰式,比如:"font-size",改成sytle.font
实例子:
#方法一(. 操作)
      <script type="text/javascript">
       window.onload=function(){
           var oInput=document.getElementById('input1');
           var oA=document.getElementById("link1");
           //读取属性值
           var val=oInput.value;
           var typ=oInput.type;
           var nam=oInput.name;
           var links=oA.href;
           //写(设置)属性
           oA.style.color='red';
           oA.style.fontsize=val;
       }
   </script>
   <input type="text" name="setsize" id="input1" value="20px">
   <a href="https://www.baidu.com" id="link1">百度一下</a>

  #方法二([] 操作)
    <script type="text/javascript">
        window.onload=function(){
            var oInput=document.getElementById('input1');
            var oA=document.getElementById("link1");
            //读取属性值
            var val=oInput.value;
            //写(设置)属性,此时[变量],若用"."则没有反应
            oA.style[val]="20px"; 
        }
    </script>

     <input type="text" name="setsize" id="input1" value="fon">
     <a href="https://www.baidu.com" id="link1">百度一下</a>

#innerHTML
<script type="text/javascript">
        window.onload=function(){
            var oDiv=document.getElementById('div1');
            //读取属性值
            var txt=oDiv.innerHTML;
            alter(txt);
            //写(设置)属性,此时[变量],若用"."则没有反应
            oDiv.innerHTML='<a href='https://www.baidu.com>百度一下</a>';
        }
    </script> 

    <div id='div1'>这是一个div元素</div>

5.函数

--就是重复执行的代码片
--函数定义与执行
 <script type="text/javascript">
    //函数定义
    function aa() {
        alert('hello world');
    }
    //执行函数
    aa(); //弹出hello world
</script>   
--变量与函数与解析   
alert(bb); //弹出 underfined
var bb=123;

注意:js解析过程分为两个阶段,先是编译阶段,然后执行阶段;
编译阶段会将function定义的函数提前,并且将var定义的变量声明提前,将它赋值为underfined;

--提取行间事件
    -在html行间调用的事件可以提取到js中调用,从而做到结构与行间分离
#行间事件调用函数
<script type="text/javascript">
    function myalert(){
        alert('ok');
    }
</script>
<input type="button" name="" value="弹出" onclick="myalert()">



#提取行间事件
<script type="text/javascript">
    window.onload=function () {
        var oBtn=document.getElementById('btn1');
        oBtn.onclick=myalert; //测试函数调用,可没有括号哦!
        function myalert(){
            alert('ok!!!');
        }
    }
</script>
<input type="button" name="" value="点我试试" id="btn1">
   -匿名函数
        定义的函数可以不给名称,这个叫做匿名函数,可以将匿名函数直接赋值给元素绑定的事件来完成匿名函数的调用
 <script type="text/javascript">
        window.onload=function () {
            var oBtn=document.getElementById('btn1');
                //直接将匿名函数赋值给绑定的事件
                oBtn.onclick=function () {
                    alert('ok');
                }
            }
        }
</script>   
--函数传参
    <script type="text/javascript">
        function myalert(a){
            alert(a);
        }
        myalert(12345);
</script>

--函数return 关键字
  -返回函数执行的结果
  -结束函数的运行
  -阻止默认行为

实例:
      <script type="text/javascript">
        function add(a,b){
            var c=a+b;
            return c;
            alert('计算完成'); //这一步将不会被执行

        }
        var d=add(1,2);
        alert(d);
    </script>

6.条件语句

--通过条件来控制程序的走向,就需要用条件语句
--条件运算符
    == 判断值是否相等
    === 判断值及类型是否相等
    >
    >=
    <
    <=
    !=
    &&而且
    ||或者
    !否

--常见的语句
    -if else
    -switch
#if else语句
 <script type="text/javascript">
    var a=4;
    if (a==1){
        alert('语文');
    }else if(a==2){
        alert('数学');
    }else if(a==3){
        alert('英语');
    }else if (a==4){
        alert('美术');
    }else if (a==5){
        alert('舞蹈');
    }else{
        alert('不补习');
    }
</script>


#switch语句
<script type="text/javascript">
    var a=2;
    switch (a){
        case 1:
            alert('语文');
            break;
        case 2:
            alert('数学');
            break;
        case 3:
            alert('英语');
            break;
        case 4:
            alert('美术');
            break;
        case 5:
            alert('舞蹈');
            break;
        default:
            alert('不补习');
    }
</script>


7.数组及操作方法

-数组就是一组数据的集合,在js中,数组里面的数据可以是不同类型
-定义数组的方法
    --对象的实例创建
        var alist=new Array(1,2,3);
    --直接创建
        var alist=[1,2,3,'abc'];

-操作数组中数据的方法
    -获取数组的长度  alist.length
    var alist=[1,2,3];
    alert(alist.length)

    -用下标操作数组的某个数据 alist[0]
     var alist=['a','b']
     alert(alist[0]) //弹出a

    -join()将数组成员通过一个分割符号合并成字符串
    var alist=[1,2,3,4]
    alert(alist.join('-')); //弹出1-2-3-4

    -unshift()和shift()从数组前面增加成员或者删除成员
    #unshift增加
    var alist=[1,2,3,4];
    alist.unshift(5);
    alert(alist);//弹出5,1,2,3,4

    #shift自动删除第一个元素
    var alist=[1,2,3,4];
    alist.shift(); 
    alert(alist); // 2,3,4

    ##pop删除最后一个元素
    var alist=[1,2,3,4];
    alist.pop(); 
    alert(alist); // 1,2,3

    -reverse()将数组反转
    var alist=[1,2,3,4];
    alist.reverse();
    alert(alist); //弹出 4,3,2,1

    -indexOf()返回数组中元素第一次出现的索引值
    var alist=[1,2,3,1,2];
    alert(alist.indexOf(1)); #弹出0

    -push() 可向数组的末尾添加一个或多个元素,并返回新的长度
    var alist=[1,2,3];
    alert(alist.push(4); #弹出4
    alert(alist); //弹出1,2,3,4 

    -splice()在数组中增加或删除成员
     var alist=[1,2,3,4];
     alist.splice(2,1,7,8,9); //从第2个元素开始(从0开始计数),删除1个元素,然后在此位置增加'7,8,9'三个元素
     alert(alist); //弹出1,2,7,8,9,4


    -多维度数组
        -多维数组指的是数组成员也就是数组的数组
        var alist=[[1,2,3],['a','b']];
        alert(alist[0][1]); //弹出2;

    -获取元素的第二种方法
      document.getElementByTagName(''),获取的是一个选择集,不是数组,但是可以用下标的方式操作选择集里面的dom元素
  <script type="text/javascript">
        window.onload=function () {
            var aLi=document.getElementsByTagName('li');
            alert(aLi.length);
            aLi[0].style.backgroundColor='yellow';
        }

<ul>
    <li>1</li>
    <li>2</li>
    <li>3</li>
    <li>4</li>
    <li>5</li>
    <li>6</li>
    <li>7</li>
    <li>8</li>
</ul>

8.循环语句

  -程序中进行有规律的重复性操作,需要用循环语句

  -for循环
     for(var i=0; i<len;i++){
         ...
     }

   -while循环
     var i=0;
       while(i<8){
           ...
           i++
       }
   #数组去重
    var aList=[1,2,3,4,4,5,5,6,1,3,5];
    var aList2=[];
    for (var i=0;i<aList.length;i++){
        if (aList.indexOf(aList[i])==i){
            aList2.push(aList[i]);
        }
    }
    alert(aList2); 

9.js组成

-ECMAscript 基础语法(变量,函数,循环语句等)
-DOM文档对象模型,操作html和css的方法
    document.getElementById()
-BOM浏览器对象模型,操作浏览器的一些方法
    window.onload=function(){
        ....
    }
    alert()

10.字符串处理办法

-字符串合并操作 "+"
-parseInt() 将数字字符串转化为整数
-parseFloat()将数字字符串转化为小数
-split()把一个字符串分隔成字符串组成的数组
-charAt()获取字符串中的某一个字符
-indexOf()查找字符串是否含有某字符
-substring(start,end)截取字符串,不包括end
-toUpperCase()字符串转大写
-toLowerCase()字符串转小写

字符串反转
  var str='abcd';
  var str2=str.split('').reverse().join('');
  alert(str2);

NaN:表示非数字值得特殊值;isNaN()来判断一个值是否是NaN值;
<script type="text/javascript">
var Month=30;
if (Month<1 || Month>12){
    Month=Number.NaN;
}
 document.write(Month);

</script>

11.调试程序的方法

-alert(); //浏览器会弹出弹窗

-console.log() //在浏览器的调试台的console中显示

-document.title='xxx';//网页的title
  <title>'xxx'</title>

12.定时器

-作用
    --制作动画
    --异步操作
    --函数缓冲与节流

-定时器类型及语法
    --定时器
      setTimeout 只执行一次的定时器,单位是毫秒,即意味着等xx毫秒后再执行
      clearTimeout 关闭只执行一次的定时器
      setInterval 反复执行的定时器
      clearInterval  关闭反复执行的定时器

    var time1=setTimeout(myalert,2000);
    var time2=setTimeout(myalert,2000);
    clearTimeout(time1);
    clearTimeout(time2);
    function myalert(){
        alert('I Love U');
    }

-定时器制作时钟

 <script type="text/javascript">

       window.onload=function () {
           var oDiv=document.getElementById('div1');
           function timego() {
               var now=new Date(); //内置对象
               var year=now.getFullYear();
               var month=now.getMonth()+1;
               var date=now.getDate();
               var week=now.getDay();
               var hour=now.getHours();
               var minute=now.getMinutes();
               var second=now.getSeconds();
               var str='当前时间是:'+year+'年'+month+'月'+date+'日'+toweek(week)+
                       ' '+todou(hour)+":"+todou(minute)+":"+todou(second);
               oDiv.innerHTML=str;

           }
           timego();
           setInterval(timego,1000);
       }
        function toweek(n){
           switch (n){
               case 0:
                   return '星期日';
               case 1:
                   return '星期一';
               case 2:
                   return '星期二';
               case 3:
                   return '星期三';
               case 4:
                   return '星期四';
               case 5:
                   return '星期五';
               default:
                   return '星期六';

           }
        }
        function todou(n){
           if (n<10){
               return '0'+n;
           }else{
               return n;
           }
       }

    </script>


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

-定时器制作倒计时

<script type="text/javascript">

       window.onload=function () {
           var oDiv=document.getElementById('div1');
            function timeleft(){
                var now=new Date();
                var future=new Date(2018,4,1,0,0,0);//系统月份从0开始计数
                var lefts =parseInt((future-now)/1000);
                var day=parseInt(lefts/86400);
                var hour=parseInt(lefts%86400/3600);
                var min=parseInt(lefts%86400%3600/60);
                var sec=lefts%60;
                str='距离2018年5月1日零点只剩下'+day+'天'+hour+'时'+min+'分'+sec+'秒';
                oDiv.innerHTML=str;
            }
           timeleft();
            setInterval(timeleft,1000);
       }

    </script>

13.类型转换

-直接转换parseInt()与parseFloat()
 alert('12'+7);  //弹出127
 alert(parseInt('12')+7);  //19

-隐式转换"=="和"-"
if ('3'==3){
    alert('相等');
}
//弹出相等

alert('10'-3); //弹出7

-NaN和isNaN
alert(parseInt('123abc'));  //弹出123
alert(parseInt('abc123'));  //弹出NaN

14.变量作用域

-变量作用域是指变量得作用范围,js分为全局变量和局部变量
-全局变量
    在函数之外定义得变量,为整个页面公用,函数内外部都可以访问
-局部变量
    在函数内部定义的变量,只能在定义该变量的函数内部访问,外部无法访问

    <script type='text/javascript'>
        //全局变量
        var a=12;
        function myalert(){
            //局部变量
            var b=123;
            alert(a);
            alert(b);
        }
    </script>

15.封闭函数

-是js中匿名函数的另一种写法,创建一个一开始就执行而不用命名的函数

-一般定义的函数
function changcolor(){
    var oDiv=document.getElementById('div1');
    oDiv.style.colot='red';
}
changecolor();

-封闭函数
(function(){
     var oDiv=document.getElementById('div1');
    oDiv.style.colot='red'; 
}
)();

-还可以在函数定义前加上"~"和"~"等符号来定义匿名函数
 !function (){
    var oDiv=document.getElementById('div1');
    oDiv.style.colot='red';
}();

16.闭包

-函数嵌套函数,内部函数可以引用外部函数的参数和变量,参数和变量不会被垃圾收回机制收回
function aaa(a){
    var b=5;
    function bbb(){
        a++;
        b++;
        alert(a);
        alert(b);
    }
    return bbb;
}
var ccc=aaa(2);
ccc(); // a=3,b=6
ccc(); // a=4,b=7

-改写成闭包函数
    var ccc=(function(a){
        var b=5;
        function bbb(){
            a++;
            b++;
            alert(a);
            alert(b);
        }
        return bbb;
    })(2);
    ccc();
    ccc();

-使用场景
    --将一个变量长期驻扎在内存中,可用于循环中存索引值
   --私有变量计数器,外部无法访问,避免全局变量的污染

17.内置对象

-document
document.referrer //获取上一个跳转页面的地址

-location
window.location.href //获取或者重定url地址
window.location.search  //获取地址参数部分
window.location.hash  //获取页面锚点或者叫哈希值

-Math
Math.random 获取0-1的随机数
Math.floot 向下取整
Math.ceil 向上取整

18.面向对象(难点)

-面向过程:所有的工作都是现写现用
-面向对象:一种编程思想,许多功能时限已经编写好了,在使用时,只需要关注功能的运用,而不需要这个功能的具体实现过程。

-js对象
将相关的变量和函数合成一个整体,这个整体叫对象,对象中的变量叫做属性,变量中的函数叫方法。js中的对象类似字典。
-创建对象

  --单体
       <script type="text/javascript">
       var Tom={
           name:'sun',
           age:'25',
           showname : function () {
               alert('我的名字叫'+this.name);
           };
           showage : function(){
               alert('我今年'+this.age+'岁')
           };
       }

    </script>


    --构造函数
    <script type="text/javascript">

       function Person(name,age,job){
           this.name=name;
           this.age=age;
           this.job=job;
            this.showname = function () {
               alert('我的名字叫'+this.name);
           };
           this.showage = function(){
               alert('我今年'+this.age+'岁')
           };
           this.showjob = function(){
               alert('我今年'+this.job)
           };
       }
        var tom=new Person('tom',18,'程序员');


    </script>

    --工厂模式
    <script type="text/javascript">

function Person(name,age,job){
    var o = new Object();
    o.name = name;
    o.age = age;
    o.job = job;
    o.showname = function(){
        alert('我的名字叫'+this.name);    
    };
    o.showage = function(){
        alert('我今年'+this.age+'岁');    
    };
    o.showjob = function(){
        alert('我的工作是'+this.job);    
    };
    return o;
}
var tom = Person('tom',18,'程序员');
tom.showname();

</script>

--原型模式
<script type="text/javascript">
    function Person(name,age,job){        
        this.name = name;
        this.age = age;
        this.job = job;
    }
    Person.prototype.showname = function(){
        alert('我的名字叫'+this.name);    
    };
    Person.prototype.showage = function(){
        alert('我今年'+this.age+'岁');    
    };
    Person.prototype.showjob = function(){
        alert('我的工作是'+this.job);    
    };
    var tom = new Person('tom',18,'程序员');
    var jack = new Person('jack',19,'销售');
    alert(tom.showjob==jack.showjob);
</script>

--继承
<script type="text/javascript">

        function fclass(name,age){
            this.name = name;
            this.age = age;
        }
        fclass.prototype.showname = function(){
            alert(this.name);
        }
        fclass.prototype.showage = function(){
            alert(this.age);
        }
        function sclass(name,age,job)
        {
            fclass.call(this,name,age);
            this.job = job;
        }
        sclass.prototype = new fclass();
        sclass.prototype.showjob = function(){
            alert(this.job);
        }
        var tom = new sclass('tom',19,'全栈工程师');
        tom.showname();
        tom.showage();
        tom.showjob();
    </script>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值