• python全栈开发day44-js、DOM、BOM


    JS的三大部分

    一、ECMAJavaScript基础语法:

        1.javascript的引入方式

           1) 行内式

            <script>

              alert(1)

            </script>

           2) 引入式

            <script src='test.js'> </script>

        2.javascript基础语法

          1) 几个简单的函数

            alert()、 # 警告对话框

            confirm()、# 确认对话框

            prompt()、 # 输入对话框,接收的为字符串

            console.log() #  控制台 输出

            console.dir() #  可以显示一个对象的所有属性和方法

            document.write() # 向网页文档中输出了一段文字

            typeof(变量) # 类型查询

            语法规则:JavaScript对换行、缩进、空格不敏感,语句末尾加分号,单行注释// 多行注释/*  */

           2) 直接量、变量

            (1) 直接量:数字99和字符串“99”  

            (2) 变量的定义、赋值、命名规范

               var a ;

               a = 1 ;

    ·           变量名的命名规范:只能由英语字母、数字、下划线、美元符号$构成,且不能以数字开头,并且不能是JavaScript保留字。并且区分大小写。

                Camel 标记法

    首字母是小写的,接下来的字母都以大写字符开头。例如:
    var myTestValue = 0, mySecondValue = "hi";
    Pascal 标记法
    首字母是大写的,接下来的字母都以大写字符开头。例如:
    Var MyTestValue = 0, MySecondValue = "hi";
    匈牙利类型标记法
    在以 Pascal 标记法命名的变量前附加一个小写字母(或小写字母序列),说明该变量的类型。例如,i 表示整数,s 表示字符串,如下所示“
    Var iMyTestValue = 0, sMySecondValue = "hi";
    变量名书写种类
     

          3) 数据类型

            基础数据类型:

            String:模板字符串·模板字符串&{name}·

            Number:

              Number.MAX_VALUE,Number.MIN_VALUE.

              NaN不等于NaN

              isNaN('test') #true

              Infinity

            Boolean:

            Null:

            Undefined:

            引用数据类型:

             Array:数组

              (1) 数组的创建:

                字面量方式:var a = ['a','b']

                构造函数:var a = new Array();

               (2) 赋值

                a[0] = 'a';

                a[1] = 'b';

                (3) 方法:

                 concat():把几个数组合并成一个数组;

                 join():返回字符串,将数组中的元素,用指定的字符串连接起来

                 pop():删除数组最后一个元素并返回

                                                   push():向数组的末尾添加一个或更多元素,并返回新的长度。

                 shift() :删除并返回数组的第一个元素;

                    unshift():向元组的开头添加一个或多个元素,并返回新数组的长度。

                 sort():对数组的数据进行排序。

                    reverse():颠倒数组中的元素的顺序。

                 slice():切片,左闭右开

                 splice(): 删除元素,个数,添加新元素。

                 toString():将数组中所有的元素合在一块用逗号隔开,便构成一个长字符串。

                   isArray():

                                                  indexOf(): 索引位置或-1

               (4) 属性

                  length

                  prototype     

             String:

               (1) 创建

               (2) 赋值

               (3) 属性

                  (4) 方法

                 charAt() : 返回指定索引的位置的字符;

                 concat():返回新字符串,将两个或多个字符串拼接。

                 match():返回正则表达式模式对字符串进行查找,并将包含查找结果作为结果返回。

                 replace(a,b) 字符串b替换a

                 search() 指明是否存在相应的匹配,存在则返回这个匹配距离字符串开始的偏移量。如果没有找到匹配,返回-1

                 slice():切片

                 split('a',1):分割字符串,并制定返回数组的长度

                 substr():截取子字符串

                 toUpperCase():

                 toLowerCase():

             Date:

              1.创建,只有构造方法一个方式,Date()

              2.方法

                   getDate():(1-31)一个月的第几天

                 getDay():(0-6)一个星期的第几天

                getMonth():(0-11)一年中的第几个月

                getYear():四位数年份

               getHours():

               getMinutes():

               getSeconds():

             mydata.toLocalString()           

             Object:protoType

             Math:

              Math.floor():

                .ceil()

                .max(a,b)

                .min(a,b)

                random() 0~1包含0不包含1

                  max-min之间的随机数:min+Math.random()*(max-min)

          4) 数据类型转换

        • 数字 + 字符串:数字转换为字符串
        • 数字 + 布尔值:true转换为1,false转换为0
        • 字符串 + 布尔值:布尔值转换为字符串true或false
        • 转换成字符串:toString()
        • 转换成数字:parseInt()
        • 转化成浮点数:parseFloat()
        • 强制类型转换:String()、Boolean()、Number()

          5) 流程控制

           #  if(){}else{}

           # if(){}else if(){}else{}

           # && ||

           # while(){}

           # do{}while()

           # for(var i=0;i<10;i++){}、

            # switch(条件){  // 注意case穿透问题

              case 1:

                                               执行语句;

                break;

              case 2:        

                         执行语句;

                break;

              。。。。。。。。

              default:

                 执行语句;

              }

            6)  函数

               避免重复,让编程模块化。

               函数定义的几种形式:

               function 函数名(){};

                 var 函数名= function(){};

               箭头形式定义

                  var f=v=>v 等同于var f = function(v){return V;};

                  var sum=(sum1,sum2)=>sum1+sum2;

                                                    等同于:

                 var sum = function(sum1,sum2){

                            return sum1+sum2;};

               函数的实参数量可以大于形参数量。

               引申:定义类?名字首字母大写,伪面向对象。

                  function  Add(){};

                  var a = new Add()

            7) 伪数组

              有数据的长度和索引,但是没有数组的方法。

    fn(2,4);
    fn(2,4,6);
    
    fn(2,4,6,8);
    
    function fn(a,b,c) {
    
    console.log(arguments);
    
    console.log(fn.length); //获取形参的个数
    
    console.log(arguments.length); //获取实参的个数
    
    console.log("----------------");
    
    }
     var array = [1,2,3,4,5,6];
    
        array.splice(0);      //方式1:删除数组中所有项目
        array.length = 0;     //方式1:length属性可以赋值,在其它语言中length是只读
        array = [];           //方式3:推荐

                           

    二、DOM 文档对象模型,操作网页上的元素的API。

      (一)、事件

          JS是以事件驱动为核心的一门语言。

         事件的三要素:

          事件源、事件、事件驱动程序。

         常见事件如下:

          onclick:鼠标单击

          ondblclick:鼠标双击

          onmouseover:鼠标悬停

          onmouseout:鼠标移出

          onkeyup:按下并释放键盘上的一个键时触发

          onchange:文本内容或下拉菜单中的选项发送改变

          onfocus:获取焦点,表示文本框等获得鼠标光标

          onblur:失去焦点,表示文本框等失去鼠标光标

          onload:网页文档加载事件

          onunload:关闭网页时

          onsubmit:表单提交事件、

            onreset:重置表单时。

        1.获取事件源的方式(DOM节点的获取)

          var div1 = document.getElementById("box1");      //方式一:通过id获取单个标签

          var arr1 = document.getElementsByTagName("div1");     //方式二:通过 标签名 获得 标签数组,所以有s
          var arr2 = document.getElementsByClassName("hehe");  //方式三:通过 类名 获得 标签数组,所以有s

        2.绑定事件的方式

          1) 直接绑定匿名函数

          div1.onclick=function(){};

          2) 先单独定义函数,再绑定(注意函数名不带括号)

             div.onclick = fn;

                          function fn(){};

         3) 行内绑定(绑定函数名fn())  

          <div id="box1" onclick="fn()"></div>

        3.事件驱动程序

          1) 操作标签属性和样式

            注意两点:

            (1) 在js里写属性值时,要用引号

             (2) 在js里写属性名 -变成驼峰形式,backgroud-color->backgroudColor

             标签自带属性class-》className

           2) onload事件

            当文档加载(先文本后图片)完毕的时候,触发onload事件        

    有一点我们要知道:js的加载是和html同步加载的。因此,如果使用元素在定义元素之前,容易报错。这个时候,onload事件就能派上用场了,我们可以把使用元素的代码放在onload里,就能保证这段代码是最后执行。

    建议是:整个页面上所有元素加载完毕在执行js内容。所以,window.onload可以预防使用标签在定义标签之前。

      (二)、DOM

    1.DOM树

      1) 节点

       元素节点:HTML标签

          文本节点:标签中的文字(比如标签之间的空格、换行)

        属性节点:标签的属性

            整个html文档是一个文档节点。所有的节点都是object

     2) DOM节点有啥用?  

          • 找对象(元素节点)

          • 设置元素的属性值

          • 设置元素的样式

          • 动态创建和删除元素

          • 事件的触发响应:事件源、事件、事件的驱动程序


             (3)DOM节点的三种获取方式

             (4) DOM访问关系的获取

                父节点:

                  parentNode

                兄弟节点:

                  nextSibling

                  nextElementSibling

                  previousSibling

                  previousElementSibling

                                               子节点:

                  firstChild

                  firstElementChild

                  lastChild

                  lastElementChild

                所有子节点:

                  childNodes

                  children

               多种浏览器支持方式:下一个兄弟节点 = 节点.nextElementSibling || 节点.nextSibling

               节点自己.parentNode.children[index]; //随意得到兄弟节点

             这里讲一下nodeType。

    nodeType == 1 表示的是元素节点(标签) 。记住:元素就是标签。

    nodeType == 2 表示是属性节点 了解

    nodeType == 3 是文本节点 了解

     

     

     

     

                    新的标签(元素节点) = document.createElement("标签名");

          插入节点:

        两种方式:    

                     父节点.appendChild(新的子节点);
                      父节点.insertBefore(新的子节点,作为参考的子节点);

      删除节点:

        父节点.removeChild(子节点);

        复制节点:

                    要复制的节点.cloneNode();       //括号里不带参数和带参数false,效果是一样的。
    
                    要复制的节点.cloneNode(true);

    (6) 设置节点属性:

       a.获取节点的属性值

         方式1:    

                        元素节点.属性;
                           元素节点[属性];

              方式2: 元素节点.getAttribute("属性名称");

       b.设置节点属性:

         1. myNode.src = "images/2.jpg" //修改src的属性值

                        myNode.className = "image2-box";  //修改class的name
                      2.
    元素节点.setAttribute(属性名, 新的属性值);
                    c.删除节点属性
                    
                      
    元素节点.removeAttribute(属性名);
     

      

      三、BOM

    四、预习和扩展

        1.innerHTML、innerText 、value

         innerHTML:获取的是当前元素下的标签和文本 +=‘<a href="#">haha</a>’;

         innerText:获取的是所有的文本 +='增加文本内容'

         value:获取的是input元素输入内容。

        2 创建对象的几种常用方式

      1.使用Object或对象字面量创建对象

      2.工厂模式创建对象

      3.构造函数模式创建对象

      4.原型模式创建对象

    3. 考试题练习:      

          47、[1,2,3]+[4,5,6]的结果是多少?

            两个列表相加,等价于extend     

          48、提高python运行效率的方法

      1、使用生成器,因为可以节约大量内存

      2、循环代码优化,避免过多重复代码的执行

      3、核心模块用Cython  PyPy等,提高效率

      4、多进程、多线程、协程

      5、多个if elif条件判断,可以把最有可能先发生的条件放到前面写,这样可以减少程序判断的次数,提高效率

     

    4. this的四种用法:

            this是Javascript语言的一个关键字。

            它代表函数运行时,自动生成的一个内部对象,只能在函数内部使用。比如, 

            function test(){

              this.x = 1;

            }

            随着函数使用场合的不同,this的值会发生变化但是有一个总的原则,那就是this指的是,调用函数的那个对象。

     

    1.在一般函数方法中使用 this 指代全局对象
    
    1
    2
    3
    4
    5
    function test(){
        this.x = 1;
        alert(this.x);
      }
      test(); // 1
    2.作为对象方法调用,this 指代上级对象
    
    复制代码
    function test(){
      alert(this.x);
    }
    var o = {};
    o.x = 1;
    o.m = test;
    o.m(); // 1
    复制代码
    3.作为构造函数调用,this 指代new 出的对象
    
    复制代码
      function test(){
        this.x = 1;
      }
      var o = new test();
      alert(o.x); // 1
        //运行结果为1。为了表明这时this不是全局对象,我对代码做一些改变:
      var x = 2;
      function test(){
        this.x = 1;
      }
      var o = new test();
      alert(x); //2
    复制代码
     
    
    4.apply 调用 ,apply方法作用是改变函数的调用对象,此方法的第一个参数为改变后调用这个函数的对象,this指代第一个参数
    
    复制代码
      var x = 0;
      function test(){
        alert(this.x);
      }
      var o={};
      o.x = 1;
      o.m = test;
      o.m.apply(); //0
    //apply()的参数为空时,默认调用全局对象。因此,这时的运行结果为0,证明this指的是全局对象。如果把最后一行代码修改为
    
      o.m.apply(o); //1
    this的四种用法

      

  • 相关阅读:
    Power of Cryptography(用double的泰勒公式可行分析)
    Radar Installation(贪心)
    The Pilots Brothers' refrigerator(dfs)
    Flip Game(dfs)
    Connect the Cities(MST prim)
    Constructing Roads (MST)
    suoi16 随机合并试卷 (dp)
    suoi14 子树查找 (dfs)
    nowcoder106I Neat Tree (单调栈)
    luogu2296 [NOIp2014]寻找道路 (bfs)
  • 原文地址:https://www.cnblogs.com/wuchenggong/p/9254132.html
Copyright © 2020-2023  润新知