关于JS的一些自我总结| 青训营笔记

81 阅读2分钟

这是我参与「第五届青训营 」伴学笔记创作活动的第 9 天

JavaScript


1、 什么是JavaScript?

脚本语言。运行在浏览器的内存当中,最初叫LiveScript,后来改名为JavaScript,简称JS

2、在HTML中怎么嵌入JavaScript代码

三种方式:

  • 事件句柄:

  • 脚本快的方式:

        <script type="text/javascript">
            window.alert("Hello js");
        </script>
    
  • 引入外部独立的js文件:

​ 注意:

​ 这种方式不可以,必须是双闭合的标签

3、 关于JS中的变量
    <script>
        /**
         * var 变量名;
         * 变量名 = 值
         * javascript是一种弱类型语言,没有编译阶段,一个变量可以随意赋值 
         */
        var i;
        alert("i =" + i);//i =undefined undefined是一个值

        //alert(age);//Uncaught ReferenceError: age is not defined

        var a,b,c = 200;
        alert("a=" + a);
        alert("b=" + b);
        alert("c=" + c);
        a = false;
        b = "abc";
        alert(a)
        alert(b)
    </script>
4、JS函数初步
    <script>
        /*
        
            1.JS中的函数
                等同于java中的方法
            2.函数如何定义?
                语法格式:
                    function(形参列表){
                        函数体;
                    }
                    第二种
                    函数名 = functio(形参列表){
                        函数体;
                    }
                JS中不需要指定返回值类型,返回什么类型都可以
        */
       function sum(a,b){
        //a和b都是局部变量,他们都是形参
        alert(a + b);
       }
       //调用函数
       sum(1,2);
    </script>

JS当中函数是不可以重载的,因为js是弱类型语言,在JS中如果有两个同名的函数,那么后面的会将前面的覆盖掉,前面的函数就不复存在了。

5、JS的局部变量和全局变量
    <script type="text/javascript">
        /*
            全局变量:
                在函数体之外声明的变量,浏览器打开时声明,浏览器关闭时销毁,尽量少用,占内存
            局部变量:
                在函数体当中声明的变量,包括一个函数的形参都属于局部变量
                局部变量从函数执行时开始创建,到函数执行结束后释放空间,变量销毁。
        */
       // 全局变量
       var i = 100;

       function accessI(){
        alert("i = " + i);
       }
       accessI();

       var username = "andy";
       function accessUsername(){
            var username = "lisi";
            alert("username = " + username);
       }
       accessUsername();

       alert("username = " + username);

       function accessAge(){
        var age = 20;
        alert("age = " + age);
       }

       accessAge();

       //alert("age = " + age);//Uncaught ReferenceError: age is not defined
       //以下语法很奇怪
       function myfun(){
            // 当一个变量声明的时候没有用var关键字,那么这个变量不管在哪都是全局的
            myname = "aaa";
       }
       myfun();
       alert("myname = " + myname);
       
    </script>
6、 JS中的数据类型
    <script type="text/javascript">
        /*
            虽然js在声明变量时,不需要指定数据类型,但是每个数据还是有数据类型的
                JS中数据类型有:原始类型、引用类型
                原始类型:Undefined、Number、String、Boolean、Null
                引用类型:Object以及Object子类
            ES6规范(ECMAScript),在ES6之后,基于以上六种又增加了一种Symbol
            JS中有一个运算符叫typeof,可以获取变量的数据类型
            结果(六个字符串之一):"undefined"/"number"/"string"/"boolean"/"object"/"function"


        */
       function sum(a,b){
            if(typeof a == "number" && typeof b == "number"){
                return a + b;
            }
            alert(a + "," + b + "必须都为数字");
       }
       var retValue = sum("a",1);
       alert(retValue);

       var a = null;
       alert(typeof a);//"object"

       alert(typeof sum);//"function"
    </script>
    <script type="text/javascript">
        /*
            Number类型包括哪些值?
            整数、小数、正数、负数、不是数字、无穷大都属于Number类型
            isNaN():true表示不是一个数字,false表示是一个数字
            parseInt(): 转成整数
            parseFloat(): 转成浮点数
            Math.ceil():作用是向上取整
        */
       var v1 = 1;
       var v2 = 3.14;
       var v3 = -100;
       var v4 = NaN;
       var v5 = Infinity;
       
    //    alert(typeof v1);
    //    alert(typeof v2);
    //    alert(typeof v3);
    //    alert(typeof v4);
    //    alert(typeof v5);

       var a = 100;
       var b = "abc";
       alert(a / b);// 运算结果本来应该是一个数字,但是最后没有数字,那么结果为NaN
       //Infinity
       alert(10 / 0);
       //关于isNaN
       //isNaN(数据),true表示不是一个数字,false表示是一个数字
       function sum(a,b){
        if(isNaN(a) || isNaN(b)){
            alert("参与运算的必须是数字");
        }
        return a + b;
       }
       sum(123,"abc");
       alert(sum(123,1));

       //parseInt
       alert(parseInt(3.999));
       alert(parseInt("3.999"));
       //parseFloat
       alert(parseFloat("2.1"));
       alert(parseFloat(2.1));
       //Math.ceil()
       alert(Math.ceil(2.1));
    </script>

Boolean():作用是将非Boolean类型转化为Boolean类型

规律:“有”就转化为true,没有就转化为false

String类型
    <script type="text/javascript">

        /*
            JS中使用"",''都可以
            创建字符串的两种方式:
                第一种方式 var s = "abc"
                第二种方式 使用内置类
        */
       var x = "abc";
       alert(typeof x);//String

       var y = new String("abc");
       alert(typeof y);//Object
    
       //考点:substr()和substring()的区别
       //substr(startIndex,length) 从startIndex开始截取length长度的子串
       alert("adasdvxcvs".substr(2,4));//asdv
       //substring(startIndex,endIndex) 包含startIndex但是不包含endIndex
       alert("adasdvxcvs".substring(2,4));//as
    </script>
Object
    <script type="text/javascript">
        /*
            Object类型是所有类型的超类,自定义的所有类型,默认继承Object
            Object类包括的属性
            prototype属性(常用的):作用是给类动态的扩展属性和函数
            constructor属性
            函数
            toString、
            定义类的语法:
                function 类名(形参){

                }
                或
                类名 = function(形参){

                }
        */
       function User(a,b,c){
        this.sno = a;
        this.sname = b;
        this.sage = c;
       }
       //创建对象
       var u1 = new User(111,"zhangsan",33);
       //访问对象属性
       alert(u1.sname);
       alert(u1.sno);
       alert(u1.sage);

       alert(u1["sname"]);
       alert(u1["sno"]);
       alert(u1["sage"]);

       Produce = function(pno,pname,price){
        this.pno = pno;
        this.pname = pname;
        this.price = price;

        this.getPname = function(){
            return this.pname;
        }
       }

        pro = new Produce(11,"西瓜",4.0);
        alert(pro.getPname());

        Produce.prototype.getPrice = function(){
            return this.price;
        }
        alert(pro.getPrice());


    </script>
null、NaN、undefined的区别
    <script type="text/javascript">
        alert(typeof null);
        alert(typeof NaN);
        alert(typeof undefined);
 
        alert(null == NaN);//false
        alert(null == undefined);//true
        alert(NaN == undefined);//false
        //在JS中有两个特殊的运算法== 和 ===,前者表示等同,后者表示全等,前者只比较值是否相同,后者还需要比较类型是否一致

    </script>
7、JS中的常用事件
  • 鼠标事件
onclick鼠标点击左键触发
oncontextmenu鼠标点击右键触发
ondblclick鼠标双击触发
onmouseover鼠标经过时触发
onmouseout鼠标离开触发
onfocus鼠标获得焦点触发
onblur鼠标失去焦点触发
onmousemove鼠标移动时触发
onmouseup鼠标弹起时触发
onmousedown鼠标按下触发
  • 键盘事件
onkeyup某个键盘按键松开触发
onkeydown某个键盘按键按下触发
onkeypress某个键盘按键按下触发,不识别功能键,如ctrl
  • 触摸事件
touchstart手指触摸到一个DOM元素时触发
touchmove手指在一个 DOM 元素上滑动时触发
touchend手指从一个 DOM 元素上移开时触发
  • 表单事件
onfocus表单获得焦点触发
onblur表单失去焦点触发
oninput表单每次输入触发
onchange表单内容发生改变时触发
onselect表单文本被选取时触发
onreset表单重置时触发
onsubmit表单提交时触发
  • 动画事件
onanimationend在动画结束播放时触发
onanimationiteration在动画重复播放时触发
onanimationstart在动画开始播放时触发
8、注册事件的两种方式
    <script type="text/javascript">
        /*
            第一种注册事件的方式,直接加句柄
        */
        function sayHello(){
            alert("hello world");
        }
    </script>
    <input type="button" value="hello" onclick="sayHello()"/>
    <input type="button" value="doSome" id="mybtn"/>
    <input type="button" value="doSome2" id="mybtn1"/>
    <script type="text/javascript">
        function doSome(){
            alert("do some...");
        }
        /*
            第二种方式注册事件
        */
        //1.先获取这个按钮对象
       var btnObj = document.getElementById("mybtn");
       // 2.给对象的onclick属性赋值
       btnObj.onclick = doSome;

      var btn1 = document.getElementById("mybtn1");
      btn1.onclick = function(){// 这个函数没有名字叫做匿名函数,这个匿名函数也是回调函数
        alert("doSome2.....");
      }
      document.getElementById("mybtn1").onclick = function(){
        alert("test....");
      }
    </script>
9、 JS代码的执行顺序
<!-- load事件会在页面元素全部加载完毕后才发生 -->
<body onload="ready()">
    <script type="text/javascript">
        /*
        document.getElementById("btn").onclick = function(){
            alert("hello js");
        }
        */
       function ready(){
        document.getElementById("btn").onclick = function(){
            alert("hello js");
        }
       }
    </script>
    <input type="button" value="hello" id="btn">
</body>   

<!-- 改进  -->
<script type="text/javascript">
        window.onload = function(){

            document.getElementById("btn").onclick = function(){
            alert("hello js");
             }

        }

    </script>
    <input type="button" value="hello" id="btn">
10、JS代码捕捉回车键
    <script type="text/javascript">
        window.onload = function(){
           var usernameEl = document.getElementById("username");
           //回车键的键值是13,Esc的键值是27
           usernameEl.onkeydown = function(event){// event变量会接收一个事件对象 这里是键盘事件对象
            //获取键值
            //对于键盘对象来说,都有keyCode属性来获取键值
            if(event.keyCode == 13){
                alert("用户登录。。")
            }
           }
        }
    </script>

11、JS中的void运算符

 <!-- href中不写内容表示当前路径 -->
    <!-- 
        void运算符的语法:void(表达式) 表达式必须写,不写的话后台会报错。
        运算原理:执行表达式,但不返回任何结果
        其中javascript:告诉浏览器下面执行的是一段js代码
        javascript不能省略
     -->
    <a href="javascript:void(0)" onclick="window.alert('test ...')">既保留住超链接的样式,同时用户点击该超链接时执行一段JS代码,页面不会跳转</a>