第三章 JavaScript

一 JS简介

1.1 JS起源

JS是一种运行于浏览器端上脚本语言,可以实现网页动态变化和动画特效。

1.2 JS 组成部分

JavaScript的组成包含 BOM、ECMAScript、DOM。

1.3 JS的引入方式
1.3.1 内部脚本方式引入

说明

  • 在页面中,通过一对script标签引入JS代码

  • script代码放置位置具备一定的随意性,一般放在head标签中居多

EG:

<head>

        <script>
                    function suprise(){
                        alert("Hello,我是惊喜")
                    }
        </script>

</head>

1.3.2 外部脚本方式引入

说明

  • 内部脚本仅能在当前页面上使用,代码复用度不高

  • 可以将脚本放在独立的js文件中,通过script标签引入外部脚本文件

  • 一对script标签要么用于定义内部脚本,要么用于引入外部js文件,不能混用 [ 总结:一对script标签,一次只能干一件事 ]

  • 一个html文档中,可以有多个script标签

抽取脚本代码到独立的js文件中

<head>
        <script src="js/button.js" type="text/javascript"></script>

</head>

二 JS的数据类型和运算符

2.1 JS的数据类型
  • 1- 数值类型

数值类型统一为 number,不区分整数和浮点数

  • 2- 字符串类型

字符串类型为 string 和JAVA中的String相似,JS中不严格区分单双引号,都可以用于表示字符串

  • 3- 布尔类型

布尔类型为boolean 和Java中的boolean相似,但是在JS的if语句中,非空字符串会被转换为'真',非零数字也会被认为是'真'

  • 4- 引用数据类型

引用数据类型对象是Object类型, 各种对象和数组在JS中都是Object类型

  • 5- function类型

JS中的各种函数属于function数据类型

  • 6- 命名未赋值

js为弱类型语言 , 统一使用 var 声明对象和变量 , 在赋值时才确定真正的数据类型,变量如果只声明没有赋值的话,数据类型为undefined

  • 7- 赋予NULL值

在JS中,如果给一个变量赋值为null,其数据类型是Object, 可以通过typeof关键字判断数据类型

2.2 JS的变量

JS中的变量具有如下特征

  • 1 弱类型变量,可以统一声明成var

  • 2 var声明的变量可以再次声明

  • 3 变量可以使用不同的数据类型多次赋值

  • 4 JS的语句可以以; 结尾,也可以不用;结尾

  • 5 变量标识符严格区分大小写

  • 6 标识符的命名规则参照JAVA

  • 7 如果使用了 一个没有声明的变量,那么运行时会报uncaught ReferenceError: *** is not defined at index.html:行号:列号

  • 8 如果一个变量只声明,没赋值,那么值是undefined

2.3 JS的运算符

  • 1- 算数运算符 + - * / %

其中需要注意的是 / 和 %

  • /  在除0时,结果是 Infinity(中文意思:无穷) ,而不是报错

  • % 在模0时,结果是 NaN,意思为 not a number ,而不是报错

  • 2- 复合算数运算符 ++ -- += -= *= /= %=

符合算数运算符基本和JAVA一致,同样需要注意 /=和%=

  • 在/=0时,结果是 Infinity ,而不是报错

  • 在%=0时,结果是 NaN,意思为 not a number ,而不是报错

  • 3- 关系运算符 > < >= <= == === !=
  • == 符号,如果两端的数据类型不一致,会尝试将两端的数据转换成number,再对比number大小

    • '123' 这种字符串可以转换成数字

    • true会被转换成1 false会被转换成0

  • === 符号,如果两端数据类型不一致,直接返回false,数据类型一致在比较是否相同

  • 4- 逻辑运算符 || &&

几乎和JAVA中的一样,需要注意的是,这里直接就是短路的逻辑运算符,单个的 | 和 & 以及 ^ 是位运算符

  • 5- 条件运算符 条件? 值1 : 值2

几乎和JAVA中的一样

  • 6- 位运算符 | & ^ << >> >>>

和 java中的类似(了

三 JS的流程控制和函数

3.1 JS分支结构
  • 1- if结构

这里的if结构几乎和JAVA中的一样,需要注意的是

  • if()中的 非空字符串 会被认为是 true

  • if()中的 非零数字 会被认为是 true

if('false'){        // 非空字符串 if判断为true
    console.log(true)
}else{
    console.log(false)
}
if(''){        // 长度为0字符串 if判断为false
    console.log(true)
}else{
    console.log(false)
}
if(1){        // 非零数字 if判断为true

}

  • 2- switch结构

几乎和JAVA的语法一致

3.2 JS循环结构
  • 1- while结构

几乎和JAVA一致

/* 打印99 乘法表 */
var i = 1;
while(i <= 9){
    var j = 1;
    while(j <= i){
        document.write(j+"*"+i+"="+i*j+"&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;");
        j++;
    }
    document.write("<hr/>");
    i++;
}

  • 2- for循环

几乎和JAVA一致

/* 打印99 乘法表 */
for(  var i = 1;i <= 9; i++){
    for(var j = 1;j <= i;j++){
        document.write(j+"*"+i+"="+i*j+"&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;");
    }
    document.write("<hr/>");
}

  • 3- foreach循环

迭代数组时,和 java 不一样

  • 括号中的临时变量表示的是元素的索引,不是元素的值,

  • ()中也不在使用: 分隔,而是使用 in 关键字

var cities =["北京","上海","深圳","武汉","西安","成都"]
document.write("<ul>")
for(var index in  cities){
    document.write("<li>"+cities[index]+"</li>")
}
document.write("</ul>")

3.3 JS函数声明

JS中的方法,多称为函数,函数的声明语法和JAVA中有较大区别

函数说明

  • 函数没有权限控制符

  • 不用声明函数的返回值类型,需要返回在函数体中直接return即可,也无需void关键字

  • 参数列表中,无需数据类型

  • 调用函数时,实参和形参的个数可以不一致 [多出来的实参视为无效]

  • 声明函数时需要用function关键字

  • J函数没有异常列表

函数声明- 语法1

/* 
语法1 
    function 函数名 (参数列表){函数体}
            */
function sum(a, b){
    return a+b;
}
var result =sum(10,20);
console.log(result)

函数声明- 语法2

/* 
语法2
    var 函数名 = function (参数列表){函数体}
            */
var add = function(a, b){
    return a+b;
}
var result = add(1,2);
console.log(result);

四 JS的对象和JSON

4.1 JS声明对象的语法
语法1

通过new Object()直接创建对象

var person =new Object();
// 给对象添加属性并赋值
person.name="张小明";
person.age=10;
person.foods=["苹果","橘子","香蕉","葡萄"];
// 给对象添加功能函数
person.eat= function (){
    console.log(this.age+"岁的"+this.name+"喜欢吃:")
    for(var i = 0;i<this.foods.length;i++){
        console.log(this.foods[i])
    } 
}
//获得对象属性值
console.log(person.name)
console.log(person.age)
//调用对象方法
person.eat();

语法2

通过 {}形式创建对象

语法为 var person ={"属性名":"属性值","属性名","属性值","函数名":函数}

var person ={
    "name":"张小明",
    "age":10,
    "foods":["苹果","香蕉","橘子","葡萄"],
    "eat":function (){
        console.log(this.age+"岁的"+this.name+"喜欢吃:")
        for(var i = 0;i<this.foods.length;i++){
            console.log(this.foods[i])
        } 
    }
}
//获得对象属性值
console.log(person.name)
console.log(person.age)
//调用对象方法
person.eat();

4.2 JSON格式

简单来说,JSON 就是一种字符串格式,这种格式无论是在前端还是在后端,都可以很容易的转换成对象,所以常用于前后端数据传递

前后端传递数据

JSON字符串与对象之间的转换

  • 通过JSON.parse()方法可以将一个JSON串转换成对象

  • 通过JSON.stringify()方法可以将一个对象转换成一个JSON格式的字符串

4.3 JS常见对象
  • 1- 数组

创建数组的四种方式

  • new Array() 创建空数组

  • new Array(5) 创建数组时给定长度

  • new Array(ele1,ele2,ele3,... ... ,elen); 创建数组时指定元素值

  • [ele1,ele2,ele3,... ... ,elen]; 相当于第三种语法的简写

数组的常见API

在JS中,数组属于Object类型,其长度是可以变化的,更像JAVA中的集合

EG:

        concat()

  • 2- Boolean对象
  • 3- Date对象
  • 4- Math
  • 5- Number
  • 6- String

五 事件的绑定

5.1 什么是事件

HTML 事件可以是浏览器行为,也可以是用户行为当这样一些行为发生时,可以自动触发对应的JS函数的运行,我们称之为事件发生。JS的事件驱动指的就是行为触发代码运行的这种特点。

5.2 常见事件
  • 1- 鼠标事件

  • 2- 键盘事件

  • 3- 表单事件

  • 4- 页面加载完毕事件

5.3 事件的绑定
  • 1- 通过属性绑定

 <head>
        <meta charset="UTF-8">
        <title>小标题</title>
      
        <script>
            function testDown1(){
                console.log("down1")
            }
            function testDown2(){
                console.log("down2")
            }
            function testFocus(){
                console.log("获得焦点")
            }

            function testBlur(){
                console.log("失去焦点")
            }
            function testChange(input){
                console.log("内容改变")
                console.log(input.value);
            }
            function testMouseOver(){
                console.log("鼠标悬停")
            }
            function testMouseLeave(){
                console.log("鼠标离开")
            }
            function testMouseMove(){
                console.log("鼠标移动")
            }
        </script>
    </head>

    <body>
        <input type="text" 
        onkeydown="testDown1(),testDown2()"
        onfocus="testFocus()" 
        onblur="testBlur()" 
        onchange="testChange(this)"
        onmouseover="testMouseOver()" 
        onmouseleave="testMouseLeave()" 
        onmousemove="testMouseMove()" 
         />
    </body>

说明

  • 通过事件属性绑定函数,在行为发生时会自动执行函数

  • 一个元素可以同时绑定多个事件

  • 一个事件可以同时绑定多个函数

  • 方法中可以传入 this对象,代表当前元素

  • 2- 通过DOM编程绑定

 <head>
        <meta charset="UTF-8">
        <title>小标题</title>
      
        <script>
            // 页面加载完毕事件,浏览器加载完整个文档行为 - onload
            window.onload=function(){
                var in1 =document.getElementById("in1");
                // 通过DOM编程绑定事件
                in1.onchange=testChange
            }
            function testChange(){
                console.log("内容改变")
                console.log(event.target.value);
            }
        </script>
    </head>

    <body>
        <input id="in1" type="text" />
    </body>

5.4 事件的触发
  • 1- 行为触发

发生行为时触发

  • 2- DOM编程触发

通过DOM编程,用代码触发,执行某些代码相当于发生了某些行为

六 BOM编程

6.1 什么是BOM

BOM是Browser Object Model的简写,即浏览器对象模型

  • BOM由一系列对象组成,是访问、控制、修改浏览器的属性和方法(通过window对象及属性的一系列方法 控制浏览器行为的一种编程)

  • BOM没有统一的标准(每种客户端都可以自定标准)。

  • BOM编程是将浏览器窗口的各个组成部分抽象成各个对象,通过各个对象的API操作组件行为的一种编程

BOM编程的对象结构如下:

window 顶级对象,代表整个浏览器窗口

  • location对象 window对象的属性之一,代表浏览器的地址栏

  • history对象 window对象的属性之一,代表浏览器的访问历史

  • screen对象 window对象的属性之一,代表屏幕

  • navigator对象 window对象的属性之一,代表浏览器软件本身

  • document对象 window对象的属性之一,代表浏览器窗口目前解析的html文档

  • console对象 window对象的属性之一,代表浏览器开发者工具的控制台

  • localStorage对象 window对象的属性之一,代表浏览器的本地数据持久化存储

  • sessionStorage对象 window对象的属性之一,代表浏览器的本地数据会话级存储

6.2 window对象的常见属性(了解)
6.3 window对象的常见方法(了解)
6.4 通过BOM编程控制浏览器行为演示
A- 三种弹窗方式
  • 1- 普通信息提示框

 window.alert("提示信息");

  • 2- 确认框

confirm("确定要删除吗?"); [ window. 可以省略不写]

  • 3- 信息输入对话框

prompt("请输入昵称","例如:张三");

B- 页面跳转

通过BOM编程地址栏url切换

 window.location.href="http://www.xxx.com"

备注:

href是location的属性,不是方法。

6.5 通过BOM编程实现会话级和持久级数据存储
sessionStorge

会话级数据 : 内存型数据,是浏览器在内存上临时存储的数据,浏览器关闭后,数据失去,通过window的sessionStorge属性实现 。 

 // 让浏览器存储一些会话级数据
            window.sessionStorage.setItem("sessionMsg","sessionValue")

localStorge

持久级数据 : 磁盘型数据,是浏览器在磁盘上持久存储的数据,浏览器关闭后,数据仍在,通过window的localStorge实现 。

 // 让浏览器存储一些持久级数据
            window.localStorage.setItem("localMsg","localValue")

查看数据状态

在F12开发者工具的应用程序栏,可以查看数据的状态

七 DOM编程

7.1 什么是DOM编程

简单来说:

DOM(Document Object Model)编程就是使用 document对象 的API完成对网页HTML文档进行动态修改,以实现 网页数据和样式 动态变化效果 的编程。

  • document对象代表整个html文档,可用来访问页面中的所有元素,是最复杂的一个dom对象,可以说是学习好dom编程的关键所在。

  • 根据HTML代码结构特点,document对象本身是一种树形结构的文档对象。

树形结构 - dom树

dom树中节点的类型

  • node 节点,所有结点的父类型

    • element 元素节点,node的子类型之一,代表一个完整标签

    • attribute 属性节点,node的子类型之一,代表元素的属性

    • text 文本节点,node的子类型之一,代表双标签中间的文本

DOM编程其实就是用 window对象的 document属性的相关API完成对页面元素的控制的编程。

7.2 获取页面元素的几种方式

EG:

                功能 - 根据id值查询  

                API - document.getElementById(“id值”)

                返回值 -  一个具体的元素节

7.3 操作元素属性值
A-  属性操作
  • 1- 读取属性值

元素对象.属性名

  • 2- 修改属性值

元素对象.属性名=新的属性值

B-  内部文本操作
  • 1- 获取或者设置标签体的文本内容

element.innerText

  • 2- 获取或者设置标签体的内容 

element.innerHTML      [eg:比文本内容多一个html ]

7.4 增删元素

八 正则表达式

8.1 正则表达式简介
8.2 正则表达式体验

Logo

Agent 垂直技术社区,欢迎活跃、内容共建。

更多推荐