• js学习


      JS基础操作

      一、分支结构

      1、if语句

      if基础语法

      if (条件表达式)  {

      代码块;

    }

    // 当条件表达式结果为true,会执行代码块;反之不执行

    // 条件表达式可以为普通表达式

    // 0、undefined、 null、""、 NaN为假,其他均为真

      if 复杂语法

      // 1、双分支

      if (表达式1){

      代码块1;

    }else {

      代码块2;

    }

      // 2、多分支

      if (表达式1) {

    }else if (表达式2) {

    }

    ...else if (表达式2) {

    } else {}

      if 嵌套

      if (表达式1) {

        if (表达式2) {

      }...

    }...

      2、switch语句

      

    switch (表达式) {
        case 值1: 代码块1; breakcase 值2: 代码块2; breakdefault:代码块3;
    }
    //1. 表达式可以为 整数表达式 或 字符串表达式
    //2. 值可以为整数 或 字符串
    //3. break可以省略
    //4.default为默认代码块, 需要出现在所有case最下方,在所有case均未被匹配时执行

      二、循环结构

      1、for循环

      

    for (循环变量①;条件表达式②;循环变量增量③) {
       代码块④; 
    }
    // 1.循环变量可以在外、在内声明
    // 2.执行逻辑 ① ②④③ ... ②④③ ②, 入口为①,出口为②, ②④③个数为[0,n]

      2、while循环

      

    while (条件表达式) {
        代码块;
    }

      3、do...while循环

      

    do {
        代码块;
    }while (条件表达式);

      4、 for...in循环

      

    obj = {"name":"zero","age": 8}
    for (k in obj) {
      console.log(k, obj[k])  
    }
    // 用于遍历对象:遍历的结果为key,通过[]语法访问对应的value

      5、for...of循环

      

    iter = ['a', 'b', 'c'];
    for (i in iter) {
        console.log(iter[i])
    }    
    //1.用于遍历可迭代对象:遍历结果为index,通过[]语法访问对应的value
    //2.ES6新增,可迭代对象有 字符串、数组、 Map、Set、Anguments、NodeList等

      6、break, continue关键词

      break: 结束本层循环

      continue: 结束本次循环进入下一次循环

      三 、异常处理

      

    try {
        易错代码块;
    } catch (err) {
        异常处理代码块;
    } finally {
        必须逻辑代码块;
    }
    //1.err为存储错误信息的变量
    //2.finally分支在异常出现与否都会被执行
    throw "自定义异常"
    // 必要的时候抛出自定义异常,要结合对应的try...catch使用

      四、函数初级

      1.函数的定义

      ES5

      

    function 函数名 (参数列表) {
       函数体; 
    }
    
    var 函数名 = function (参数列表) {
       函数体; 
    }

      ES6

      

    let 函数名 = (参数列表)=> {
       函数体; 
    }

      匿名函数

      

    function (参数列表) {
        函数体;
    }
    // 匿名函数需要自调用
    (function (参数列表) {
        函数体;
    })(参数列表);

      2、函数的调用

      函数名(参数列表)

      3、函数的参数

      个数不需要统一

    function fn (a,b,c) {
          console.log(a,b,c) // 100  undefined undefined          
    }
    fn(100)
    
    function fn(a) {
           console.log(a)    //100
    }
    fn(100, 200, 300)    // 200,300被丢弃

      可以任意位置具有默认值

      

    function fn (a, b = 20, c, d = 40) {
          console.log(a, b, c, d)  // 100 200 300 40  
    }
    fn(100, 200, 300)

      通过...语法接收多个值

    function fn (a, ...b) {
            console.log(a, b) // 100 [200 300]
    }
    fn(100, 200, 300)
    // ...变量必须出现在参数列表最后

      4、返回值

      

    function fn() {
        return 返回值;
    }
    // 1.可以空return操作, 用来结束函数
    // 2.返回值可以为任意js类型数据
    // 3.函数最多只能拥有一个返回值

      五、事件初级

      onload: 页面加载完毕事件, 只附属于window对象

      onclick: 鼠标点击时间

      onmouseover: 鼠标悬浮事件

      onmouseout: 鼠标移开事件

      六、 js选择器

      1、 getElement系列

      // 1.通过id名获取唯一满足条件的页面元素

      document.getElementByid('id名');

      // 该方法只能由document调用

      // 2.通过class名获取所有满足条件的页面元素

      document.getElementsByClassName('class名');

      // 该方法可以由document及任意页面元素对象调用

      // 返回值为HTMLCollection (一个类数组结果的对象,使用方式同数组)

      // 没有匹配到任何结果返回空HTMLCollection对象([])

      // 3.通过tag名获取所有满足条件的页面元素

      document.getElementsByTagName('tag名');

      // 该方法可以由document及任意页面对象调用

      // 返回值为HTMLCollection (一个类数组结果的对象,使用方式同数组)

      // 没有匹配到任何结果返回空HTMLCollection对象 ([])

      2.querySelect系列

      // 1.获取第一个匹配到的页面元素

      document.querySelector('css语法选择器');

      // 该方法可以由document及任意页面对象调用

      // 2. 获取所有匹配到的页面元素

      document.querySelectorAll('css语法选择器');

      // 该方法可以由document及任意页面对象调用

      // 返回值为NodeList (一个类数组结果的对象,使用方式同数组)

      //没有匹配到任何结果返回空NodeList对象([])

      3.id名

      可以通过id名直接获取对应的页面元素对象,但是不建议使用

      七、JS操作页面内容

      innerText: 普通标签内容(自身文本与所有子标签文本)

      innerHTML:包含标签在内的内容(自身文本及子标签的所有)

      value:表单标签的内容

      outerHTML:包含自身标签在内的内容 (自身标签及往下的所有)

      八、 JS操作页面样式

      读写style属性 样式

      

    div.style.backgroundColor = 'red';
    // 1.操作的为行间式
    // 2.可读可写
    // 3.具体属性名采用小驼峰命名法

      只读 计算后样式

      

    // eg: 背景颜色
    // 推荐
    getComputedStyle(页面元素对象,伪类).getPropertyValue('background-color');
    // 不推荐
    getComputedStyle(页面元素对象,伪类).backgroundColor;
    
    // IE9以下
    页面元素对象.currentStyle.getArribute('background-color');
    页面元素对象.currentStyle.backgroundColor;
    
    // 1.页面元素对象由JS选择器获取
    // 2.伪类没有的情况下用null填充
    // 3.计算后样式为只读
    // 4.该方式依旧可以获取行间式样式 (获取逻辑最后的样式)

      结合css操作样式

      

    页面元素对象.className = ""; // 清除类名
    页面元素对象.className = "类名";  //设置类名
    页面元素对象.className += "类名"; // 添加类名

      八、事件的两种绑定方式

      1、on事件绑定方式

      

    document.onclick = function() {
          console.log("文档点击"); 
    }
    // on事件只能绑定一个方式,重复绑定保留最后一次绑定的方法
    document.onclick = function() {
            console.log("文档点击");
    }
    // 事件的移除
    document.onclick = null;

      2、非on事件绑定方式

      

    document.addEventListener('click', function() {
          console.log('点击1');
    })
    document.addEventListener('click', function() {
           console.log('点击2');
    })
    // 非on事件可以同时绑定多个方法,被绑定的方法依次被执行
    // addEventListener第三个参数(true|false)决定冒泡的方式
    function fn() {}
    document.addEventListener('click', fn);
    // 事件的移除
    document.removeEventListener('click', fn);

      九、事件参数event

      存放事件信息的回调参数

      十、事件的冒泡与默认事件

      事件的冒泡:父子都具有点击事件,不处理的话,点击子级也会触发父级的点击事件

      

    <body id = "body">
        <div id = "sup">
            <div id = "sub"></div>
        </div>
    </body>
    
    <sript>
    sub.onclick = function(ev) {
            // 方式一
            ev.stopPropagation();
            console.log("sub click");        
    }
    sup.onclick = function (ev) {
            // 方式二
            ev.cancelBubble = true;
            console.log("sup click");    
    }
    body.onclick = function (ev) {
            console.log("sup click")
    }
    </script>            

      默认事件:取消默认的事件动作,如鼠标右键菜单

    <body id="body">
           <div id="sup">
            <div id="sub"></div>
        </div>
    </body>
    
    <script>
    sub.oncontextmenu = function (ev) {
        // 方式一
        ev.preventDefault();
        console.log("sub menu click");
    }
    sup.oncontextmenu = function (ev) {
        console.log("sup menu click");
        // 方式二
        return false;
    }
    body.oncontextmenu = function (ev) {
        console.log("body menu click");
    }
    </script>

      十一、鼠标事件

      

    onclick: 鼠标点击
    ondblclick: 鼠标双击
    onmousedown: 鼠标按下
    onmousemove: 鼠标移动
    onmouseup: 鼠标抬起
    onmouseover: 鼠标悬浮
    onmouseout: 鼠标移开
    oncontextmenu: 鼠标右键

      事件参数ev

    ev.clientX: 点击点x坐标
    ev.clientY: 点击点Y坐标

      十二、键盘事件

    onkeydown: 键盘按下
    onkeyup: 键盘抬起

    事件参数ev

    ev.keyCode: 按键编号
    ev.altKey: alt特殊按键
    ev.ctrlkey: ctrl特殊按键
    ev.shiftKey: shift特殊按键

      十三、表单事件

      

    onfocus: 获取焦点
    onblur: 失去焦点
    onselect: 文本被选中
    oninput: 值改变
    onchange: 值改变,且需要在失去焦点后才能触发
    onsubmit: 表单默认提交事件

      十四、文档事件

       文档事件由window调用

    onload: 页面加载成功
    onbeforeunload: 页面退出或刷新警告,需要设置回调函数返回值,返回值随意

      十五、图片事件

      

    onerror: 图片加载失败

      十六、页面事件

    onscroll: 页面滚动
    onresize: 页面尺寸调整
    window.scrollY:页面下滚距离

      十七、函数高级

      闭包

      

    function outer() {
        var data = {}
        function inner() {
            return data;
        }
        return inner;
    }
    // 闭包目的: 不允许提升变量作用域时,该函数的局部变量需要被其他函数使用
    // 闭包本质: 函数的嵌套,内层函数称之为闭包
    // 闭包的解决案例: 1.影响局部变量的生命周期,持久化局部变量;2.解决变量污染

      十八、循环绑定

    .html 文件
    <ul>
        <li>列表项</li>
        <li>列表项</li>
        <li>列表项</li>
    </ul>
    .js文件
    var lis = document.querySelector('li');
    for (var i = 0; i < lis.length; i++) {
        lis[i].onclick = function () {
            //打印列表项的索引
            console.log(i);
        }
    ]
    //变量污染
    //获取局部作用域解决
    //闭包解决
    //对象属性解决

      十九、面向对象JS

      1、属性与方法

      

    var obj = {}; | var obj = new Object();
    // 属性
    obj.prop = "";
    // 方法
    obj.func = function () {}
    // 删除属性与方法
    delete obj.prop
    delete obj.func

      2、类字典结构使用

      结构

      

    var dict = {name: "zero",age:18}

      拓展

    var dict = {"my-name":"zero",fn:function () {},fun() {}}

      使用

    dict.name | dict["my-name"] | dict.fn()

      3、构造函数 (ES5)

    function People(name,age) {
        this.name = name;
        this.age = age;
        this.eat = function() {
            return 'eat';
        }
    }

      4、类及集成(ES6)

    class People {
        // 构造器
        constructor (name, age) {
            this.name = name;
            this.age = age;
        }
        // 实例方法
        eat () {
            console.log('吃吃吃');
        }
        // 类方法
        static create () {
            console.log('诞生');
        }
    }

      

  • 相关阅读:
    MVCCache2.应用程序缓存(Cache:1.输出缓存[2].应用程序缓存)
    接口和抽象类的区别和作用(功能、用途、好处)
    MVCCache1.输出缓存(Cache:[1].输出缓存2.应用程序缓存)
    JAVA中为什么要使用接口,继承接口不是还要重写方法吗?为什么不直接写那些方法呢?:::接口的最主要的作用是达到统一访问
    枚举的意义,用途,作用,用法,作用场景
    C++ compile multiple cpp and header files via I. cpp1.cpp cpp2.cpp o
    C++retrieve array via returned pointer,traverse the array pointer without the array size
    C++ pass array as pointer and sort in bubble
    C write and read file via FILE and open method in a+ or r mode
    C++ connection mysql and retrieve select sql result
  • 原文地址:https://www.cnblogs.com/xiaocaiyang/p/10146153.html
Copyright © 2020-2023  润新知