JAVASCRIPT

 

数组的遍历

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>
    <script>
        let arr = ['red', 'green', 'blue'];
        // 因为数组是从索引号0开始,所以i必须从0 开始 i <arr.length
        //i是计数器 arr[i]是元素个数
        for (let i = 0; i < arr.length; i++) {
            console.log(arr[i]);
        }

        // 案例
        //求数组【2,6,1,7,4】所有元素的和以及平均值
        var arr1 = [2, 6, 1, 7, 4];
        var sum = 0;
        var average = 0;
        for (let j = 0; j < arr1.length; j++) {
            sum += arr1[j];
        }
        console.log("和 = " + sum, "平均值 = " + sum / arr1.length);

        //求数组中的最大值
        var arr2 = [2, 4, 6, 8, 3, 98, 32, 45];
        var max = arr2[0];
        for (var bgNum = 0; bgNum < arr2.length; bgNum++) {
            if (arr2[bgNum] > max) {
                max = arr2[bgNum];
            }
        }
        console.log(max);

        //将数组转换成字符串,并用|--|分割
        var newStr = '';
        var sep = '|--|'
        var arr3 = ['red', 'green', 'blue', 'yellow'];
        for (var oldStr = 0; oldStr < arr3.length; oldStr++) {
            newStr += arr3[oldStr] + sep;
        }
        console.log(newStr);
    </script>
</body>

</html>

 数组的改值

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>数组中新增元素</title>
</head>

<body>
    <script>
        var arr = [1, 3, 5, 7, 9];
        console.log(arr.length);
        // 将长度修改成10后 -- 有5个空值
        arr.length = 10;
        console.log(arr);
        //通过修改数组索引号的方式追加数组元素
        arr[11] = 'hh';
        console.log(arr);
        //改变数组原来的值
        arr[0] = 'orange';
        console.log(arr);
        //将所有数据替换掉
        arr = '替换了嘛';
        console.log(arr);

        // 案例:
        // 新建一个数组,里面存放10个整数(1-10)
        var arr1 = [];
        //数组是从0开始
        for (var num = 0; num < 10; num++) {
            arr1[num] = num + 1;
        }
        console.log(arr1);


        //删选数组[2,4,6,7,43,72,5,2324,745]大于10的数存进新数组
        //方法一
        var oldArr = [2, 4, 6, 7, 43, 72, 5, 232, 745];
        var newArr = [];
        var k = 0;
        for (var i = 0; i < oldArr.length; i++) {
            if (oldArr[i] >= 10) {
                //新数组从0开始依次递增
                newArr[k] = oldArr[i];
                k++;
            }
        }
        console.log(newArr);
        // 方法二
        var old = [2, 4, 6, 7, 43, 72, 5, 232, 745];
        var news = [];
        for (var i = 0; i < old.length; i++) {
            if (old[i] >= 10) {
                //新数组从0开始依次递增
                news[news.length] = old[i];
            }
        }
        console.log(news);
    </script>
</body>

</html>

      数组案例:

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>数组中新增元素</title>
</head>

<body>
    <script>
        //将数组[2,3,5,0,43,6422,235,1]中的零去掉
        // 方法一
        var arr = [2, 3, 5, 0, 43, 6422, 235, 1];
        for (var i = 0; i < arr.length; i++) {
            if (arr[i] != 0) {
                console.log(arr[i]);
            }
        }
        // 方法二
        var arr1 = [2, 3, 5, 0, 43, 6422, 235, 1];
        var newarr = []
        for (var i = 0; i < arr.length; i++) {
            if (arr[i] != 0) {
                newarr[newarr.length] = arr1[i]
            }
        }
        console.log("newarr" + newarr);
    </script>

</body>

</html>

   反转数组                      

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>数组中新增元素</title>
</head>

<body>
    <script>
        //反转数组
        var arr = [2, 3, 5, 0, 43, 6422, 235, 1];
        var newarr = [];
        for (var i = arr.length - 1; i >= 0; i--) {
            newarr[newarr.length] = arr[i];
        }
        console.log(newarr);
    </script>

</body>

</html>

冒泡函数

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>数组中新增元素</title>
</head>

<body>
    <script>
        //冒泡排序(从小到大or从大到小)
        // 内外两层循环
        // 外:趟数 看需要遍历多少遍 如果时5个元素那么需要4次
        // 54321 把5放在后面要经历4次交换次数

        // 43215
        // 32145
        // 21345
        // 12345
        // 内:每层循环有多少列
        var arr = [3, 4, 7, 2, 6, 1];
        for (var i = 0; i <= arr.length - 1; i++) {
            
            for (var j = 0; j <= arr.length - i - 1; j++) {
                if (arr[j] > arr[j + 1]) {
                    var temp;
                    temp = arr[j];
                    arr[j] = arr[j + 1];
                    arr[j + 1] = temp
                }
            }
        }
        console.log(arr);
    </script>

</body>

</html>

                                                                                                   函数

 函数名命名动词 为了实现某个功能 function必须小写

函数不调用自己不执行

//形参如果不传值那么默认为undefined

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>函数</title>
</head>

<body>
    <script>
        // 形参,实参
        // function getFun(形参1,形参2....){形参是用来接收实参的 想当与一个变量
        //     函数体
        // }
        // getFun(实参1 , 实参2....)


        // 求两个数之间的累计和
        function getSum(num1, num2) {
            var sum = 0;
            for (var i = num1; i <= num2; i++) {
                sum += i;
            }
            console.log(sum);
        }
        getSum(1, 3);
        getSum(234, 432);

        //任意两个数的和
        function getAdd(Num1, Num2) {
            // var Sum = 0;
            // Sum = Num1 + Num2;
            // console.log(Sum);
            console.log(Num1 + Num2);
        }
        getAdd(4, 78);
        getAdd(3244, 7234);

        // 正确格式是不应该把输出语句放在函数内部 应该用return
        //无参
        function getCook() {
            return "hello";
        }
        console.log("函数:" + getCook());
        //有参
        function getcook(aug) {
            return aug;
        }
        console.log(getcook("嗯呢"));
    </script>

</body>

</html>

 函数返回值练习 

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>函数</title>
</head>

<body>
    <script>
        //求任意两个数比较最大值
        function getNum(num1, num2) {
            // if (num1 > num2) {
            //     return num1
            // } else {
            //     return num2;
            // }

            return num1 > num2 ? num1 : num2

        }
        console.log(getNum(1, 5));
        console.log(getNum(14, 2));


        //求出最大值
        function GotNum(arr) {
            var j = arr[0];
            for (var i = 1; i <= arr.length; i++) {

                if (arr[i] > j) {
                    j = arr[i];
                }
            }
            return j;
        }
        console.log(GotNum([3, 45, 73, 6, 2, 62]));
    </script>

</body>

</html>

return 之后的代码是不会被执行的

return只能返回一个值,如果出现两个值或者多个,并且用逗号隔开,则以最后一个为准

怎么同时计算加减乘除

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>函数</title>
</head>

<body>
    <script>
        function getResult(num1, num2) {
            return [num1 * num2, num1 + num2, num1 / num2, num1 - num2]
        }
        re = getResult(6, 2)
        console.log(re); // 返回一个数组
    </script>

</body>

</html>

break,continue,return的区别

break,continue 争对于循环

return 不仅循环而且返回函数值

arguments的使用

当我们不确定函数中有多少个参数传递时,可以用argument获取,在js当中,arguments实际上是一个当前函数的内置对象。所有函数都内置了一个arguments对象,此对象中存储了传递所有实参

其展示形式是一个伪数组

伪数组的特点:只具有数组的一些特性

1.具有length属性

2.按索引方式存储数组

3.不具有数组的push,pop等方法

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>函数</title>
</head>

<body>
    <script>
        function fn() {
            console.log(arguments);
            console.log(arguments.length);
            console.log(arguments[2]);
            //可以通过遍历数组的方式遍历数组
            for (var i = 0; i < arguments.length; i++) {
                console.log(arguments[i]);
            }
        }
        fn("w", "t", "y", "w", "r", "s", "f", "g", "w")
    </script>

</body>

</html>

结果:

例题:

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>函数</title>
</head>

<body>
    <script>
        // 求最大值(任意个数)
        function fn() {
            var max = arguments[0];
            for (var i = 1; i < arguments.length; i++) {
                if (max < arguments[i]) {
                    max = arguments[i];
                }
            }
            return max;
        }
        console.log(fn(3, 5, 2, 6, 12, 63));
        console.log(fn(3, 5, 2));
        console.log(fn(3, 6, 12, 63));

        //利用函数封装的方法,翻转任意一个数组
        //利用函数封装的方法,实现冒泡函数
        //输入一个年份判断是否是闰年(能被四整除并且不能被100整除,或者能被400整除)
        // 第一种
        function leapYear(Year) {
            if (Year % 100 != 0 && Year % 4 == 0 || Year % 400 == 0) {
                return "闰年";
            } else {
                return "平年";
            }
        }
        console.log(leapYear(2000));
        // 第二种
        function isLeapYear(Years) {
            // var flag = false ;
            var flag = "平年"
            if (Years % 100 != 0 && Years % 4 == 0 || Years % 400 == 0) {
                flag = "闰年";
            }
            return flag
        }
        console.log(isLeapYear(2000));
    </script>

</body>

</html>

函数是可以相互调用的

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>函数</title>
</head>

<body>
    <script>
        function f1() {
            console.log(1);
            f2();
        }
        f1();

        function f2() {
            console.log(2);

        }
    </script>

</body>

</html>

案例:

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>函数</title>
</head>

<body>
    <script>
        //输入年份,输出当前2月份的天数 闰年 = 29 ,平年 = 28 
        function backDay() {
            var year = prompt("请输入你的年份");
            if (LoopYear(year)) {
                alert("29天");
            } else {
                alert("28天");
            }
        }
        backDay();

        function LoopYear(year) {
            var flag = false;
            if (year % 4 == 0 && year != 100 || year % 400 == 0) {
                flag = true;
            }
            return flag;
        }
    </script>

</body>

</html>

函数的两种实现方法

             // 一
        function fn() {}
        fn()
            //    二
        var fn = function() {}
        fn()

  作用域

 js的作用域就是代码名字再某个范围内起作用和效果,并且是为了提高程序的可靠性更重要是减少命名规范

js发作用(es6)之前:

全局(在整个script标签或者是一个单独的js文件 浏览器关闭才会销毁比较占内存

和局部作用域(是在函数内部)--函数的形参也是一个局部变量,当代码快运行结束后,就会被销毁,因此更节省空间

1.只要是代码,就有作用域,并且函数可以嵌套


预解析


 对象

对象是一个具体某个的事物 一本书 , 一个苹果、

什么是对象

 创建对象

用字面量创建对象{}

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>js作用域</title>
</head>

<body>
    <script>
        //   var onj = {};
        var obj = {
                name: 'j',
                age: 13,
                sex: '男',
                // 方法
                sayHello: function() {
                    console.log('sayhellohhhh');
                }
            }
            // 调用方法(1)
        console.log(obj.name);
        // 调用方法(2)
        console.log(obj['sex']);
        // /调用函数

        obj.sayHello()
    </script>

</body>

</html>

区别:变量,属性 ,函数,方法

 利用new Object 创建对象

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>js作用域</title>
</head>

<body>
    <script>
        var obj = new Object(); // 创建一个空的对象
        obj.name = 'uuuuu';
        obj.sex = '男';
        obj.age = 23;
        obj.sayHello = function() {
                console.log('你好');
            }
            //调用
        console.log(obj.name);
        console.log(obj['name']);
        //调用函数
        obj.sayHello();
    </script>

</body>

</html>

利用构造函数创建对象 - 可以一次性创建多个对象,重复相同的代码

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>js作用域</title>
</head>

<body>
    <script>
        //构造函数封装的是对象
        //构造函数不需要return就可以返回结果
        //创建动物 的对象
        // 构造函数 首字母必须大写
        function Animal(name, age, sex) {
            // this指定当前函数,因为构造函数不止一个
            this.names = name;
            this.ages = age;
            this.sexes = sex;
            this.sayMiao = function(sang) {
                console.log(sang);
            }
        }
        var lg = new Animal('汪', 12, '男');
        //把整个对象都获取到了
        console.log(lg);
        // 获取单个值
        console.log(lg.names);
        console.log(lg['ages']);
        // 调用函数
        lg.sayMiao('喵~')
            //创建构造函数必须使用new
        var lglg = new Animal('喵', 3, '幼');
        console.log(lglg.names);
        console.log(lglg['ages']);
    </script>

</body>

</html>

 new 关键字

 


遍历对象 ---构造函数是无序的

 for..in 可以遍历数组或者对象

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>js作用域</title>
</head>

<body>
    <script>
        function Hero(name, type, blood) {
            this.names = name;
            this.types = type;
            this.bloods = blood;
            this.attacks = function(attack) {
                console.log(attack);
            }
        }
        var hero = new Hero('廉颇', '力量型', '5000ml');
        for (var k in hero) {
            console.log(k); // 得到属性名称 :names,types…… 
            console.log(hero[k]); // 得到属性值
        }
    </script>

</body>

</html>

案例:简易计算器


内置对象

内置对象:js'自带属性

 查阅文档

MDN : MDN

文档只要带了[]就说明可以写也可以不用写

Math对象

 不是一个构造函数不需要new 直接使用即可

 <script>
        // 圆周率
        console.log(Math.PI);
        // 求最大值 如果有字符串那么返回值为nan
        console.log(Math.max(1, 5, 4, 74, 43));
        console.log(Math.max(-1, -199));
        console.log(Math.max()); //infinity
    </script>

案例:

<script>
        //利用对象封装自己的数学对象包括pi , 最大值 , 求最小值
        var maths = {
            pi: 3.141592653,
            max: function() {
                var maxs = arguments[0];
                for (var i = 0; i < arguments.length; i++) {
                    if (arguments[i] > maxs) {
                        maxs = arguments[i];
                    }
                }
                return maxs;
            },
            min: function() {
                var mins = arguments[0];
                for (var i = 0; i < arguments.length; i++) {
                    if (arguments[i] < mins) {
                        mins = arguments[i];
                    }
                }
                return mins;
            }
        }
        console.log(maths.pi);
        console.log(maths.max(1, 3, 5));
        console.log(maths.min(2, 1, 4));
    </script>

绝对值:反的取正

 随机数random()---查阅文档

 <script>
        // 随机返回小数
        console.log(Math.random());
        console.log(Math.random());
        console.log(Math.random());
        console.log(Math.random() + 10);
        // 随机整数两个数之间并且包含两个数
        function getRandom(min, max) {
            return Math.floor(Math.random() * (max - min + 1)) + min;
        }
        console.log(getRandom(2, 7));
    </script>

随机点名

 <script>
        // 随机整数两个数之间并且包含两个数
        function getRandom(min, max) {
            return Math.floor(Math.random() * (max - min + 1)) + min;
        }
        console.log(getRandom(2, 7));
        //随机点名
        var arr = ['aas', 'adf', 'wrt', 'agsfad'];
        console.log(arr[getRandom(0, arr.length - 1)]);
    </script>

     

                                                             DOM

操作元素--自定义属性的操作

获取属性值:

a.用element.属性 ---获取内置属性值(元素本身自带属性)

 <div id="demo"></div>
    <script>
        // 获取元素
        var div = document.querySelector('div');
        // 打印元素
        //第一个方法
        console.log(demo.id);
        //第二个方法        
        console.log(div.getAttribute('id'));
    </script>

b.用element.getAttribute('属性') ---主要获取自定义的属性but也可以获取内置属性值

H5新增自定义属性:

1.凡是用自定义属性都必须用data-命名-----》element.getAttribute('data-属性')

2.获取自定义属性的第二种方法----》element.dataset.属性 or element.dataset["属性"];   注释:此方法不需要在属性前添加data      //存在兼容性问题 ie11 ↑才兼容

如果自定义属性名称存在如 data-list-name这样格式的,element.dataset.属性 or element.dataset["属性"]中的属性必须采用驼峰命名法,而其余的方法不用:

<div data-list-name="hhhh"></div>
    <script>
        var div = document.querySelector('div'); 
        console.log(div.getAttribute("data-list-name"));
        console.log("----------------------------");
        console.log(div.dataset['listName']);
        console.log(div.dataset.listName);
    </script>

element.dataset.data-属性 or element.dataset["data - 属性"]    X 错误的

<div id="demo" index="1"></div>
    <script>
        //获取自定义属性
        var div = document.querySelector('div')
        console.log(”index = “ + div.getAttribute('index'));
    </script>

更改属性值:

a.setAttribute("属性","更改的值")

b.element.属性 = "更改的值"

 <div id="demo" index="1" class="nav"></div>
    <script>
        //获取自定义属性
        var div = document.querySelector('div')

        console.log(" 更改前 -- index = " + div.getAttribute('index'));
        
        //第一种方法
        
        div.setAttribute('index', "2");

        //setAtrribute()设置className属性时具有特殊性 应改为class

        div.setAttribute('class', " NAVA")
      
        //第二种方法

      
       div.className = "xixi";
    </script>

移除属性

<div id="demo" index="1" class="nav"></div>
    <script>
        //获取自定义属性
        var div = document.querySelector('div')
            //移除属性 removeAttribute(属性)
        div.removeAttribute("index");
</script>

                                                                    节点操作

利用节点层级关系获取元素 :{

c:页面所有内容都是节点     空格也算

a:利用父子兄弟节点关系获取元素

b:逻辑强,兼容性差,更简单噢

}

节点 :{

使用:元素.childNodes[1/2/3].nodetype  例如:

元素节点 nodeType 为 1

属性节点 nodeType 为 2

文本节点 nodeType 为 3 (文本节点包括 ”文本 空格 换行“)  

}

父级节点:node.parentNode

<div class="ddiv">
    <div class="box">
        <span class="spans">ddd</span>
    </div>
   </div>
    <script>
        var spans = document.querySelector('.spans');
        //   得到div 查找的时最近的父节点 box 不是 ddiv
        console.log(spans.parentNode);
    </script>

子级节点:

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>
    <ul>
        <li>1</li>
        <li>2</li>
        <li>3</li>
        <li>4</li>
        <li>5</li>
    </ul>
    <script>
        var ul = document.querySelector('ul');
        //   得到div 查找的时最近的父节点 box 不是 ddiv
        console.log(ul.childNodes); //获取到的是所有的子节点 包括 元素节点 文本节点......
        console.log(ul.childNodes[0]); //获取到文本节点
        console.log(ul.children); //获取到所有的子元素节点li
    </script>
</body>

</html>
<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>
    <ol>
        <li>1111111</li>
        <li>2</li>
        <li>3</li>
        <li>4</li>
        <li>555555555</li>
    </ol>
    <script>
        var ol = document.querySelector('ol');
        //获取第一个节点
        console.log(ol.firstChild);//获取第一个节点 不管是文本还是元素节点,所以它获取到的是一个文本节点
        console.log(ol.firstElementChild);//获取到第一个子元素节点   <li>1111111</li> 存在兼容性问题
        console.log(ol.children[0]);//获取到第一个子元素节点   <li>1111111</li>  最好的
        //获取最后个节点
        console.log(ol.lastChild);//获取最后一个节点 不管是文本还是元素节点所以它获取到的是一个文本节点
        console.log(ol.lastElementChild); //获取到最后一个元素节点    <li>555555555</li>存在兼容性问题
        console.log(ol.children.length - 1);//获取到最后一个元素节点    <li>555555555</li> 最好的
    </script>
</body>

</html>


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值