• web前端-js


    1. js基础语法

      声明变量

        var a = 10;

      查看变量类型

        typeof a;

      打印,测试语句

        alert(a);              #使用弹出框显示

        console.log(a);             #使用console日志打印

        var isdelete = confirm(a);       #弹框选择 ,isdelete会取到bool值 ,a提示信息

      数据类型

        基础数据类型,以及转换数据类型(不可变)

    1)number(0可以做分子)
    var a = String(a);       #将a转换为字符串

    2)string
    var a = Number(a);      #将a转换为数值类型
      拼接:使用+号
      内置方法:
        返回指定索引的值charAt()
          a = 'quguanwen';a.charAt(3);
        拼接字符串concat
          var a ='good';var b ='nice';var c =a.concat(b);c;
        字符串元素替换replace
          var a='good';var b =a.replace('od','ll');b;
        字符串分割列表split返回数组
          var b='goll';var arr1 = b.split('o');arr1;
        

    3)underfined
    var a;           #仅声明的都是underfined类型 

    4)boolean
    任何类型都可以转boolean  #仅0 ,null,NaN,underfined为false

    5)null空对象

        引用数据类型(可变数据类型)   

    1)function函数
      普通函数
        function count(a,b,c){return a+b+c;}
        console.log(count(1,2,3));
      匿名函数(没有函数名,把函数给了一个变量)
        var counts = function () {return 666;}
        counts();
      自执行函数(直接调用自己)
        (function add(a,b){return a+b})(1,2);

    2)Array数组(类似列表)
      定义数组
        var arr1 = [1,2,3,null,'polp'];
      指定索引
        console.log(arr1[2]);
      打印长度
        console.log(arr1.length);
      方法
        合并数组concat(类似extend)
          var arr1=[1,2];var arr2=[3,4];arr1.concat(arr2);
        拼接字符串join(类似join)
          var arr1=['q','a'];var arr2 = arr1.join('+');arr2; 
        末尾追加元素push(类似append)
          var b1=[1,2,3];b1.push(4);b1;
        末尾删除元素pop
          var b1=[1,2,3];b1.pop();b1;
        起始写入元素unshift ,返回值是数组长度
          var arr1=['a','10','1a0'];arr1.unshift('lp');
        起始删除元素shift,返回被删除的值
          var arr1=['a','10','1a0'];arr1.unshift('lp');arr1.shift('lp');    
        切片slice(起始索引,长度)
          var arr1=[1,2,3,4,5,6];arr1.slice(0,2);
        删除splice(起始索引,长度),返回值是被删除的值
          var arr1=[1,2,3,4,5,6];arr1.splice(0,2);
        添加元素splice(添加到的索引位置,0,内容1,内容2)
          var arr1=[1,2,3,4,5,6];arr1.splice(3,0,'ll','oo');
        替换元素splice(替换起始索引,替换个数,替换内容);
          var ki = [1,2,3,4,5,6,7,8,9];arr1.splice(3,2,'oo','tt');arr1;
        排序数组sort()(不区分类型顺序0-9,A-Z,a-z)
          var ab=[1,2,65,3,43,1,2,'a','d','f','ba','ab','VB','A1','0'];ab.sort();
        判断是否为数组
          var arr1=[1,2,3];Array.isArray(arr1);
        数组长度
          var arr1=[1,2,3];arr1.length;

    3)object对象(类似dict,就是个类,定义属性,定义方法)
      var person = {"name":'quguanwen','age':10,func1:function(a,b){alert(a+b)}}
      person.func1(0,19);      #执行函数

    4)date
      创建当前时间对象
        var newdate = new Date();
      时间对象拿出年份
        var year = newdate.getFullYear();year;
      时间对象拿出月份(getMoth能取到是0-11)
        var month = newdate.getMonth();month+1;
      时间对象拿出日
        var date = newdate.getDate();date;
      时间对象拿出星期(0-6 ,其中0是周日)
        var day1 = newdate.getDay();day1;
      时间对象取出小时
        var hour = newdate.getHours();hour;
      时间对象取出份
        var min = newdate.getMinutes();min;
      时间对象取出秒
        var s = newdate.getSeconds();s;

      运算符

        赋值运算符: = 

        算数运算符: + - * / %  -- ++

        比较运算符:  ==(数值相等即可,不考虑数据类型)   ===(数值相等,数据类型也要相等)  !=(数值不等为真)  !==(数值不等的同时类型不同才为真)

      流程控制

    // if-else
    var isdelete = confirm('确定与取消');
    arr1 = [1, 2, 3, 4];
    if (isdelete) {
    alert('确定')
    } else {
    alert('取消')
    }


    // while          #三步走:1初始化条件变量 2.判断循环条件 3.改变变量
    var a = 0;
    while (a < 10 ) {
    console.log(12);
    a++;
    }

    // switch          #类似shell的case语句,常用于对标键盘执行操作
    switch(code)
      case 12:
        执行操作
        break;
      case 20;
        执行操作1
        break;
      default:
        都不满足走default;

    // for            #三步走:1初始化条件变量 2.判断循环条件 3.改变变量
    for (var i = 0; i < 10; i++) {
    console.log(i);
    }

      Math内置对象

        向上取整  var a = 11.9; Math.ceil(a)

        向下取整  var a = 11.9; Math.floor(a)

        比较取大  Math.max(1,2,3,4,10);

        比较取小  Math.min(1,2,3,4,10);

        随机数 (仅有0-1之间数字)

          随机数100-500 :Math.random()*400+100;

          随机数0-300 :Math.random()*300;

    2. 制作动态时间显示

       1) 指定想要在哪个dom标签进行操作

       2) 完成生成当前时间的函数 ,并对dom操作 ,显示内容

       3) 使用定时器触发函数

    <h2 id="time1"></h2>
        <script>
            //第一步绑定一个标签对象,通过id绑定
            var mytime = document.getElementById('time1');
            //第二步我们写一个函数,每次执行函数 ,函数对dom对象做一次操作!!
            function timetemplate() {
                var myDate = new Date();
                var year = myDate.getFullYear();
                var mouth = myDate.getMonth()+1;
                var date = myDate.getDate();
                var hour = myDate.getHours();
                var min=myDate.getMinutes();
                var sec = myDate.getSeconds();
                var datetime = `${year}-${mouth}-${date} ${hour}:${min}:${sec}`;
                console.log(datetime);
                mytime.innerText = datetime;
            }
            //第三步我们写一个定时器,要求每个1000毫秒即1秒执行一次函数,那么页面就在不停变化
            setInterval(function () {
                timetemplate();
            },1000)
        </script>

    3.定时器使用

      setInterval      #周期循环定时器

      setTimeout       #延时定时器 ,仅执行一次

      clearInterval(obj)   #清空周期定时器对象

      clearTimeout(obj)    #清空延时定时器

      定时器没有垃圾回收机制 ,所以创建的定时器对象都回保留 ,所以每次需要清除定时器, 因为代码执行顺序 ,如果代码出现clear可能定时器还没到执行就被清空了

      定时器中是一个函数 

    <script>
        settime2 = setInterval(function () {
            console.log(888)
        }, 1000);
    
        settime1 = setTimeout(function () {
            clearInterval(settime2)
        }, 3000);
    
        clearTimeout(settime1)
    
    </script>

    4.js变量提升

      使用var声明变量时会出现一个问题 ,js会先将变量声明在最前面 ,如var a ,类型也就是undefine .所以我们使用let声明变量

    5.DOM操作-文档对象模型

      HTML文档被解析成DOM树模型,可以用DOM提供的API去获取操纵HTML文档上的元素 ,如document.getElementById("id"),这个就是一个DOM里的API,用于获取HTML标签元素 ,再用js操作

       获取文档对象模型

        由于代码加载顺序 ,一般将script标签写在后面 ,当script写在代码前面的时候可以使用window.onload回调函数 

    <script>
        window.onload = function () {
            var test = document.getElementById('a2');
            test.action = 'www.qq.com'
        };
    </script>
    <form id="a2" action="www.baidu.com" type=""></form>

       获取DOM三种方式

        1).通过id找到标签, 唯一

          var obj = document.getElementById('box1')

        2).通过class找到标签, 不唯一 ,得到一个对象集合(就算仅一个对象也是一个集合) ,可以通过索引取到dom ,也可以遍历

          var test = document.getElementsByClassName('a1');

          test[0]                    #集合中的一个对象

        3).通过标签找到标签 ,也不唯一 

          var test = document.getElementsByTagName('a');      

       对值的操作  

         1) 仅对标签中的文字进行替换操作

          dom对象.innerText = '值'

         2) 对标签实现替换操作

          dom对象.innerHTML = '<input type="text">'      # 这个dom对应的标签就变成了input了

       对属性操作

         dom对象.title = ''        #改变悬浮提示

         dom对象.className = ''      #直接改变了class选择器

         dom对象.name = ''         #改变name属性,input标签中的name

         dom对象.value= ''        #改变value属性,input标签中的value

         dom对象.id= ''         #改变标签id选择器

         dom对象.src= ''          #更改image的src

         dom对象.href= ''         #对a标签的跳转修改

         dom对象.自定义属性= ''        #对自定义属性

         dom对象.action= ''         #form标签的动作 ,修改提交表单地址

         dom对象.type= ''         #对input标签类型操作修改

         dom对象.method= ''         #对表单的请求类型操作

         dom对象.style.margin = ''      #对标签css样式操作

    6.dom操作事件驱动

      事件封装函数 ,函数中定义操作dom对象 ,当事件触发后执行函数

      onclick (单击事件)

      ondblclick (双击事件)

      onmouseenter (鼠标悬浮事件)

      oninput (实时监听输入事件)

      语法: dom对象.事件 = 函数          #重点 函数中可以调用this ,这个this就像self ,是dom对象本身

    ####点击事件触发函数
    <div style=" 20px;height: 20px;background-color: burlywood" class="d1">n</div> <script> let test = document.getElementsByClassName('d1'); test[0].onclick = function () { alert(this.innerText); } </script>


    ####鼠标悬浮事件触发函数实现盒子移动
    <div style=" 200px;height: 200px;background-color: burlywood" class="d1">n</div>
    <script>
    let test = document.getElementsByClassName('d1')[0];
    let num = 0;
    let timer1= null;
    test.onmouseenter = function () {
    clearInterval(timer1);
    timer1 = setInterval(function () {
    num += 10;
    test.style.marginLeft = num + 'px';
    }, 50);
    };
    </script>

    ####实时输入监听
    <div style=" 200px;height: 200px;background-color: burlywood" class="d1"></div>
    <input type="text" id="i1">
    <script>
    let test = document.getElementsByClassName('d1')[0];
    let test1 = document.getElementById('i1');

    test1.oninput = function () {
    test.innerText = this.value;
    }
    </script>

    ####实现多选条件按钮 ,按钮点击会出现选中状态 ,可以多选 ,当点击全部按钮 ,仅全部按钮变色 ,最好是通过添加class来渲染按钮
    <div>
    <input type="button" value="全部" id="s1">
    <input type="button" value="篮球" class="like" id="s2">
    <input type="button" value="rap" class="like" id="s3">
    <input type="button" value="唱跳" class="like" id="s4">
    </div>
    <script>
    let s1 = document.getElementById('s1');
    let like = document.getElementsByClassName('like');
    for (let i = 0; i < like.length; i++) {
    like[i].numi = i;
    like[i].onclick = function () {
    this.style.backgroundColor = 'burlywood';
    s1.style.backgroundColor = 'cornflowerblue';
    }
    }

    s1.onclick = function () {
    for (let x = 0; x < like.length; x++) {
    like[x].style.backgroundColor = 'cornflowerblue';
    }
    this.style.backgroundColor = 'burlywood';
    }

    </script>

    7.dom的创建添加删除

      前后端交互思想 ,数据驱动试图 ,根据后端给的数据 ,决定前端展示的标签和内容

      document.getElementById               #选中html中的标签dom对象

      document.createElement(' html标签 ')            #创建dom对象

      父dom对象.appendChild(dom对象)             #为dom对象创建子标签 ,子标签也要是dom对象

      父dom对象.removeChild(dom对象)            #移除指定的子对象

    <body>
    <ol id="ol1"></ol>
    <script>
        //获取dom
        let testol = document.getElementById('ol1');
        //后端数据,驱动页面
        dataarry = [900, 700, 300, 400];
        //forEach 每个对象 ,和对应索引传给函数
        dataarry.forEach(function (item, index) {
            //创建dom
            let testli = document.createElement('li');
            testli.num = index;
            testli.innerHTML = `<h1>${item}</h1>
                <button class="del">删除</button>`;
            //dom中追加子元素
            testol.appendChild(testli);
        });
        
        let odel = document.getElementsByClassName('del');
        for(let i=0;i<odel.length;i++){
            odel[i].onclick = function () {
                //移除dom ,ol标签的dom对象移除自己的子对象那就是li标签, 通过odel这个dom对象的父标签就是li标签 ,使用this.parentNode可直接获取li标签
                testol.removeChild(this.parentNode);
            }
        }
    </script>
    </body>

    8.BOM浏览器对象模型

      hostname              #获得服务器主机名

      port                  #获得服务器的端口

      pathname              #获得请求的页面的路径名

      protocol                  #获得协议

      search                 #获得请求参数

      reload()               #重新载入页面

    <script>
        console.log(window.location.hostname);  
        console.log(window.location.port);
        console.log(window.location.pathname);
        console.log(window.location.protocol);
        console.log(window.location.search);
        window.location.reload();
    </script>
  • 相关阅读:
    kafka控制测试发送接收消息
    Kafka 启动报错java.io.IOException: Can't resolve address.
    java问题 2019
    java各种面试问题
    java 架构师
    开源的13个Spring Boot 优秀学习项目!超53K星,一网打尽!
    Dubbo 18 问
    Synchronized用于线程间的数据共享,而ThreadLocal则用于线程间的数据隔离。
    XMind2TestCase 工具,提供了一个高效测试用例设计的解决方案(开源)
    windows下面安装Python和pip终极教程
  • 原文地址:https://www.cnblogs.com/quguanwen/p/11339979.html
Copyright © 2020-2023  润新知