美文网首页
【Web前端】10.0 JavaScript(一)——入门

【Web前端】10.0 JavaScript(一)——入门

作者: bobokaka | 来源:发表于2020-02-19 17:43 被阅读0次
    1.0 假设已经学会了HTML和CSS

    话说回来,HTML和CSS也太简单了吧。(手动狗头)

    • JavaScript由浏览器来解释执行。
    • HTML决定了页面的框架
    • CSS:用来美化页面
    • JavaScript:提供用户的交互
    2.0 什么是JavaScript

    JavaScript(简称“JS”) 是一种具有函数优先的轻量级,解释型或即时编译型的编程语言。虽然它是作为开发Web页面的脚本语言而出名的,但是它也被用到了很多非浏览器环境中,JavaScript 基于原型编程、多范式的动态脚本语言,并且支持面向对象、命令式和声明式(如函数式编程)风格。

    • 一门客户端脚本语言
    • 运行在客户端浏览器中的。每一个浏览器都有JavaScript的解析引擎
    • 脚本语言:不需要编译,直接就可以被浏览器解析执行了
    • 功能:可以来增强用户和html页面的交互过程,可以来控制html元素,让页面有一些动态的效果,增强用户的体验。
    3.0 JavaScript发展史
        1. 1992年,Nombase公司,开发出第一门客户端脚本语言,专门用于表单的校验。命名为 : C--    ,后来更名为:ScriptEase
        2. 1995年,Netscape(网景)公司,开发了一门客户端脚本语言:LiveScript。后来,请来SUN公司的专家,修改LiveScript,命名为JavaScript
        3. 1996年,微软抄袭JavaScript开发出JScript语言
        4. 1997年,ECMA(欧洲计算机制造商协会),制定出客户端脚本语言的标准:ECMAScript,就是统一了所有客户端脚本语言的编码方式。
    
    4.0 JavaScript组成

    JavaScript = ECMAScript + JavaScript自己特有的东西(BOM+DOM)

    • JavaScript的核心是ECMAScript:描述了该语言的语法和基本对象。
    • DOM(文档对象模型):描述了处理网页内容的方法和接口,也就是作用于管理页面。
    • BOM(浏览器对象模型):描述了与浏览器进行交互的方法和接口,前进、后退、页面刷新、地址栏、历史记录、屏幕宽高等。
    4.0 ECMAScript:客户端脚本语言的标准
    4.1 基本语法
                1. 与html结合方式
                    1. 内部JS:
                        * 定义<script>,标签体内容就是js代码
                    2. 外部JS:
                        * 定义<script>,通过src属性引入外部的js文件
        
                    * 注意:
                        1. <script>可以定义在html页面的任何地方。但是定义的位置会影响执行顺序。
                        2. <script>可以定义多个。
    
                2. 注释
                    1. 单行注释://注释内容
                    2. 多行注释:/*注释内容*/
    
                3. 数据类型
                    1. 原始数据类型(基本数据类型)
                        1. number:数字。 整数/小数/NaN  (not a number 一个不是数字的数字类型)
                        2. string:字符串。 字符串  "abc" "a" 'abc'
                        3. boolean: true和false
                        4. null:一个对象为空的占位符
                        5. undefined:未定义。如果一个变量没有给初始化值,则会被默认赋值为undefined
                        
                    2. 引用数据类型:对象
    
                4. 变量
                    * 变量:一小块存储数据的内存空间
                    * Java语言是强类型语言,而JavaScript是弱类型语言。
                        * 强类型:在开辟变量存储空间时,定义了空间将来存储的数据的数据类型。只能存储固定类型的数据
                        * 弱类型:在开辟变量存储空间时,不定义空间将来的存储数据类型,可以存放任意类型的数据。
                    * 语法:
                        * var 变量名 = 初始化值;
                    
                    * typeof运算符:获取变量的类型。
                        * 注:null运算后得到的是object
    
                5. 运算符
                    1. 一元运算符:只有一个运算数的运算符
                        ++,-- , +(正号)  
                        * ++ --: 自增(自减)
                            * ++(--) 在前,先自增(自减),再运算
                            * ++(--) 在后,先运算,再自增(自减)
                        * +(-):正负号
                        * 注意:在JS中,如果运算数不是运算符所要求的类型,那么js引擎会自动的将运算数进行类型转换
                            * 其他类型转number:
                                * string转number:按照字面值转换。如果字面值不是数字,则转为NaN(不是数字的数字)
                                * boolean转number:true转为1,false转为0
                    2. 算数运算符(和java一样)
                        + - * / % ...
        
                    3. 赋值运算符(和java一样)
                        = += -+....
        
                    4. 比较运算符
                        > < >= <= == ===(全等于)
                        * 比较方式
                          1. 类型相同:直接比较
                              * 字符串:按照字典顺序比较。按位逐一比较,直到得出大小为止。
                          2. 类型不同:先进行类型转换,再比较
                              * ===:全等于。在比较之前,先判断类型,如果类型不一样,则直接返回false
    
                    5. 逻辑运算符
                        &&   ||    !
                        * 其他类型转boolean:
                           1. number:0或NaN为假,其他为真
                           2. string:除了空字符串(""),其他都是true
                           3. null&undefined:都是false
                           4. 对象:所有对象都为true
                    
                    6. 三元运算符
                        ? : 表达式
                        var a = 3;
                        var b = 4;
                
                        var c = a > b ? 1:0;
                        * 语法:
                            * 表达式? 值1:值2;
                            * 判断表达式的值,如果是true则取值1,如果是false则取值2;
    
                6. 流程控制语句(和Java一模一样)
                    1. if...else...
                    2. switch:
                        * 在java中,switch语句可以接受的数据类型: byte int shor char,枚举(1.5) ,String(1.7)
                            * switch(变量):
                                case 值:
                        * 在JS中,switch语句可以接受任意的原始数据类型
                    3. while
                    4. do...while
                    5. for
    
                7. JS特殊语法:
                    1. 语句以;结尾,如果一行只有一条语句则 ;可以省略 (不建议)
                    2. 变量的定义使用var关键字,也可以不使用
                        * 用: 定义的变量是局部变量
                        * 不用:定义的变量是全局变量(不建议)
    
    4.3 基本语法的代码演示

    关于数据类型,这里用到一个类似于System.out.print();的JavaScript语句document.write( );

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
    
        <script>
            // alert("hello world!")
            var num = 1;
            var num2 = 1.2;
            var num3 = NaN;
    
            document.write(num + "<br/>");
            document.write(num2 + "<br/>");
            document.write(num3 + "<br/>");
    
            var str = "abc";
            var str2 = 'edf';
    
            document.write(str + "<br/>");
            document.write(str2 + "<br/>");
    
            var flag = true;
            var obj = null;
            var obj2 = undefined;
            var obj3;
            document.write(flag + "<br/>");
            document.write(obj + "<br/>");
            document.write(obj2 + "<br/>");
            document.write(obj3 + "<br/>");
        </script>
    </head>
    <body>
    
    </body>
    </html>
    

    输出:


    image.png

    学习一个新的运算法:typeo运算符
    typeof 运算符:有一个参数,即要检查的变量或值。例如:

    var sTemp = "test string";
    alert (typeof sTemp);    //输出 "string"
    alert (typeof 86);    //输出 "number"
    

    对变量或值调用 typeof 运算符将返回下列值之一:

    undefined - 如果变量是 Undefined 类型的
    boolean - 如果变量是 Boolean 类型的
    number - 如果变量是 Number 类型的
    string - 如果变量是 String 类型的
    object - 如果变量是一种引用类型或 Null 类型的

    <!DOCTYPE html>
    <html>
        <head>
            <meta charset="utf-8">
            <title></title>
            <script>
                /*弱变量类型*/
                var i =1;
                var j = "zhangsan";
                document.write(j +"---"+typeof (j)+"<br/>");
                alert(typeof i);
                alert(typeof j);
            </script>
        </head>
        <body>
        </body>
    </html>
    

    关于流程控制语句,如下注释掉的代码都可以运行。

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>控制语句</title>
        <script>
            // var a = 1;
            // var a = true;
            // var a = null;
            // var a = undefined;
            // var a = 1;
            // var a = 1;
            var a = "abc";
    
    
            switch (a) {
                case 1:
                    alert("number");
                    break;
                case "abc":
                    alert("String");
                    break;
                case true:
                    alert("true");
                    break;
                case null:
                    alert("null");
                    break;
                case undefined:
                    alert("undefined");
                    break;
            }
        </script>
    </head>
    <body>
    
    </body>
    </html>
    
    计算1~100的和
    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>控制语句</title>
        <script>
            var sum = 0;
            var num = 1;
            while (num <= 100) {
                sum += num;
                num++;
            }
            alert(sum);
        </script>
    </head>
    <body>
    
    </body>
    </html>
    
    image.png
    JavaScript的运算符和语句

    和Java一样。
    JavaScript有个特别的:
    === 全等号,类型和数值必须全部相等
    null是Object类型,这是JavaScript的一个bug,但是一直没有修复。
    字符串进行数字运算,字符串就会转成NaN,再进行运算;NaN进行运算,结果都是NaN,这是NaN存在的意义。

    打印99乘法表

    要求效果图如下:


    image.png

    开始编写:

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>控制语句</title>
        <script>
            for (var i= 1 ;i<=9;i++) {
                for (var j= 1 ;j<=i;j++) {
                    //输出到页面
                    document.write(i+"*"+j+"="+(i*j)+"&nbsp;&nbsp;&nbsp;")
                }
                //输出换行
                document.write("<br/>");
            }
        </script>
    
    </head>
    <body>
    
    </body>
    </html>
    

    执行:


    image.png

    但是做到这里,项目看上去非常简陋,而且还是没有达到我们想要的效果,继续编写:

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>控制语句</title>
    
        <script>
            //border:边框 align:位置,设置居中
            document.write(("<table border='1' align='center'>"));
    
            for (var i= 1 ;i<=9;i++) {
                document.write(("<tr>"));
                for (var j= 1 ;j<=i;j++) {
                    document.write(("<td>"));
                    //输出到页面
                    document.write(i+" * "+j+" = "+(i*j)+"&nbsp;&nbsp;&nbsp;")
                    document.write(("</td>"));
                }
                // //输出换行
                // document.write("<br/>");
                document.write(("</tr>"));
            }
            //完成表格嵌套
            document.write(("</table>"));
    
        </script>
    
    </head>
    <body>
    
    </body>
    </html>
    

    执行:


    image.png

    效果已经出来了,但是我们看到,最外层有一个边框,不是我们想要的,这时候光靠HTML不足以达到效果,需要配合CSS来完成界面美化:

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>控制语句</title>
        <style>
            td{
                border: 1px solid;
            }
        </style>
        <script>
            //border:边框 align:位置,设置居中
            document.write(("<table align='center'>"));
    
            for (var i= 1 ;i<=9;i++) {
                document.write(("<tr>"));
                for (var j= 1 ;j<=i;j++) {
                    document.write(("<td>"));
                    //输出到页面
                    document.write(i+" * "+j+" = "+(i*j)+"&nbsp;&nbsp;&nbsp;")
                    document.write(("</td>"));
                }
                // //输出换行
                // document.write("<br/>");
                document.write(("</tr>"));
            }
            //完成表格嵌套
            document.write(("</table>"));
    
        </script>
    
    </head>
    <body>
    
    </body>
    </html>
    

    执行:


    image.png
    5.0 基本对象
    5.1 Function:函数(方法)对象

    使用案例

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Function对象</title>
        <script>
            /**
             * Function:函数(方法)对象
             * 1.创建
             * *    1. var fun = new Function(形式参数列表,方法体)(别这么用)
             * *    2. function 方法名称(形式参数列表){
             * *            方法体
             * *    }
             * *    3. var 方法名 = function(形式参数列表){
             * *            方法体
             * *    }
             * 2.方法
             * 3.属性
             * *    length:属性,代表形参的个数
             * 4.特点
             * *    1.方法定义时,形参的类型不用写,返回值类型也不用写
             * *    2.方法是一个对象,如果定义名称相同的方法,会覆盖。
             * *    3.在JS中,方法的调用只与方法的名称有关,和参数列表无关
             * *    4.在方法生命中有一个隐藏的内置对象(数组),arguments,封装所有的实际参数。
             * 5.调用
             * *    方法名称(实际参数列表)
             *
             */
                //1.创建方式1(见一见就好,别用,逻辑上很难理解)
                // var fun1 = new Function("a","b","alert(a);");
                // //调用方法
                // fun1(3,4);
    
                //2.创建方式2
                //方法定义时,形参的类型不用写
                // function  fun2(a,b) {
                //     alert(a+b);
                // }
                //
                // fun2(a,b);
    
            var fun3 = function (a, b) {
                    alert(a + b);
                }
                fun3(3,4);
    
    
        </script>
    </head>
    <body>
    
    </body>
    </html>
    

    我们主要用方法中后两种(第2种和第3种创建方式)。

    第1种是对象,为什么后两种明明是函数的模板,怎么会是对象呢?

    对象都有属性,这里介绍一种Function的属性:

     length:属性,代表形参的个数
    

    可以测试知道,fun1 fun2 fun3都有length属性。甚至你还可以这样:

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Function对象</title>
        <script>
            var fun3 = function (a, b) {
                    alert(a + b);
                }
    
            fun3 = function (a, b) {
                alert(a - b);
            }
            fun3(3,4);
    
        </script>
    </head>
    <body>
    
    </body>
    </html>
    

    执行不仅不会报错,而且结果是-1,后面的会把前面的方法覆盖掉。

    一种重要的特性

     function fun2(a, b) {
                alert(a + b);
            }
    
            // fun2(a,b);
            //方法的调用
            fun2(1);
    

    执行:


    image.png

    不报错,因为b是undefined。也可以传3个参数,但是第三个无效。

    arguments:一种重要的特点,隐藏的内置对象(数组),封装所有的实际参数。

    比如,求2个数的和。

     //求两个数的和
            function add(a, b) {
                return a + b;
            }
     var sum = add(1, 2);
            alert(sum);
    

    如果实现任何两个数的和,java中想到传一个数组,同样JavaScript也有arguments:
    先测试一下这个对象。

      //求任意个数的和
            function add() {
                alert(arguments[0]);
                alert(arguments[1]);
            }
    
            var sum = add(1, 2);
            alert(sum);
    

    用arguments计算任意个数之和:

            function add() {
                var sum = 0;
                for (var i = 0; i < arguments.length; i++) {
                    sum += arguments[i];
                }
                return sum;
            }
    
            var sum = add(1, 2, 3, 4);
            alert(sum);
    

    总结Function有四个特性:

      • Function:函数(方法)对象
      • 特点
        • 1.方法定义时,形参的类型不用写,返回值类型也不用写
        • 2.方法是一个对象,如果定义名称相同的方法,会覆盖。
        • 3.在JS中,方法的调用只与方法的名称有关,和参数列表无关
        • 4.在方法生命中有一个隐藏的内置对象(数组),arguments,封装所有的实际参数。
    5.2 Array对象
        2. Array:数组对象
                1. 创建:
                    1. var arr = new Array(元素列表);
                    2. var arr = new Array(默认长度);
                    3. var arr = [元素列表];
                2. 方法
                    join(参数):将数组中的元素按照指定的分隔符拼接为字符串
                    push()  向数组的末尾添加一个或更多元素,并返回新的长度。
                3. 属性
                    length:数组的长度
                4. 特点:
                    1. JS中,数组元素的类型可变的。
                    2. JS中,数组长度可变的。
    
    创建
    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Array对象</title>
    
        <script>
            //1.创建方式1
            var arr1 = new Array(1, 2, 3);
            var arr2 = new Array(5);
            var arr3 = [1, 2, 3, 4];
    
            var arr4 = new Array();
    
            document.write(arr1 + "<br>");
            document.write(arr2 + "<br>");
            document.write(arr3 + "<br>");
            document.write(arr4 + "<br>");
        </script>
    </head>
    <body>
    
    </body>
    </html>
    

    运行:


    image.png
    元素的类型可变
       var arr = [1,"abc",true];
       document.write(arr +"<br>");
    
    6.0 JavaScript的输出

    总共4种:

    • alert() 直接弹框
    • document.write() 向页面输出
    • console.log() 向控制台输出
    • innerHTML: 向页面输出
    6.0 JavaScript常见声明

    JS声明变量:

        var 变量的名称 = 变量的值
    

    JS声明函数:

        var 函数的名称 = function(){ 
    
        }
    
        function 函数的名称(){
    
        }
    
    7.0 JavaScript的开发步骤
    1. 确定事件
    2. 通常事件都会出发一个函数
    3. 函数里面通常都会去操作页面元素,做一些交互
    <!DOCTYPE html>
    <html>
        <head>
            <meta charset="utf-8">
            <title></title>
            
            <script>
                function dianji(){
                    alert("打不开,是病毒。");
                }
            </script>
        </head>
        <body>
            <input type="button" value="坦克世界"  onclick="dianji()"/>
        </body>
    </html>
    
    
    <!DOCTYPE html>
    <html>
        <head>
            <meta charset="utf-8">
            <title></title>
    
            <script>
                function dianji(){
                    var div1 = document.getElementById("div1");
                    var div2 = document.getElementById("div2");
                    div1.innerHTML = "<font color='red'>就是打不开坦克世界</font>";
                    div2.innerText = "<font color='red'>就是打不开坦克世界</font>";
                }
            </script>
        </head>
        <body>
            <input type="button" value="坦克世界" onclick="dianji()" />
            <div id="div1">这里的内容一会要被替换掉。</div>
            <div id="div2">这里的内容一会要被替换掉。</div>
        </body>
    </html>
    

    特殊事件:

    <!DOCTYPE html>
    <html>
        <head>
            <meta charset="utf-8">
            <title></title>
    
            <script>
                function checkForm(){
                    
                    return false;
                }
            </script>
        </head>
        <body>
            <form action="../index.html" onsubmit="return tcheckForm()">
                用户名:<input type="text" /><br />
                <input type="submit" value="提交" />
            </form>
        </body>
    </html>
    

    语法中的特例:这里的表单中的提交方法,必须有个return。
    完整版本。

    <!DOCTYPE html>
    <html>
    
    <head>
        <meta charset="utf-8">
        <title>来个标题</title>
    
        <script>
            function checkForm() {
                //获取用户输入的内容
                var input1 = document.getElementById("username");
                // alert(input1.value);
                var uvalue = input1.value;
                if (uvalue.length <= 6) {
                    return true;
                } else {
                    alert("对不起,用户名太短啦!");
                }
                return false;
            }
        </script>
    
    </head>
    
    <body>
        <form action="JS入门案例.html" onsubmit="return checkForm()">
            用户名:<input type="text" id="username" /><br />
            <input type="submit" value="提交" />
        </form>
    </body>
    
    </html>
    
    8.0 邮箱验证

    使用一个test方法,用于验证匹配正则表达式是否符合。

    if(!/^([a-zA-Z0-9_-])+@([a-zA-Z0-9_-])+(\.[a-zA-Z0-9_-])+/.test(uEmail)){
                        alert("对不起,邮箱不合法");
                        return false;
                    }           
    

    END

    相关文章

      网友评论

          本文标题:【Web前端】10.0 JavaScript(一)——入门

          本文链接:https://www.haomeiwen.com/subject/wuuafhtx.html