JS学习笔记

JavaScript

作用

  用于给页面添加动态效果

语言特点

  * 属于脚本语言, 不需要编译直接解析执行
  * 属于弱类型语言, 变量声明不需要指定类型
    int x = 10; String s = "abc"; x = "xyz"; 报错
    let x = 10; let s = "abc"; x="xyz" 不报错
  * 基于面向对象, 和面向对象语言类似
  * 安全性高: JavaScript语言只能访问当前设备中浏览器内部的数据, 浏览器以外的数据禁止访问.
  * 交互性强: JavaScript语言直接嵌入到html页面中,该语言值运行在客户端浏览器中的语言, 可以和用户直接进行交互

如何在HTML页面中添加JS代码

  * 内联: 在标签的事件属性中添加js代码,
    事件: 是系统给提供的一些特定时间点.
    点击事件: 当用户点击元素时触发的时间点
    <input type="button" value="按钮" onclick="alert('按钮被点击了')">
  * 内部: 在html页面中的任意位置添加script标签 在标签体内写js代码.
  * 外部: 在单独的js文件中写js代码, 在html页面中通过script标签的src引入js文件, script标签如果引入了文件后 就不能在标签体内继续写js代码,如果一个页面引入了js文件还需要写js代码 则再创建一个script标签.

JavaScript语法

  变量, 数据类型,运算符, 各种语句, 方法, 面向对象

变量

  *JS属于弱类型语言

    *Java: int x=10; String s = "abc"; x="xyz" 类型不匹配报错 Person p = new Person();
    *JS: let x=10; let s ="abc"; x="xyz";不报错 let p= new Person();

  *声明变量时使用var和let的区别

    推荐使用let , 使用let声明变量的作用域和Java类似
    使用var声明变量, 变量属于全局变量.  
      for(int i=0;i<10;i++){
      int y = i+1;
        }
      int z = i; //java中 i出了for循环 则不能访问 因为出了作用域
    
      for(let i=0;i<10;i++){} //如果使用let 和java中作用域一样
      for(var i=0;i<10;i++){
        }
      let z = i; //使用var声明的变量 可以全局访问

数据类型

  * JavaScript中不分基本数据类型和引用类型,统称对象类型
  * 几种常见的对象类型:
    * 数值: number 相当于Java中所有数值类型的总和
    * 字符串: string 和java类似, 单引号和双引号修饰的都是字符串
    * 布尔值: boolean true/false
    * 未定义: undefifined
      当变量只声明不赋值时对象为undefifined
      let x = 10; number

      let s = "abc"; string

      let y; undefifined
    * typeof 变量:获取变量的对象类型

运算符

  * 和Java大体相同
  * 算术运算符: + - * / % 除法会自动转换整数或小数
    int x = 5; int y= 2 ; int z = x/y; z=? 2
    let x = 5; let y=2; let z=x/y; z=? 2.5
    let x = 6; let y=2; let z=x/y; z=? 3
  * 关系运算符: > < >= <= != == ===
    ==: 先统一等号两遍的类型再比较值
      "666"==666 true
    ===: 先比较类型 类型一样之后再比较值
      "666"===666 false
  * 逻辑运算符 : && || !
  * 赋值运算符: = += -= *= /= %= ++ --
  * 三目运算符: 条件?值1:值2

各种语句

  * if else for while do-while switch case 用法和java一样
  * for循环中的 int i 改成let i

方法声明

  格式:

  * java格式:
      public 返回值类型 方法名(参数列表)
      {方法体}
  * JavaScript格式:
      function 方法名(参数列){方法体}

  声明常见的四种方法:

  * 无参无返回值
  * 无参有返回值
  * 有参无返回值
  * 有参有返回值

  三种声明方法的格式:

  * function 方法名(参数列){方法体}
  * let 方法名 = function(参数列){方法体}
  * let 方法名 = new Function("参数1","参数2","....","方法体");
  
<script>
//第一种声明方法的方式
    //声明无参无返回值
    function fn1(){
        alert("fn1");
    }
    //调用方法
    //fn1();

    //声明有参无返回值
    function fn2(name,age){
        alert(name+":"+age);
    }
    //fn2("刘德华",17);
    //无参有返回值
    function fn3(){
        return "我是返回值";
    }
    //let info=fn3();
    //alert(info)
    //有参有返回值
    function fn4(x,y){
        return x*y;
    }
    //let info=fn4(5,9);
    //alert(info);

//第二种声明方法的方式
    let fn5=function (name, age) {
        alert(name+":"+age);
    }
    //fn5("张飞",18);

//第三种声明方法的方式
    let fn6=new Function("name","age","alert(name+':'+age)");
    fn6("刘备",50);

</script>

注意:

在调用方法的时候注意加上后面的括号

(错误写法)

<input type="button" value="按钮" onclick="fn1">

此时单击事件无效

<input type="button" value="按钮" onclick="fn1()">

此时才能达到预期结果

js调用函数时加括号与不加括号的区别(百度知道)

  函数只要是要调用它进行执行的,都必须加括号。此时,函数()实际上等于函数的返回值。当然,有些没有返回值,但已经执行了函数体内的行为,这个是根本,就是说,只要加括号的,就代表将会执行函数体代码。不加括号的,都是把函数名称作为函数的指针,用于传参,此时不是得到函数的结果,因为不会运行函数体代码。它只是传递了函数体所在的地址位置,在需要的时候好找到函数体去执行。

 

和页面相关的方法

  1. 通过元素的id获取元素对象

    let d = document.getElementById("id");

 
 
  
 

  2. 获取和修改元素的文本内容

    d.innerText 获取元素的文本

    d.innerText = "xxx"; 修改元素的文本内容

  3. 获取和修改控件的值

    i.value 获取控件的值

    i.value="xxx" 修改控件的值

  4. 获取和修改元素的html标签内容

    * 若要插入HTML标签,则要将innerText改为innerHTML即可

    //字符串进行减乘除运算时会自动转换成数值    
    //如果获取到的字符串内容不是一个数,会显示NaN : Not a Number 不是一个数
    //加法和其他的不一样,加法会进行字符串拼接

    * NaN:

      Not a Number 不是一个数

      isNaN(变量)   true代表是NaN   false代表是数

    * 往HTML页面中连续添加多个标签时可用

      d1.innerHTML; 获取

      d1.innerHTML=“<img src='../8.jpg'>”; 替换修改

      d1.innerHTML=“<img src='../8.jpg'>”; 追加

  5.将字符串转换成数值两种方法:
    * 给字符串乘以1
    * 用方法parseInt(字符串)

JavaScript对象分类

  分为三大类

  * 内置对象: string,number,boolean等

  * BOM: Browser Object Model 浏览器对象模型, 包含和浏览器相关的内容

  * DOM: Document Object Model 文档对象模型,包含页面相关的内容

  BOM浏览器对象模型

    window对象: 该对象里面的属性和方法称为全局属性和全局方法, 访问时可以省略window.

          window.alert()     window.isNaN()  window.parseInt()

  * window里面常见的方法

      * alert() 弹出提示框(弹出后只可点击确认)

      * confifirm() 弹出确认框(弹出后可点击确认页可点击取消,分别返回truefalse

      * prompt() 弹出文本框(弹出文本框,返回输入内容)

      * isNaN() 判断变量是否是NaN

      * parseInt() 将字符串或小数转成整数

      * parseFloat() 将字符串转成小数

      * let timer = setInterval(方法,时间间隔) 开启定时器   每隔时间间隔方法就执行一次(例如轮播图)

        

  <script>
      //第一种写法
      //开启定时器
       setInterval(myfn,2000);
      let timer = function myfn(){
          console.log("执行了!");
      }
     clearInterval(timer);//停止定时器
    
      //第二种写法(通过匿名方法)
      setInterval(function(){
          console.log("执行了!");
      },1000);
  </script>

        console.log("执行了!");//类似于System.out.println("执行了!");

      * clearInterval(timer) 停止定时器

      * setTimeout(方法名,时间间隔); 只执行一次的定时器

  * window里面常见的属性

      * location:位置

        * location.href;获取浏览器的请求地址

        * location.href=“http://www.baidu.com”;修改浏览器的请求地址

        * location.reload(); 让页面刷新

        * location.search 获取浏览器后面的请求参数  (有参数的话获取到的是  ?以及后面的内容  无参数则获取到的是“”

      * history:历史(浏览器当前窗口的历史并非是浏览器里面的历史记录

        * history.length 获取历史页面的数量

        * history.back() 返回上一个页面(相当于浏览器里面的前进键)

        * history.forward() 前往下一个页面(相当于浏览器里面的后退键)

      * screen:屏幕

        * screen.width 获取电脑屏幕宽分辨率

        * screen.height 获取电脑屏幕高分辨率

      * navigator:导航/帮助

        * navigator.userAgent 获取浏览器的版本信息

  事件相关

    * 什么是事件?

      事件就是系统给提供的一些时间点,包括鼠标事件/键盘事件/状态改变事件

    * 鼠标事件:

      onclick:鼠标点击事件

      onmouseover:鼠标移入事件

      onmouseout:鼠标移出事件

      onmousedown:鼠标按下事件

      onmousemove:鼠标移动事件

    * 键盘事件

    onkeydown: 键盘按下  

    onkeyup:键盘抬起

    event.keyCode:获取按键编码

    String.fromCharcode(按键编码):将字符编码转成字符

  <script>
      //event事件对象,里面装着和事件相关的内容
      //keyCode 获取按键编码
      function downfnkey(){
          console.log("键盘按下"+event.keyCode);
          //根据案件编码判断按下的是否是回车键
          if (event.keyCode==13){
              alert("用户按下了回车键")
          }
      }
      function upfnkey(){
          //将按键编码转成字符
          let char =String .fromCharCode(event.keyCode)
          console.log("键盘抬起"+char);
      }
  </script>

 

 

 

    * 状态改变事件

      onload:页面加载完成事件

      onchange:值改变事件

      onblur:失去焦点事件

      onresize:窗口尺寸改变事件

    * 事件的绑定

      * 事件属性绑定:在元素里面添加事件属性

      * 动态绑定:通过js代码给元素添加事件,用的更多,可以将js代码和HTML代码分离开

 

  <body>
  <input type="button" value="按钮1" onclick="fn1()">
  <input type="button" value="按钮2" id="b1">

  <script>
      //事件属性绑定
      function fn1(){
          alert("按钮1被点击了");
      }

      //动态绑定,通过js代码添加事件
      b1.onclick=function(){
            alert("按钮2被点击了");
    }
  </script>
  </body>

 

      *事件传递(事件冒泡)

        在某个范围内如果有多个元素的事件需要触发,事件是从最里层往最外层传递

  DOM文档对象模型,包含页面相关内容

    * 通过id获取元素对象 document.getElementbyid("id");

    * innerText/innerHTML

  jQuery框架

    * 由于JavaScript语言中的和页面相关的内容比较繁琐,jQuery的出现就是解决此问题,可以让程序员更高效的开发页面动态效果。

    * 如何使用jQuery框架?

      此框架就是一个外部的js文件,通过script标签的src属性引入到HTML页面即可使用

  <!--引入入jQuery框架-->
  <script src="../js/jquery-1.4.2.js"></script>
  <script>
      //给按钮添加点击事件
   /*   //js动态绑定事件
      let b1=document.getElementById("b1");//现在的谷歌浏览器等会自动添加这行代码,但是有的浏览器不会,所以为了兼容性还得写
      b1.onclick=function () {
          alert("按钮被点击了");
      }*/
      //jQuery写法
      //jquery中的事件的名称和js中的事件的名称比较,去掉了on
      $("#b1").click(function () {
          //alert("按钮被点击了!");

          /*let a=document.getElementById("d1");
          let b=document.getElementById("i1");
          a.innerText=b.value;*/
          //等效上面三行代码
          $("#d1").text($("#i1").val())
          //document.getElementById("i1"); 获取到的是js对象,表示文本框
          //$("#i1")获取到的是jQuery对象,也表示文本框
      });
  </script>

 

    * js对象和jQuery对象不是同一种对象,彼此的方法也不能互相调用

    * js对象和jQuery对象的互相转换

      * js转jQuery

        let jq=$(js);

      * jQuery转js

        let js=jq[0];

<body>
<input type="text" id="i1">
<input type="button" value="js转jq" id="b1">
<input type="button"  value="jq转js" id="b2">

    <!--引入jQuery框架-->
    <script src="../js/jquery-1.4.2.js"></script>
    <script>
        //先给按钮绑定单击事件
        $("#b1").click(function () {
            //获取js对象
            let js=document.getElementById("i1");
            //js对象转为jQuery对象
            let jq=$(js);
            //调用jq的方法val()验证是否转换成功
            alert(jq.val())
        });
        $("#b2").click(function(){
            //得到jq对象
            let jq=$("#i1");
            //把jq对象转成js对象,jq对象本质上是一个数组,里面装的是js
            //此时通过id选择器获取到的jq数组里面只有一个元素,就是jq[0]
            let js=jq[0];
            alert(js.value);
        });
    </script>
    </body>

    $("选择器"),jQuery的这个通过选择器选择元素的写法可以理解成是一个方法,它返回的jQuery对象是一个数组,而这个jQuery对象里面装的就是js对象

   jquery中的选择器

    * 基础选择器 用法和css一样

      标签名 $("div")
      id选择器 $("#id")
      class类选择器 $(".class")
      分组选择器 $("div,#id,.class")
      任意元素选择器$("*")

    * 层级选择器

      $("div span") 匹配div里面的所有span 子孙后代选择器
      $("div>span") 匹配div里面的子元素span 子元素选择器

    * 层级相关方法:

      $("#abc").next("span") 匹配id为abc元素的弟弟元素
      $("#abc").nextAll() 匹配id为abc元素的弟弟们元素
      $("#abc").prev() 匹配id为abc元素的哥哥元素
      $("#abc").prevAll() 匹配id为abc元素的哥哥们元素
      $("#abc").siblings() 匹配id为abc元素的所有兄弟元素
      $("#abc").parent() 匹配id为abc元素的父元素
      $("#abc").children() 匹配id为abc元素的子元素们

    * 过滤选择器

      $("div:first") 匹配所有div中的第一个div
      $("div:last") 匹配所有div中的最后一个
      $("div:eq(n)") 匹配下标为n的div n从0开始
      $("div:lt(n)") 匹配下标小于n的div n从0开始
      $("div:gt(n)") 匹配下标大于n的div n从0开始
      $("div:not(.abc)") 匹配class值不是abc的div
      $("div:even") 匹配下标为偶数的div
      $("div:odd") 匹配下标为奇数的div

    * 内容选择器

      $("div:has(p)")匹配包含p子元素的div
      $("div:empty") 匹配空的div
      $("div:parent") 匹配非空的div
      $("div:contains('xxx')") 匹配包含xxx文本的div

    * 可见选择器

      $("div:visible") 匹配所有显示的div
      $("div:hidden") 匹配所有隐藏的div

    * 显示隐藏相关方法:

      $("#abc").show() 让id为abc的元素显示
      $("#abc").hide() 让id为abc的元素隐藏
      $("#abc").toggle() 让id为abc的元素显示隐藏切换

    * 属性选择器

      $("div[属性名]") 匹配包含xxx属性的div$("div[属性名='值']") 匹配xxx属性=xxx值的div
      $("div[属性名!='值']") 匹配xxx属性不等于xxx值的div

    * 子元素选择器

      $("div:first-child") 匹配是div并且是子元素并且是第一个子元素
      $("div:last-child") 匹配是div并且是子元素并且是最后一个子元素
      $("div:nth-child(n)") 匹配是div并且是子元素并且是第n个子元素 n从1开始

    * 表单选择器

      $(":input") 匹配表单中的所有控件
      $(":password") 匹配所有密码框
      $(":radio") 匹配所有单选
      $(":checkbox") 匹配所有多选
      $(":checked") 匹配所有选中的单选/多选和下拉选
      $("input:chekced") 匹配所有选中的单选和多选
      $(":selected") 匹配所有选中的下拉选

    * 遍历其相应选择器返回的数组

        //弹出所有 :checked 元素的value值" id="b4"
        $("#b4").click(function(){
            //只能取到数组的第一个元素的value值
            //alert($(":checked").val());
            //遍历数组的每一个元素
            $(":checked").each(function(){
                //遍历的过程中this代表遍历的每一个“js对象”
                alert(this.value);
            });
        });

 

 

 

 

 

 

          

  

 

posted @ 2021-04-28 00:05  我挺菜  阅读(103)  评论(0)    收藏  举报