JS核心语法与实战技巧

无JS验证场景 

JS验证场景 

JS语法组成

JS输出--->控制台

<head>
    <meta charset="utf-8" />
    <title>JS输出</title>
    <script>
        console.log("hello world");
    </script>
</head>
console.log("helloworld")
<head>
    <meta charset="utf-8" />
    <title>引入外部js文件</title>

    <script src="js/index.js"></script>
    <script>
        console.log("hello前端");
    </script>
</head>

JS变量

变量声明

<head>
    <meta charset="utf-8" />
    <title>变量声明</title>
    <script>
        /*

        变量在一次运行中可以改变数值的量

        1.变量名必须以字母(包含大小写字母)、下划线(_)、$和数字组成,变量不能以数字开头;
        2.不能使用JavaScript中的关键字作为变量名(var、true等); 
        3.JavaScript变量名是严格区分大小写的; 
        4.变量命名使用“小驼峰”命名法则,第一个单词首字母小写,第二个单词起首字母大写,例如userName
        */

        var user;
        var userName;
    </script>
</head>

变量赋值

<head>
    <meta charset="utf-8" />
    <title>变量赋值</title>
    <script>
        /*
         变量赋值
         1.先定义后赋值
         var age;
         age = 18;       
 
         2.定义时赋值
         var age = 18;
 
         3.同时声明多个变量,随后分别进行赋值
         var name,age;
         name = "张三";
         age = 18;
 
         4.同时声明多个变量,并同时赋值
         var name="张三",age=18;
        */

        /* var age;
        age = 18;
        console.log(age);
        age = 20;
        console.log(age); */

        /* var age = 18;
        console.log(age); */

        /* var name, age;
        name = "张三";
        age = 18;

        console.log(name);
        console.log(age); */

        var name = "张三", age = 18;
        console.log(name);
        console.log(age);


    </script>
</head>

JS数据类型

number类型

<head>
    <meta charset="utf-8" />
    <title>number类型</title>
    <script>
        var age = 18;
        console.log(age);   // 18
        console.log(typeof age);    // number

        var price = 11.8;
        console.log(price); // 11.8
        console.log(typeof price);  // number

        var max = -1 / 0;
        console.log(max);   // -Infinity
        console.log(typeof max);    // number

        var num = parseFloat("a111");
        console.log(num);
        console.log(typeof num);
        // NaN  number
        // 如果是111a,那么就转为111

    </script>
</head>

boolean类型

<head>
    <meta charset="utf-8" />
    <title>boolean类型</title>
    <script>
        var b1 = true;
        var b2 = false;

        console.log(b1);
        console.log(b2);

        console.log(typeof b1);     // boolean
        console.log(typeof b2);     // boolean


        var num1 = 5;
        var num2 = 3;

        var b3 = num1 > num2;
        console.log(b3);
        console.log(typeof b3);     // boolean

    </script>
</head>

undefined类型

<head>
    <meta charset="utf-8" />
    <title>undefined类型</title>
    <script>
        var num;
        console.log(num);
        console.log(typeof num);
    </script>
</head>

string类型

<head>
    <meta charset="utf-8" />
    <title>string类型</title>
    <script>
        //var str = "helloworld";
        var str = 'helloworld';
        console.log(str);
        console.log(typeof str);
    </script>
</head>

null类型

<head>
    <meta charset="utf-8" />
    <title>null类型</title>
    <script>
        var obj = null;
        console.log(obj);
        console.log(typeof obj);
    </script>
</head>

强制类型转换

Number 

<head>
    <meta charset="utf-8" />
    <title>Number转换</title>
    <script>
        var num = Number("123.5a");
        console.log(num);   // NaN
        console.log(typeof num);    // number

    </script>
</head>

Boolean

<head>
    <meta charset="utf-8" />
    <title>Boolean转换</title>
    <script>
        /* 
        当value其值为 0、-0、null、""、false、undefined 或 NaN 时,
        那么Boolean()转换成Boolean类型的值为 false。
        
        其他值会被转为true
        */

        var b = Boolean(0);
        console.log(b);
        console.log(typeof b);

        console.log(Boolean(-0));
        console.log(Boolean(null));
        console.log(Boolean(undefined));
        console.log(Boolean(""));
        console.log(Boolean(NaN));
        console.log(Boolean(false));
        console.log(Boolean(1));

    </script>
</head>

String

<head>
    <meta charset="utf-8" />
    <title>String转换</title>
    <script>
        var num = 10;
        var str = String(num);
        console.log(str);
        console.log(typeof str);

        console.log(String(true));  // true
        console.log(String(undefined)); // undefined
        console.log(String(null));  // true
        console.log(String(NaN));   // NaN

    </script>
</head>

ParseInt转换

<head>
    <meta charset="utf-8" />
    <title>parseInt转换</title>
    <script>
        console.log(parseInt("123"));       // 123
        console.log(parseInt("123powernode"));  // 123
        console.log(parseInt("123powernode456"));   // 123
        console.log(parseInt(" 123 "));     // 123
    </script>
</head>

ParseFloat转换

<head>
    <meta charset="utf-8" />
    <title>parseFloat转换</title>
    <script>
        console.log(parseFloat("123.45"));      // 123.45
        console.log(parseFloat("123.45powernode")); // 123.45
        console.log(parseFloat("123.45powernode456"));  // 123.45
        console.log(parseFloat(" 123.45 "));    // 123.45
        console.log(parseFloat("p123.45owernode"));     // NaN
    </script>
</head>

运算符分类

数字运算符

<head>
    <meta charset="utf-8" />
    <title>算数运算符</title>
    <script>
        var num1 = 7;
        var num2 = 2;

        console.log(num1 + num2);   // 9
        console.log(num1 - num2);   // 5
        console.log(num1 * num2);   // 14
        console.log(num1 / num2);   // 3.5
        console.log(num1 % num2);   // 1
    </script>
</head>

自增自减运算符

<head>
    <meta charset="utf-8" />
    <title>自增自减运算符</title>
    <script>
        /*
        自增自减运算符:作用是对于变量做自增1的操作,或者自减1的操作
        自增++
        自减--
        
        【1】单独使用在前在后没有区别
        【2】组合使用
        在前:先做自增,然后将自增后的结果带入参与运算
        在后:先将原来的值带入参与运算,运算完毕以后,立即自增
        */

        var num = 1;
        num--; //单独使用
        console.log(num);   // 0

        var num = 1;
        var num2 = num++;
        console.log(num);   // 2
        console.log(num2);   // 1

        var num1 = 2;
        var num2 = 3;


        console.log(num1++ + ++num2);   //6
        console.log(num1);  //3
        console.log(num2);  //4

    </script>
</head>

赋值运算符

<head>
    <meta charset="utf-8" />
    <title>赋值运算符</title>
    <script>
        var num1 = 10;
        var num2 = num1;
        console.log(num1);  // 10
        console.log(num2);  // 10

        // += -= *= /= %=
        var num1 = 10;
        var num2 = 20;
        num1 += num2; //num1 = num1 + num2;
        console.log(num1);    // 30

    </script>
</head>

条件运算符

<head>
    <meta charset="utf-8" />
    <title>比较运算符</title>
    <script>
        /*
            比较运算符:比较的是两个数据的关系
            > 大于
            >= 大于或等于
            < 小于
            <= 小于或等于
            == 等于(值)
            != 不等于
            === 全等于(值和类型)
             
        */

        console.log(3 > 5);     // false
        console.log(5 >= 5);    // true
        console.log(3 < 5);     // true
        console.log(5 <= 5);    // true

        console.log(5 == 5);
        console.log(5 == "5");   // true
        console.log(5 === "5");  // false

    </script>
</head>

字符串运算符

<head>
    <meta charset="utf-8" />
    <title>字符串运算符</title>
    <script>
        /*
           +
           +=
           完成字符串拼接
        */

        var str = "hello";
        var str2 = str + "world";
        console.log(str2);      // helloworld

        var str2 = str + 100;
        console.log(str2);      // hello100
        console.log(typeof str2);   // string

        str += "world"; // str = str + "world"
        console.log(str);       // helloworld
        console.log(typeof str)     // string

    </script>
</head>

逻辑运算符

<head>
    <meta charset="utf-8" />
    <title>逻辑运算符</title>
    <script>
        /*
        逻辑运算符:表示两个布尔值的逻辑关系
        与:与运算符表示并且的关系,两个参与运算的布尔值,都为true,结果才是true。只要有false,结果就是false
        或:或运算符表示或者的关系,两个参与运算的布尔值,有一个为true,结果即为true,都为false,结果就是false
        */

        console.log(true && true); // true
        console.log(true && false); //false
        console.log(false && false); // false

        console.log("----------------");

        console.log(true || true); // true
        console.log(true || false); //true
        console.log(false || false); // false

        var num = 10;

        //逻辑运算符布尔值的来源,可以来源于条件表达式的运算结果
        console.log(num >= 5 && num <= 15);

        //非:取反操作
        console.log(!true); //false
        console.log(!false); //true
    </script>
</head>

三元运算符

<head>
    <meta charset="utf-8" />
    <title>三目运算符</title>
    <script>
        /*
            三目运算符
            条件表达式 ? 满足条件执行 : 不满足条件执行
        */

        var num1 = 12;
        var num2 = 15;

        //var result = num1 > num2 ? "成立" : "不成立";
        var max = num1 > num2 ? num1 : num2;
        console.log(max);

    </script>
</head>

break和continue

<head>
    <meta charset="utf-8" />
    <title>break和continue语句</title>
    <script>
        /*
            break跳出循环
            continue跳过本次循环,执行下一次循环
        */

        /* for (var i = 0; i < 5; i++) {
            console.log(i);     // 0 1 2
            if (i == 2) {
                break;
            }
        } */

        for (var i = 0; i < 5; i++) {
            if (i == 2) {
                continue;
            }
            console.log(i);     // 0 1 3 4
        }
    </script>
</head>

隐式转换

<head>
    <meta charset="utf-8" />
    <title>隐式转换</title>
    <script>
        /*
            隐式转换指的是,我们没有使用转换语法完成转换,而是在运算的过程中,完成的转换
            我们来看一下常见的隐式转换场景
             1. 一侧有string,+会发生字符串拼接,会将数据转换字符串类型


             2. 一侧有number,另一侧是基本类型 +号运算的时候会将数据转换number类型
             有意义的转为1
             true


             无意义的转为0
             false null

             注意NaN undefined特殊 不会转换


             3. 在使用判断逻辑时
             null undefined '' false 0 -0 NaN这几个是false,其他情况都是true

             4.==
             (1) NaN 和其他任何类型比较,永远返回false
             (2) string 和number 比较,先将string转为number类型
             (3) null和undefined比较,结果是true。除此之外,null、undefined和其他任何结果比较,值都为false
        */

        var str = "hello" + 100;
        console.log(str);

        var num = 1 + undefined;
        console.log(num);       // NaN

        var num = 10;
        if (num) {
            console.log("条件成立");
        }

        if (NaN) {
            console.log("条件成立");
        }

        var b = NaN == NaN;
        console.log(b);     // FALSE

        var b = 1 == '1';
        console.log(b);     // TRUE

        var b = null == undefined;
        console.log(b);     // true

        var b1 = undefined == 0;
        var b2 = undefined == false;
        console.log(b1);    // false
        console.log(b2);    // false

    </script>
</head>

函数

<head>
    <meta charset="utf-8" />
    <title>函数</title>
    <script>
        /*
        函数的定义
         function  函数名(参数1, 参数2, ... , 参数3) {
             // 需要执行的代码块  
         }
         1、function是一个关键字, 和var、typeof一样, 都是关键字, 后面要加空格;
         2、函数名的命名规范和变量命名一样, 只能是字母、数字、下划线、美元符号, 不能以数字开头, 一般采用驼峰式命名;
         3、函数名后的()中放置函数形参, 形参可以为任意多个(意味着可以没有形参), 如有有多个形参用","隔开;
         4、函数{}中就是需要执行的代码块。

         函数的调用
         函数名(实参1, 实参2, ... , 实参3);
        */

        function add(a, b) {
            return a + b;
        }

        var num = add(2, 3);
        var num2 = add(20, 30);

        console.log(num);
        console.log(num2);

    </script>
</head>

函数表达式

<head>
    <meta charset="utf-8" />
    <title>函数表达式</title>
    <script>
        var fun = function (a, b) {
            return a + b;
        }

        var num = fun(2, 3);
        console.log(num);

    </script>
</head>

函数arguments对象

<head>
    <meta charset="utf-8" />
    <title>函数arguments对象</title>
    <script>
        /*
        实参:函数在调用的时候实际传入的参数  1, 2, 3
        形参:函数在定义时,声明的变量 fun(a, b, c)

        使用实参给对应的形参进行赋值,形参具备了实参的值

        arguments封装的是实参的对象
        */

        function fun(a, b, c) {
            console.log(arguments);
            console.log(arguments.length);  // 实参个数:4
            console.log(fun);

            /* 方法函数的引用,和上条语句输出一致 */
            console.log(arguments.callee);

            console.log(a);
            console.log(b);
            console.log(c);

            console.log(arguments[0]);
            console.log(arguments[1]);
            console.log(arguments[2]);
            console.log(arguments[3]);      // 传入实参数据:4
        }

        fun(1, 2, 3, 4);

    </script>
</head>

变量的作用范围

<head>
    <meta charset="utf-8" />
    <title>变量的作用范围</title>
    <script>
        /*
            变量的分类
            局部变量:在函数内部声明的变量,只能在函数内部访问
            全局变量:在函数外声明的变量,全局都可以访问

            注意,js中没有代码块的概念
        */

        function fun() {
            var num = 10;
            console.log(num);
        }

        fun();                 // 10
        console.log(num);      // undefined


        var num = 10;
        function fun01() {
            console.log(num);
        }

        fun01();            // 10
        console.log(num);   // 10


        if (true) {
            var num = 10;
        }

        console.log(num);       // 10
    </script>
</head>

JS内置对象 

String对象

<head>
    <meta charset="utf-8" />
    <title>string对象</title>
    <script>
        /*
            string表示字符串
            使用 ""  ''  就是一个字符串对象
            使用字符串对象的属性和行为实现功能
        */

        var str = "helloworld";
        var str2 = 'helloworld';

        console.log(str.length);    // 10

        var ch = str.charAt(9);
        console.log(ch);            // d

        var str3 = "Hello world, welcome to the universe.";
        var index = str3.indexOf("java");
        console.log(index);         // -1

        var index01 = str3.indexOf("world");
        console.log(index01);       // 6

    </script>
</head>

array数组对象

<head>
    <meta charset="utf-8" />
    <title>array对象创建</title>
    <script>
        /*
            在程序语言中数组的重要性不言而喻。
            JavaScript中数组也是最常使用的对象之一,数组是一个有序集合。
            由于弱类型的原因,JavaScript中数组十分灵活、强大。
            不像是Java等强类型高级语言数组只能存放同一类型或其子类型元素,
            
            JavaScript在同一个数组中可以存放多种类型的元素,
            而且是长度也是可以动态调整的,可以随着数据增加或减少自动对数组长度做更改。
        */

        //创建一个空数组
        var arr1 = [];
        console.log(arr1)

        //创建数组,并带有指定元素
        var arr2 = ["11", "22", "33", "44"];

        //可以在数组中指定不同类型的元素
        var arr3 = [11, "22", undefined, true, null];
        console.log(arr3)

        var arr4 = new Array();

        //创建一个指定长度的数组
        var arr5 = new Array(10);
        console.log(arr5)

        //创建一个数组,在创建时指定元素
        var arr6 = new Array(10, 20, 30, 40);
        console.log(arr6)
    </script>
</head>

array常见属性

<head>
    <meta charset="utf-8" />
    <title>array常见属性</title>
    <script>
        /*
             length属性  长度
             1.获取数组元素的个数
             2.操作数组元素,改变数组的长度
 
             var arr = [1,2,3,4,5,6];
        */

        var arr = [1, 2, 3, 4, 5, 6];
        console.log(arr.length);

        // arr.length = 3;
        // console.log(arr.length);
        // console.log(arr);

        arr.length = 10;
        console.log(arr.length);
        console.log(arr);       // (10) [1, 2, 3, 4, 5, 6, empty × 4]

    </script>
</head>

array操作

<head>
    <meta charset="utf-8" />
    <title>array操作</title>
    <script>
        var arr = ["11", "22", "33", "44"];

        //访问数组元素  数组名[索引值]  如果索引存在,返回对应索引的元素,如果索引不存在,就会返回undefined
        console.log(arr[10]);       // undefined

        //根据索引修改数组元素
        arr[0] = "111";
        console.log(arr[0]);        // 111

        var arr2 = [];
        arr2[0] = "11";
        arr2[1] = "22";

        console.log(arr2);


        //遍历就是将数组的元素,依次取出,进行处理
        console.log(arr[0]);        // 111
        console.log(arr[1]);        // 22
        console.log(arr[2]);        // 33
        console.log(arr[3]);        // 44

        for (var i = 0; i < arr.length; i++) {
            console.log(arr[i]);
        }


    </script>
</head>

array方法

<head>
    <meta charset="utf-8" />
    <title>array方法</title>
    <script>
        var arr = [11, 22, 33, 44];
        //push
        var len = arr.push(55);
        console.log(len);       // 5
        console.log(arr);       // Array(5)

        //unshift 将0插入数组前边,之后向前添加
        var len = arr.unshift(0);
        // var len = arr.unshift(1);
        console.log(len);       // 6
        console.log(arr);       // Array(6)

        //pop 移除末尾元素
        var value = arr.pop();
        console.log("删除的最后一个元素为:" + value);   // 55
        console.log(arr);       // Array(5)

        //shift 移除开头元素
        var value = arr.shift();
        console.log(value);       // 0
        console.log(arr);       // Array(4)


    </script>
</head>

数学对象

<head>
    <meta charset="utf-8" />
    <title>数学对象</title>
    <script>
        //常见属性
        console.log(Math.PI);   //3.141592653589793

        //常见方法

        //round
        console.log(Math.round(1.4));   // 1
        console.log(Math.round(1.5));   // 2

        //floor向下取整
        console.log(Math.floor(1.8));   // 1
        console.log(Math.floor(-1.8));   // -2

        //ceil向上取整
        console.log(Math.ceil(-1.2));   // -1

        //abs取绝对值
        console.log(Math.abs(5));       // 5
        console.log(Math.abs(-5));      // 5

        //min 最小值
        console.log(Math.min(20, 30));   // 20

        //max 最大值
        console.log(Math.max(20, 30));   // 30

        //pow 次方
        console.log(Math.pow(2, 4));   // 16

        //random 随机数  0-1之间
        console.log(Math.random());   // 0.4828493597190001

    </script>
</head>

日期时间

<head>
    <meta charset="utf-8" />
    <title>日期对象</title>
    <script>
        //表示的是当前的系统时间
        var d = new Date();
        console.log(d);

        //时间参数  1月是0   年 月 日 时 分 秒 毫秒
        var d = new Date(2018, 11, 24, 10, 33, 30, 0);
        console.log(d);

        //毫秒值 1970-01-01 00:00:00 UTC为准,在中国GMT时区是早上八点
        var d = new Date(0);
        console.log(d);

        var d = new Date(-1000 * 60 * 60 * 24);
        console.log(d);

        //字符串创建方式
        var d = new Date("October 13, 2014 11:13:00");
        console.log(d);

    </script>

<body>

日期方法

<head>
    <meta charset="utf-8" />
    <title>日期对象方法</title>
    <script>
        var d = new Date(2018, 11, 24, 10, 33, 30, 0);
        var year = d.getFullYear();
        var month = d.getMonth();  // 从0开始
        var day = d.getDate();

        console.log(year);
        console.log(month);
        console.log(day);

        d.setFullYear(2008);
        d.setMonth(0);

        console.log(d);
    </script>
</head>

正则对象

<head>
    <meta charset="utf-8" />
    <title>正则对象</title>
    <script>
        /*
        var reg = /正则表达式/;
        var reg = new RegExp("正则表达式");


        正则表达式定义了字符串组成的规则。也就是判断指定的字符串是否符合指定的规则,如果符合返回true,如果不符合返回false。

        正则表达式是和语言无关的。很多语言都支持正则表达式,Java语言也支持,只不过正则表达式在不同的语言中的使用方式不同,js 中需要使用正则对象来使用正则表达式。

        正则表达式常用的规则如下:

        - ^:表示开始
        - $:表示结束
        - [ ]:代表某个范围内的单个字符,比如: [0-9] 单个数字字符
        - .:代表任意单个字符,除了换行和行结束符
        - \w:代表单词字符:字母、数字、下划线(),相当于 [A-Za-z0-9]
        - \d:代表数字字符: 相当于 [0-9]

        量词:

        - +:至少一个
        - *:零个或多个
        - ?:零个或一个
        - {x}:x个
        - {m,}:至少m个
        - {m,n}:至少m个,最多n个
        */

        var reg = /^\w{6,12}$/;  // 字母,数字,下划线  6-12个

        var str = "abcdef";

        var flag = reg.test(str);

        console.log(flag);        // true

    </script>
</head>

警告框

<head>
    <meta charset="utf-8" />
    <title>警告框</title>
    <script>
        // windows.alert("警告框,windows可省略");
        alert("开始秒杀了,赶紧!");

    </script>
</head>

询问框

<head>
    <meta charset="utf-8" />
    <title>询问框</title>
    <script>
        var key = prompt("您请输入会员key");
        console.log(key);
    </script>
</head>

确认框

<head>
    <meta charset="utf-8" />
    <title>确认框</title>
    <script>
        var flag = confirm("您确认登录么?");
        if (flag) {
            console.log("确认登录");
        } else {
            console.log("不确认登录");
        }
    </script>
</head>

定时器

<head>
    <meta charset="utf-8" />
    <title>定时器</title>
    <script>
        /* function fun() {
            console.log("定时任务执行了一次");
        }
        
        // 间隔时间:2秒
        setInterval(fun, 2000); */

        function fun() {
            console.log("定时任务执行了一次");
        }

        // 炸弹定时器,10秒之后再执行,只会触发一次
        setTimeout(fun, 10000);
    </script>
</head>

清除定时器

<head>
    <meta charset="utf-8" />
    <title>清除定时器</title>
    <script>
        // 设置一个定时器
        var timeOutId = setInterval(
            function () {
                console.log("这段文字还会输出吗?");
            }, 1000
        );

        clearInterval(timeOutId);

    </script>
</head>

自定义对象

<head>
    <meta charset="utf-8" />
    <title>创建自定义对象一</title>
    <script>
        /*
         new关键字创建对象
        */

        var obj = new Object();
        obj.name = "张三";
        obj.sleep = function () {
            console.log("学生" + this.name + "在睡觉");
        }

        console.log(obj.name);
        obj.sleep();
    </script>
</head>

字面量创建对象

<head>
    <meta charset="utf-8" />
    <title>创建自定义对象二</title>
    <script>
        /*
            通过字面量创建对象
        */

        var obj = {
            name: "张三",
            age: 18,
            show: function (girlfriend) {
                console.log(this.name + "的女朋友是:" + girlfriend);
            }
        }

        console.log(obj.name);
        console.log(obj.age);
        obj.show("new 对象");

    </script>
</head>

DOM对象

<body>
    <div id="pn" class="cls">动力节点</div> <br>
    <div class="cls">powernode</div> <br>

    <input type="checkbox" name="hobby"> 抽烟
    <input type="checkbox" name="hobby"> 喝酒
    <input type="checkbox" name="hobby"> 烫头

    <script>
        /*
        由于加载顺序的原因,所以才要将script标签放在body标签中

        Document对象
        getElementById  根据id属性值获取,返回单个Element对象
        getElementsByTagName   根据标签名称获取,返回Element对象数组
        getElementsByClassName  根据class属性值获取,返回Element对象数组
        getElementsByName 根据name属性值获取,返回Element对象数组
        */

        /* var ele = document.getElementById("pn");
        console.log(ele); */

        /* var eles = document.getElementsByTagName("input");
        console.log(eles);
        console.log(eles[0]);   // <input type="checkbox" name="hobby"> */

        var eles = document.getElementsByClassName("cls");
        console.log(eles);

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

            console.log(eles[i]);
        }

        var eles = document.getElementsByName("hobby");
        console.log(eles);

        for (var i = 0; i < eles.length; i++) {
            console.log(eles[i]);
        }

    </script>
</body>

Element对象

<body>
    <div id="pn" class="cls">动力节点</div> <br>
    <div class="cls">powernode</div> <br>

    <input type="checkbox" name="hobby"> 抽烟
    <input type="checkbox" name="hobby"> 喝酒
    <input type="checkbox" name="hobby"> 烫头

    <script>
        var ele = document.getElementById("pn");
        //获取属性的属性值
        /* var attr = ele.getAttribute("class");
        console.log(attr); */

        //判断属性是否存在
        /* var flag = ele.hasAttribute("name");
        console.log(flag); */

        //设置或者添加属性
        ele.setAttribute("name", "powernode");
        ele.setAttribute("name", "power");

        //移除属性
        ele.removeAttribute("name");


    </script>
</body>

元素内容操作

<body>
    <div id="pn" class="cls">
        <span>动力节点</span>
    </div>

    <script>
        /*
            innerHTML 获取元素内容,包括标签
            innerText 获取元素内容,不包含标签
        */

        var ele = document.getElementById("pn");
        var inner = ele.innerHTML;
        // var inner = ele.innerText;
        console.log(inner);

        ele.innerHTML += "<span>powernode</span>";

        ele.innerText = "powernode";

    </script>
</body>

元素关系操作

<body>
    <div id="parent">
        <button id="child1">子节点1</button>
        <button id="child2">子节点2</button>
    </div>

    <script>
        var ele = document.getElementById("child1");
        var ele2 = ele.parentNode;
        console.log(ele2);

        var ele = document.getElementById("parent");
        var eles = ele.children;

        for (var i = 0; i < eles.length; i++) {
            console.log(eles[i]);
        }

    </script>
</body>

节点操作

插入节点

<body>
    <div id="parent">
        <h1 id="title">我是标题</h1>
    </div>

    <script>
        //p标签对象
        var p = document.createElement("p");// <p></p>
        p.innerText = "动力节点,powernode";

        //父节点
        var parent = document.getElementById("parent");

        //父节点中的指定节点
        var title = document.getElementById("title");

        // 将p标签放在title节点之前
        parent.insertBefore(p, title);
    </script>
</body>

删除节点

<body>
    <div id="parent">
        <h1>我是标题</h1>
        <p id="title">好好学习,天天向上</p>
        <a href="http://www.baidu.com">百度一下</a>
    </div>

    <script>
        var parent = document.getElementById("parent");
        var title = document.getElementById("title");
        parent.removeChild(title);

        var title = document.getElementById("title");
        title.parentNode.removeChild(title);

    </script>
</body>

表单操作

<body>
    <div id="parent">
        <form action="#" method="get">
            姓名:<input type="text" name="username" id="username"><br>
            性别:女<input type="radio" class="sex" value="woman" id="1">
            男<input type="radio" class="sex" value="man" id="2"><br>
            故乡:<select id="city">
                <option value="023" id="chongqing">重庆</option>
                <option value="021" id="beijing">北京</option>
                <option value="027" id="wuhan">武汉</option>
                <option value="020" id="shanghai">上海</option>
            </select><br>
            <input type="submit">
        </form>
    </div>

    <script>
        //获取或者设置表单的value信息
        var ele = document.getElementById("username");
        ele.value = "张三";
        console.log(ele.value);

        //获取单选框选中状态,或者设置选中状态
        var ele = document.getElementById("1");
        ele.checked = true;

        //设置下拉框
        var ele = document.getElementById("beijing");
        ele.selected = true;

        //设置禁用效果
        var ele = document.getElementById("2");
        ele.disabled = true;

    </script>
</body>

事件

单击事件

<body>
    <div id="one">动力节点</div>
    <input type="button" id="btn" value="点我改变内容">

    <script>
        /*
        事件源:按钮
        事件:点击
        驱动程序:将div中的标签体内容改变
        */

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

        //将事件源和事件绑定,并指定了驱动程序
        btn.onclick = function () {
            document.getElementById("one").innerHTML = "powernode";
        }

    </script>
</body>

焦点事件

<body>
    昵称: <input type="text" name="username" id="username"> <span id="info"></span>
    <script>
        var ele = document.getElementById("username");

        ele.onfocus = function () {
            document.getElementById("info").innerHTML = "请输入6-12位的昵称";
        }

        // 离焦事件
        ele.onblur = function () {
            var reg = /^\w{6,12}$/;
            var flag = reg.test(ele.value);

            if (flag) {
                document.getElementById("info").innerHTML = "验证通过";
            } else {
                document.getElementById("info").innerHTML = "验证不通过";
            }
        }
    </script>
</body>

改变事件

<body>
    故乡:<select name="city" id="city">
        <option value="1">北京</option>
        <option value="2">上海</option>
        <option value="3">广州</option>
        <option value="4">武汉</option>
        <script>
            var city = document.getElementById("city");
            city.onchange = function () {
                // this指的是触发事件的DOM元素,也就是select
                console.log("选中的城市是:" + this.value);
            }
        </script>
</body>

鼠标移入移出事件

<head>
    <meta charset="UTF-8">
    <title>移入移出事件</title>
    <style>
        .red {
            background-color: red;
        }

        .green {
            background-color: green;
        }
    </style>
</head>

<body>
    <div id="one" class="red">内容</div>

    <script>
        var ele = document.getElementById("one");

        ele.onmouseover = function () {
            ele.setAttribute("class", "red");
        }

        ele.onmouseout = function () {
            ele.setAttribute("class", "green");
        }

    </script>
</body>

页面加载事件

<head>
    <meta charset="UTF-8">
    <title>页面加载事件</title>
    <!-- <script>
        var ele = document.getElementById("one");
        console.log(ele);
    </script> -->

    <script>
        window.onload = function () {
            var ele = document.getElementById("one");
            console.log(ele);
            console.log("页面加载完毕");
        }
    </script>
    </body>
</head>

<body>
    <div id="one">内容</div>

表单事件

<body>
    <form action="#" id="form">
        <input type="text" name="username" placeholder="请输入用户名..."> <br>
        <input type="password" name="password" placeholder="请输入密码..."> <br>
    </form>
    <button id="submit">提交数据</button>
    <button id="reset">重置数据</button>
    <script>

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

        var submit = document.getElementById("submit");
        submit.onclick = function () {
            form.submit();
        }

        var reset = document.getElementById("reset");
        reset.onclick = function () {
            form.reset();
        }

    </script>
</body>

BOM对象

Window对象

<body>

    <script>
        //1.window对象,可以调用其他的内置对象,但是window可以省略
        // window.location;
        // window.history;

        //2.window对象,访问内置函数
        window.alert();
    </script>
</body>

Location对象

<body>
    <!-- 控制当前页面跳转资源 -->
    <script>
        /* alert("跳转百度页面");
        location.href = "https://www.baidu.com"; */

        setTimeout(function () {
            location.href = "https://www.baidu.com";
        }, 3000);
    </script>
</body>

History对象

<body>
    <a href="68BOM-History对象.html">点我跳转</a>
    <button id="btn">下一页</button>
    <script>
        var ele = document.getElementById("btn");
        ele.onclick = function () {
            history.forward();
        }
    </script>
</body>


<body>
    <a href="67BOM-History对象.html">点我跳转</a>
    <button id="btn">上一页</button>
    <script>
        var ele = document.getElementById("btn");
        ele.onclick = function () {
            history.back();
        }
    </script>
</body>

关键字

let

<head>
    <meta charset="UTF-8">
    <title>let关键字</title>
    <script>
        /*
            let关键字用于声明变量,和var有一定的区别
            1.用let声明的变量不能重复声明
            2.用let声明的变量,有代码块的概念
            3.var如果使用没有声明的变量,是undefined,而let会报错
        */

        /* var a = 10;
        var a = 20;
        console.log(a); */     // 20

        /* let a = 10;
        let a = 20;
        console.log(a); */     // 报错

        /* if (true) {
            var a = 10;
        }

        console.log(a); */     // 10


        /*  if (true) {
             let a = 10;
         }
 
         console.log(a); */     // a is not defined

        /* console.log(a);
        var a = 10; */

        console.log(a);
        let a = 10;        // 报错

    </script>
</head>

const

<head>
    <meta charset="UTF-8">
    <title>const关键字</title>
    <script>
        // const定义的量不能更改
        // const a = 5;
        // a = 10;
        // console.log(a);

        const arr = [1, 2, 3, 4, 5];
        arr = [10, 20, 30];
        arr[0] = 100;       // 数组元素可以更改
        console.log(arr);

        const b = {
            name: "张三",
            age: 23
        }

        /* b = {
            name: "李四",
            age: 24
        } */

        b.name = "zhangsan";

        console.log(b);     // 报错

    </script>
</head>

构造函数创建对象

<head>
    <meta charset="UTF-8">
    <title>构造函数创建对象</title>

    <script>
        /*
        function 构造方法(参数,参数){
            this.属性 = 值;
            this.方法 = function(){
                方法体;
            }
        }
        */

        function Person(name, age) {
            this.name = name;
            this.age = age;
            this.eat = function () {
                console.log("吃饭");
            }
        }

        var person = new Person("张三", 23);
        console.log(person.name);
        console.log(person.age);
        person.eat();

    </script>
</head>

原型对象

<head>
    <meta charset="UTF-8">
    <title>原型</title>
    <script>
        /*
            原型是什么?
            每个对象都有一个他的原型对象,他可以使用原型对象中的所有的属性和方法
        */

        let stu = {
            name: "张三"
        }

        //获取他的原型对象
        stu.__proto__.eat = function () {
            console.log("吃饭");
        }

        stu.eat();

    </script>
</head>

原型继承和继承链

<head>
    <meta charset="UTF-8">
    <title>原型继承和继承链</title>

    <script>
        /*
              继承:子类继承父类,子类拥有父类的属性和方法
              js继承:对象继承另一个对象,对象中拥有另一个对象的属性和方法
              
              js对象 拥有 原型的属性和方法 -> 对象
        */

        /* Person和Student是构造函数

            Person.prototype是Person构造函数的原型对象
            Student.prototype是Student构造函数的原型对象(被重写为Person实例)
            Object.prototype是所有对象的最终原型
        */

        function Person(name, age) {
            this.name = name;
            this.age = age;
            /* this.eat = function () {
                console.log("吃东西");
            } */
        }

        function Student(score) {
            this.score = score;
        }

        Object.prototype.eat = function () {
            console.log("Object原型中的eat方法");
        }

        Student.prototype = new Person("张三", 23);

        var stu = new Student(80);      // stu是Student的实例对象
        console.log(stu.score);
        console.log(stu.name);
        console.log(stu.age);
        stu.eat();

    </script>
</head>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值