• 快速上手系列:JavaScript


    第一章 基础语法
    1 javascript 的简介
    * 是基于对象和事件驱动的语言,应用于客户端。
      - 基于对象:
        ** 提供好了很多对象,可以直接拿过来使用
      - 事件驱动:
        ** html 做网站静态效果,javascript 动态效果
      - 客户端:专门指的是浏览器
    * 特点:
      (1) 交互性(信息的动态交互)
      (2) 安全性(不可以直接访问本地硬盘)
      (3) 跨平台性(只要是可以解析 js 的浏览器都可以执行,和平台无关)
    * javascript 和 java 的区别:(雷锋和雷锋塔)
      (1) javascript 是基于对象,java 面向对象
      (2) javascript 是弱类型语言,java 是强类型语言
        - 比如 java 里面不可以 int i = “10”;
        - js: var i = 10; var m = “10”;都可以
      (3) javascript 只需解析就可以执行,而 java 需要先编译成字节码文件,再执行。
    * javascript 的组成
      三部分组成:
        (1)ECMAScript
          a) ECMA: 欧洲计算机协会
          b) 由 ECMA 组织制定 js 的语法、语句……
        (2)BOM
          a) browser object model :浏览器对象模型
        (3)DOM
          a) document object model :文档对象模型
     
    2 js 和 html 的结合方式(两种)
    第一种:
      - 使用一个标签<script type=”text/javascript”> js 代码; </script>
    第二种:
      - 使用 script 标签,引入一个外部的 js 文件
        ** 创建一个 js 文件,写 js 代码,然后导入  - <script type=”text/javascript” src=”1.js”></script>
        ** 使用第二种方式的时候,就不要在 script 标签里写代码了,不会执行。
     
    3 js 的原始类型和声明变量
    ** java 的基本数据类型 byte short int long float double char boolean
     
    ** 定义变量 都使用关键字 var
    ** js 的原始类型(五个)
      - string:字符串
        *** var str = “abc”;
      - number: 数字类型
        ***var m=123;
      - boolean: true 和 false
        *** var flag = true;
      - null
        *** var date = new Date();
        *** 获取对象的引用,null 表示对象引用为空,所有对象的引用也是 object
      - undefined
        *** 定义一个变量,没有赋值
        *** var aa;
        ** typeof(); 查看当前变量的数据类型
     
    4 js 的语句
    - java 里的语句:
      ** if 判断
      ** switch 语句
      ** 循环 for while do-while
    - js 里面的这些语句
      ** if 判断语句
        条件如果直接写=号,那就是赋值操作。
      ** switch 语句
        与 java 中的一样。
      ** for 循环也和 java 中的一样,但要注意定义变量时使用 var,不要写成 java 的 int。
      ** i++ ++i 和 java 里面一样
     
    5 js 的运算符
    ** 运算符和 java 里一样
    ** js 里面不区分整数和小数
      var j = 123;
      Alert(j/1000*1000);
      在 java 里得到结果是 0;在 js 里得到结果是 123.
    ** 字符串的相加和相减的操作
      var str = “123”;
      *** 如果相加的时候,做的是字符串连接
      *** 如果相减,做的事相减的运算
    * 提示 NaN:表示不是一个数字
    ** boolean 类型也可以操作
      ***如果设置成 true,相当于这个值是 1
      ***如果设置成 false,相当于这个值是 0
    ** ==和===区别
      ** 做判断
        ** ==比较的只是值
        ** === 比较的是值和类型
    ** 引入知识
      直接向页面输出的语句(可以把内容显示在页面上)
      document.write(“aaa”);
      document.write(“<hr/>”);
      可以向页面输出变量,固定值和 html 代码
     
    6 js 的数组
    * 定义方式(三种)
      第一种: var arr = [1,2,3] ; var arr = [1,”4”,true] ;
      第二种: 使用内置对象 Array 对象
        var arr1 =new Array(5) ;//定义一个数组,长度是 5
        arr1[0] = “1”;
      第三种: 使用内置对象 Array
        var arr2 = new Array(3,4,5) ; //定义一个数组,元素是 3,4,5
    * length:获取数组长度
    * 数组可以存放不同数据类型的数据
     
    7 js 的函数
    *在 js 里面定义函数(方法)有三种方式
      ** 第一种方式:
        *** 使用到一个关键字 function
    function 方法名(参数列表){
       方法体;
       返回值可有可无(根据实际需要)
    }
    //使用第一种方式创建函数:
    function test(){
       alert(“qqq”);
    }
    //调用方法
    //test();
    //定义一个有参数的方法 实现两个数相加
    function add1(a,b){
    var sum = a+b;
    alert(sum);
    }
    //add1(2,3);
    //有返回值的效果
    function add2(a,b,c){
    var sum1 = a+b+c;
    return sum1;
    }
    alert( add2(3,4,5) );
    ** 第二种方式:
    *** 匿名函数
    var add = function(参数列表){
    方法体和返回值;
    }
    //第二种方式创建函数:
    var add3 = function(m,n){
    alert(m+n);
    }
    //调用方法
    add3(5,6);
    ** 第三种方式:(用的少,了解)
    *** 动态函数
    //使用到 js 里面的一个内置对象 Function
    var add = new Function (“参数列表”,”方法体和返回值”);
    8 js 的全局变量和局部变量
    全局变量:在 script 标签里面定义一个变量,这个变量在页面中 js 部分都可以使用
      - 可以在方法外部使用,在方法内部使用,在另一个 script 标签使用
    局部变量:在方法内部定义一个变量,只能在方法内部使用
     
    9 script 标签放置的位置
    建议把 script 标签放到</body>后面
     
    10 js 的 String 对象
    ** 创建 String 对象
      ***var str = “abc”;
    ** 方法和属性(详见 w3school)
      ***属性 length: 字符串长度
      ***方法
        (1)与 html 相关的方法
          - bold():加粗
          - fontcolor():设置字符串颜色
          - fontsize():设置字体的大小
          - link():将字符串显示成超链接
            *** str4.link(“hello.html”)
          - sub() sup():下标和上标
        (2)与 java 相似的方法
          - concat() : 连接字符串
          - charAt() :返回指定位置的字符串。字符位置不存在,返回空字符串
          - indexOf() :返回字符串位置。字符不存在,返回-1
          - split() : 切分字符串,成数组
          - replace(): 替换字符串
          - substr():从第几位开始,向后截取几位
          - substring():从第几位开始,到第几位结束,包左不包
      
    11 js 的 Array 对象
    ** 方法(常用)
      - concat():数组的连接
      - join() : 根据指定的字符分割数组。如 document.write( arr.join(“-”) );
      - push() : 向数组末尾添加元素,返回数组的新的长度(如果添加一个数组,那么被添加的整个数组会被看作一个元素)
      - pop() : 删除最后一个元素,并返回删除的那个元素
      - reverse() : 颠倒数组中的元素的顺序
     
    12 js 的 Date 对象
    ** 在 java 里面获取当前时间
      Date date = new Date();
      //格式化
      //toLocaleString(); 直接格式化为中式表示法。
    ** js 里面获取当前时间
      var date = new Date() ;
      //转换成习惯格式
      Document.write( date.toLocaleString() );
      **获取当前年:getFullYear()
      **获取当前月:getMonth()
        ***返回的是 0-11 月,如果得到精确的值,加 1
        *** var date1 = date.getMonth()+1;
      **获取当前的星期:getDay()
        ***返回的是 0-6.
        ***外国人,把星期日作为一周的第一天,星期日返回的是 0,而星期一到星期六,返回的是 1-6
      **获取当前的日:getDate()
        ***返回当前的天 1-31
      **获取当前的小时:getHours()
      **获取当前的分钟:getMinutes()
      **获取当前的秒:getSeconds()
      **获取毫秒数:getTime()
        ***返回的是 1970.01.01 至今的毫秒数
        ***应用场景:
        ***使用毫秒数处理缓存的结果
     
    13 js 的 Math 对象
    **数学的运算
    **里面的都是静态方法,可以直接使用 Math.方法()
      ** ceil(x):向上舍入(进一法)
      ** floor(x):向下舍入
      ** round(x):四舍五入
      ** random():得到随机数(伪随机数) - 得到 0-9 的随机数
        Math.random()*10
        Math.floor(Math.random()*10)
      
    14 js 的全局函数
    * 由于不属于任何一个对象,直接写名称使用。(要执行的内容写在括号里面)
      ** eval() : 执行 js 代码(如果字符串是一个 js 代码,使用此方法直接执行,也就是说,此方法会自动识别字符串里的 js 方法并执行了)
        *** var str = “alert(‘1234’);”;
        alert(str);//输出:alert(‘1234’);
        eval(str);//输出:1234
      ** encodeURI() :对字符进行编码
        decodeURI() :对字符进行解码
        encodeURIComponent() 和 decodeURIComponent() 跟上面俩功能一样,只是少了几个不编码字符。
      ** isNaN() : 判断当前字符串是否是数字(NaN 的意思是:不是数字)
        -- var str2 = “aaaa”;
         alert( isNaN(str2) );
         *** 如果是数字,返回 false
         *** 如果不是数字,返回 true
      ** parseInt() : 类型转换
      *** var str3 = “123”;
      document.write( parseInt(str3)+1 );//输出:124
    15 js的函数的重载
    ** js 的重载是否存在? 不存在
    ** 调用最后一个方法
    ** 把传递的参数保存到了 arguments 数组里面
    ** js 里面是否存在重载?(面试题目)
    (1)js 里面不存在重载。
    (2)但是可以通过其他方式模拟重载的效果(通过 arguments数组来实现)
    function add(){
      if(arguments.length==2){
        return arguments[0]+arguments[1];
      }
    }
    alert( add(1,2) );输出 3
     
    第二章 javascript的 bom对象
     
    ** bom:browser object model 浏览器对象模型
    ** 有哪些对象?
      *** navigator: 获取客户机的信息(浏览器的信息)
        - navigator.appName
        - document.write(navigator.appName);//输出:浏览器的名字
      *** screen:获取屏幕信息
        - document.write(screen.width);//输出宽度
        - document.write(screen.height);//输出高度
      *** location:请求 url 地址
        - href 属性 *** 获取到请求的 url 地址
        - document.write( location.href );
        **** 设置 url 地址
        - 页面上安置一个按钮,按钮上绑定一个事件,当我点击这个按钮,页面可以跳转到另外一个界面
          - location.href = “hello.html”; //这是 function 里的方法体
          *** <input type=”button” value=”跳转” onclick=” href1(); ”/>
          - 鼠标点击事件 onclick = “js 的方法; ”
      *** history :请求的 url 的历史记录
        - 到访问的上一个页面
          history.back() ;
          history.go(-1) ;
        - 到访问的下一个页面
          history.forward() ;
          history.go(1) ;
      ****window:
        * 窗口对象
        * 顶层对象(所有的 bom 对象都是在 window 里面操作的)
          ** 方法
            - window.alert() : 页面弹出一个框,显示内容
          ** 简写 alert()
            - confirm() : 确认框
            - var flag = window.confirm(“显示的内容”);//返回 boolean类型
            - prompt() : 输入的对话框
            - window.prompt( “显示的内容” , ”输入框里的默认值” ) ;
            - open() : 打开一个新的窗口
          ** open(“打开的新窗口的 url 地址”, ” ”,”窗口特征,比如宽高”)
            - 创建一个按钮,点击这个按钮,打开一个新的窗口
            - window.open(“hello.html”, “ “ ,”width=200,height=100”);
            - close() : 关闭窗口(浏览器兼容性比较差)
            - window.close();
            - 做定时器
          ** setInterval ( “js 代码”, 毫秒数)
            - window.setInterval (“alert(‘123’);” , 3000);//表示每三秒,执行一次 alert 方法
          ** setTimeout(“js 代码”, 毫秒数)
            - 表示在毫秒数之后执行,但是只会执行一次
          ** clearInteval() : 清除 setInterval 设置的定时器
            var id1 = setInterval (“alert(‘123’);”,3000);//通过setInterval会有个返回值
            clearInterval (id1);//清除它
          ** clearTimeout() : 清除 setTimeout 设置的定时器
            var id2 = setTimeout (“alert(‘abc’),4000);
            clearTimeout (id2);
     
    第三章 javascript的 dom对象
     
    * dom: document object model 文档对象模型
      ** 文档:超文本文档(超文本标记文档)html 、xml
      ** 对象:提供了属性和方法
      ** 模型:使用属性和方法操作超文本标记型文档
        *** 可以使用 js 里面的 dom 里面提供的对象,使用这些对象的属性和方法,对标记型文档进行操作
        *** 要对标记型文档进行操作,首先需要对标记型文档里面的所以内容封装成对象
          -- 需要把 html 里面的标签、属性、文本内容都封装成对象
        *** 再解析标记型文档,解析过程如下
          根据 html 的层级结构,在内存中分配一个树形结构,需要把 html 中的每部分封装成对象:
            - document 对象:整个文档
            - element 对象:标签对象
            - 属性对象
            - 文本对象
              -- Node 节点对象:这个对象是这些对象的父对象
        *** 如果在对象里面找不到想要的方法,就去 Node 对象里找
     
    ** DOM 模型历史:
      DOM level 1:将 html 文档封装成对象。
      DOM level 2:在 level 1 的基础上添加新功能,如对事件和 css 样式的支持。
      DOM level 3:支持 xml1.0 的一些新特性。
    *DHTML:是很多技术的简称
      ** html:封装数据
      ** css:属性值设置样式
      ** dom:操作 html 文档(标记型文档)
      **javascript:专门指的是 js 的语法语句(ECMAScript)
     
    1 document 对象
    * 表示整个的文档
      ** 常用方法
        *** write()方法:
          (1)向页面输出变量(值)
          (2)向页面输出 html 代码
        *** getElementById() ;
          - 通过 id 得到元素(标签)
          - //使用 getElementById 得到 input 标签
            var input1 = document.getElementById(“nameid”);//传递的参数是标签里面的 id 值
          //得到 input 里面的 value 值
            alert( input1.name ); // 标签对象.属性名称
          //向 input 里面设置一个值 value
            Input1.value = “bbb”;
        *** getElementsByName()
          - 通过标签的 name 的属性值得到标签
          - 返回的是一个集合(数组)
          - //使用 getElementsByName 得到标签     
    var inputs = document.getElementsByName(“name1”);//传递的参数是标签里的 name 值
    //alert(inputs.length);
    //遍历数组 for(var i = 0;i<inputs.length;i++){ //通过遍历数组,得到每个标签里面的具体值 var input1 = inputs[i]; //每次循环得到 input 对象,赋值到 input1 里面 alert(input1.value); //得到每个 input 标签里面的 value 值 }
        *** getElementsByTagName(“标签名称”)
          - 通过标签名称得到元素
          - // 演示 getElementsByName
    var inputs1 = document.getElementsByTagName(“input”); //传递的参数是标签名称
    // alert(inputs1.length);
    //遍历数组,得到每个 input 标签
    for(var m=0;m<inputs1.length;m++){
    //得到每个 input 标签
    var input1 = inputs1(m);
    //得到 value 值
    alert(input1.value);
    }
    2 document 相关案例的补充方法:
      document.createElement(“标签名”) 创建相应标签
      document.createTextNode(“文本内容”) 创建文本
      要添加的.appendChild(被添加的对象) 添加子对象
     
    3 元素对象(element 对象)
    ** 要操作 element 对象,首先必须要获取到 element
      - 使用 document 里面相应的方法获取
    ** 方法
      *** 获取属性里面的值
      getAttribute(“属性名称”)
        - var input1 = document.getElementById(“inputid”);
        //alert(input1.value);
        alert(input1.getAttribute(“value”));//此方法的优点在于,通过双引号,可以获取关键字的值。
      *** 设置属性的值
        input1.setAttribute(“class”,”haha”);//前面是属性名,后面是要设的值(也可以写成前面事件、后面方法)
      *** 删除属性
        input1.removeAttribute(“name”);
        ** 不能删除 value
    ** 想要获取标签下面的子标签,使用属性 childNodes,但是这个属性兼容性很差
    ** 获 得 标 签 下 面 子 标 签 的 唯 一 有 效 方 法 , 使 用 getElementByTagName 方法
        //获取 ul 下面的子标签
        //var lis = ulll.childNodes;
        //alert( lis.length );
        var lis = ulll.getElementsByTagName(“li”);
        alert(lis.length);
    4 Node 对象属性
    * nodeName
    * nodeType
    * nodeValue
    * 使用 dom 解析 html 时候,需要 html 里面的标签,属性和文本都封装成对象
    * 标签节点对应的值
      nodeType: 1
      nodeName:大写标签名称 比如 SPAN
      nodeValue:null
    * 属性节点对应的值
      nodeType:2
      nodeName: 属性名称
      nodeValue: 属性的值
    * 文本节点对应的值
      nodeType: 3
      nodeName: #text
      nodeValue: 文本内容
     
    5 Node 对象属性
    * 父节点
      - 如 ul 是 li 的父节点
      - parentNode 得到父节点
    * 子节点
      - 如 li 是 ul 的子节点
      - childNodes: 得到所有子节点,但是兼容性很差
      - firstChild: 获取第一个子节点
      -//得到 ul
        var ul1 = document.getElementById( “ulid” ) ;
        //第一个子节点
        var li1 = ul1.firstChild;
      - lastChild: 获取最后一个子节点
    * 同辈节点
      - nextSibling: 返回一个给定节点的下一个兄弟节点
      - previousSiling: 返回一个给定节点的上一个兄弟节点
    6 操作 DOM 节点树
    * 插入节点
      ** appendChild()
        - 添加子节点到末尾
        - 特点:类似于剪切粘贴的效果
      ** insertBefore( newNode, oldNode )
        - 在某个节点之前插入一个新的节点
        - 通过父节点插入
          // 如 ul.insertBefore( li2,li3);
        - 两个参数
          * 要插入的节点
          * 在谁之前插入
        - 插入一个节点,节点不存在,创建(标准的固定模式)
          1、创建标签
          2、创建文本
          3、把文本添加到标签下面
          // 没有 insertAfter()方法
    * 删除节点
      ** removeChild()
        - 通过父节点删除,不能自己删除自己
        // 如 ul.removeChild( li2 );
    * 替换节点
      ** replaceChild( newNode, oldNode )
        - 不能自己替换自己,通过父节点替换(跟插入的操作相似)
        - 两个参数
          ** 第一个参数:新的节点(替换成的节点)
          ** 第二个参数:旧的节点(被替换的节点)
    * cloneNode( boolean) : 复制节点
        - 复制完后还是通过父节点去 appendChild()添加
        - 如 var ul2 = ul1.cloneNote( true );
    7 innerHTML 属性
    - 这个属性不是 dom 的组成部分,但是大多数浏览器都支持
    第一个作用:获取文本内容
      *** //获取 span 标签
       var span1 = document.getElementById( “sid” );
       alert( span1.innerHTML );
    第二个作用:向标签里面设置内容(可以是 html 代码)
      *** //向 div 里面设置内容<h1>AAA</h1>
        //获取到 div
        var div1 = document.getElementById( “div1” );
        //设置内容
        div1.innerHTML = “<h1>AAA</h1>”;
      *** 练习 :向 div 里添加一个表格
        var tab = “<table>”;
        tab += “</table>”;
        //相当于 var tab = “<table></table>”;
        div1.innerHTML = tab;
     
    8 其他知识点:
    * 复选框被选中: id.checked = true; (否则 false)
    * 省市联动:
      *创建一个页面,有两个下拉选择框
      *在第一个下拉框里面有一个事件:改变事件 onchange 事件
        -方法 add(this.value);表示当前改变的 option 里面的 value 值
      写这道题得到的教训:
        (不知为何,这个 add 方法要加数字才行,如 add1(),不然显示参数错误)
        (js 代码要写一层 alert 一层,不然写完再调试有错会累死人的)
        (每层得到的值都要 var 一个新变量去接收,不然会出错,自己还看不出来)
    *创建一个二维数组,存储数据
    * 每个数组中第一个元素是国家名称,后面的元素是国家里面的城市
      /*  1、遍历二维数组
        2、得到也是一个数组(国家对应关系)
        3、拿到数组中的第一个值和传递过来的值作比较
        4、如果相同,获取到第一个值后面的元素
        5、得到 city 的 select
        6、添加过去(使用)appendChild 方法
        - 创建 option(三步) */
      注意:由于每次都要向 city 里面添加 option,第二次添加,会追加。所以每次添加前,判断一下 city 里面是否有 option,如果有,删除
     
    9 表单提交方式
    * 使用 submit 提交
    <form>
    ……
    <input type=”submit”/>
    </form>
    * 使用 button 提交表单
    - 代码
     //实现提交方法
    function form1() {
    //获取 form
    var form1 = document.getElementById( “form1” );
    //设置 action
    form1.action = “hello.html”;
    //提交 form 表单
    form1.submit();
    }
    * 使用超链接提交
    - 代码
    <a href = “hello.html ? username = 123456”>使用超链接提交</a>
    (问号后面是要提交的信息)
    * onclick : 鼠标点击事件
    onchange :改变内容(一般和 select 一起使用)
    onfocus:得到焦点
    onblur:失去焦点
    (比如 input 的文本输入,设置这两个方法,点击输入框,value=””,文
    本框清空,点别的地方,value=”默认文字” ,文本框恢复显示默认文本)
    注意点:
    1、js 中 的 方法 也 可以用 href 调用 , 比如做 图 片 轮播 案 例时, 出 现 :href=”javascript:chang(1)”
    2、找父节点的小方法:
    例如
    var obj ;
    obj.parentNode.removeChild( obj );
    此外想获取某些标签都不需要用 id,例如直接写 document.body
    3、这个字符串拼接时的引号是一大问题:
    双引号里面是一般是单引号(这里面可以再写双引号)
    或者 ” 内容” (然后内容里再单引号,再往里则双引号)。
    例如: onclick = ” 方法名( ‘ 字符串 ”+变量值+ ” ‘ ) ”
    总之,要想在字符串里拼入数值,引号得加到数值变色才行。
    我觉得,在多层引号的情况下,一般都是单引号里面是字符串,双引号里面是数值
  • 相关阅读:
    POJ-1182 食物链
    P1020 导弹拦截
    牛客寒假训练营2-C算概率
    牛客寒假训练营2-H施魔法
    牛客寒假算法训练营2-建通道
    D
    C
    A
    B
    【Luogu3366】【模板】最小生成树
  • 原文地址:https://www.cnblogs.com/zhaot1993/p/13036625.html
Copyright © 2020-2023  润新知