1.JavaScript的引入方式
第一种方式:内部脚本,将JS定义在HTML页面中
JavaScript代码必须位于< script></ script>标签之间
在HTML文档中,可以在任意地方,放置任意数量的< script>
一般会把脚本置于< body>元素的底部,可改善显示速度
例子:
1 2 3 <script> alert ("Hello javascript" ) </script>
第二种方式:外部脚本将JS定义在外部JS文件,然后引入到HTML页面
外部JS文件中,只包含JS代码,不包含< script>标签
引入外部js的< script>标签,必须是双标签
例子:
1 <script src="demo.js" ></script>
2.书写语法
掌握了js的引入方式,那么接下来我们需要学习js的书写了,首先需要掌握的是js的书写语法,语法规则如下:
区分大小写:与 Java 一样,变量名、函数名以及其他一切东西都是区分大小写的
每行结尾的分号可有可无
大括号表示代码块
注释:
单行注释:// 注释内容
多行注释:/* 注释内容 */
api
描述
window.alert()
警告框
document.write()
在HTML 输出内容
console.log()
写入浏览器控制台
示例代码如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 <!DOCTYPE html > <html lang ="en" > <head > <meta charset ="UTF-8" > <meta http-equiv ="X-UA-Compatible" content ="IE=edge" > <meta name ="viewport" content ="width=device-width, initial-scale=1.0" > <title > JS-基本语法</title > </head > <body > </body > <script > window .alert ("hello js" );</script > </html >
3.变量
关键字
解释
var
早期ECMAScript5中用于变量声明的关键字
let
ECMAScript6中新增的用于变量声明的关键字,相比较var,let只在代码块内生效
const
声明常量的,常量一旦声明,不能修改
在js中声明变量还需要注意如下几点:
JavaScript 是一门弱类型语言,变量可以存放不同类型的值 。
变量名需要遵循如下规则:
组成字符可以是任何字母、数字、下划线(_)或美元符号($)
数字不能开头
建议使用驼峰命名
示例代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 <!DOCTYPE html > <html lang ="en" > <head > <meta charset ="UTF-8" > <meta http-equiv ="X-UA-Compatible" content ="IE=edge" > <meta name ="viewport" content ="width=device-width, initialscale=1.0" > <title > JS-基础语法</title > </head > <body > </body > <script > var a = 10 ;a = "张三" ; alert (a);</script > </html >
在js中,我们var声明的变量可以接受任何数据类型的值。并且var声明的变量的作用于是全局的。
而且var关键字声明的变量可以重复定义,修改代码如下:
1 2 3 4 5 { var x = 1 ;var x = "A" ;} alert (x);
所以在ECMAScript 6 新增了 let关键字来定义变量,它的用法类似于 var,但是所声明的变量,只在 let关键字所在的代码块内有效,且不允许重复声明。注释掉之前的代码,添加代码如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 <script> { let x = 1 ; } alert (x);</script>
4.数据类型和运算符
虽然js是弱数据类型的语言,但是js中也存在数据类型,js中的数据类型分为 :原始类型 和 引用类型,具体有如下类型
数据类型
描述
number
数字(整数、小数、NaN(Not a Number))
string
字符串,单双引皆可
boolean
布尔。true,false
null
对象为空
undefined
当声明的变量未初始化时,该变量的默认值是 undefined
使用typeof函数可以返回变量的数据类型,接下来我们需要通过书写代码来演示js中的数据类型
第一步:在VS Code中创建名为13. JS-基础语法-数据类型.html的文件
第二步:编写如下代码,然后直接挨个观察数据类型:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 <!DOCTYPE html > <html lang ="en" > <head > <meta charset ="UTF-8" > <meta http-equiv ="X-UA-Compatible" content ="IE=edge" > <meta name ="viewport" content ="width=device-width, initialscale=1.0" > <title > JS-数据类型</title > </head > <body > </body > <script > alert (typeof 3 ); alert (typeof 3.14 ); alert (typeof "A" ); alert (typeof 'Hello' );alert (typeof true ); alert (typeof false );alert (typeof null ); var a ;alert (typeof a); </script > </html >
在js中,绝大多数的运算规则和java中是保持一致的,但是js中的==和===是有区别的。
==:只比较值是否相等,不区分数据类型,哪怕类型不一致,==也会自动转换类型进行值得比较
不光比较值,还要比较类型,如果类型不一致,直接返回false
example:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 <!DOCTYPE html > <html lang ="en" > <head > <meta charset ="UTF-8" > <meta http-equiv ="X-UA-Compatible" content ="IE=edge" > <meta name ="viewport" content ="width=device-width, initialscale=1.0" > <title > JS-运算符</title > </head > <body > </body > <script > var age = 20 ;var _age = "20" ;var $age = 20 ;alert (age == _age);alert (age === _age);alert (age === $age);</script > </html >
在js中,虽然不区分数据类型,但是有时候涉及到数值计算,还是需要进行类型转换的,js中可以通过parseInt()函数来进行将其他类型转换成数值类型。注释之前的代码,添加代码如下:
1 2 3 4 5 alert (parseInt ("12" )); alert (parseInt ("12A45" )); alert (parseInt ("A45" ));
除此之外,在js中,还有非常重要的一点是:0,null,undefined,“”,NaN理解成false,反之理解成true。
5. 函数
JavaScript中的函数被设计为执行特定任务的代码块,通过关键字function来定义。接下来我们学习一下JavaScript中定义函数的2种语法
5.1 第一种定义格式
第一种定义格式如下:
1 2 3 function 函数名(参数1 ,参数2. .){要执行的代码 }
因为JavaScript是弱数据类型的语言,所以有如下几点需要注意:
形式参数不需要声明类型,并且JavaScript中不管什么类型都是let或者var去声明,加上也没
有意义。
返回值也不需要声明类型,直接return即可
如下示例:
1 2 3 function add (a, b ){return a + b;}
5.2 第二种定义格式
第二种可以通过var去定义函数的名字,具体格式如下
1 2 3 var functionName = function (参数1 ,参数2. . ){ }
接下来我们按照上述的格式,修改代码如下:只需要将第一种定义方式注释掉,替换成第二种定义方式即可,函数的调用不变
1 2 3 4 5 6 7 8 9 10 11 12 13 14 <script> var add = function (a,b ){return a + b; } var result = add (10 ,20 );alert (result);</script>
我们在调用add函数时,再添加2个参数,修改代码如下:
1 var result = add (10 ,20 ,30 ,40 )
为在JavaScript中,函数的调用只需要名称正确即可,参数列表不管的。如上述案例,10传递给了变量a,20传递给了变量b,而30和40没有变量接受,但是不影响函数的正常调用。
6.JavaScript对象
6.1 基本对象
6.1.1 Array对象
Array对象时用来定义数组的。常用语法格式有如下2种:
方式一:
1 2 var 变量名 = new Array (元素列表);var arr = new Array (1 ,2 ,3 ,4 );
方式二:
1 2 var 变量名 = [ 元素列表 ]; var arr = [1 ,2 ,3 ,4 ];
与java中不一样的是,JavaScript中数组相当于java中的集合,数组的长度是可以变化的。而且JavaScript是弱数据类型的语言,所以数组中可以存储任意数据类型的值。
Array作为一个对象,那么对象是有属性和方法的,所以接下来我们介绍一下Array对象的属性和方法
官方文档中提供了Array的很多属性和方法,但是我们只学习常用的属性和方法,如下图所示:
length属性:
1 2 3 4 5 var arr = [1 ,2 ,3 ,4 ];arr[10 ] = 50 ; for (let i = 0 ; i < arr.length ; i++) { console .log (arr[i]); }
forEach()函数:
1 2 3 4 5 6 7 8 arr.forEach (function (e ){ console .log (e);}) arr.forEach ((e ) => { console .log (e);})
push()函数:
1 2 3 4 arr.push (7 ,8 ,9 ); console .log (arr);
splice()函数:
1 2 3 4 5 6 arr.splice (2 ,2 ); console .log (arr);
6.1.2 String对象
String对象的创建方式有2种:
方式一:
1 2 3 var 变量名 = new String ("…" ) ; var str = new String ("Hello String" )
方式二:
1 2 var 变量名 = "…" ; var str = 'Hello String' ;
String对象也提供了一些常用的属性和方法,如下表格所示:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 <script> var str = " Hello String " ;console .log (str);console .log (str.length );console .log (str.charAt (4 ));console .log (str.indexOf ("lo" ));var s = str.trim ();console .log (s.length );console .log (s.substring (0 ,5 ));</script>
6.1.3 JSON对象
在 JavaScript 中自定义对象特别简单,其语法格式如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 var 对象名 = {属性名1 : 属性值1 , 属性名2 : 属性值2 , 属性名3 : 属性值3 , 函数名称: function (形参列表 ){} }; <script> var user = {name : "Tom" ,age : 10 ,gender : "male" ,eat : function ( ){console .log ("用膳~" ); } } console .log (user.name );user.eat (); <script>
json对象
JSON对象:JavaScript Object Notation,JavaScript对象标记法。是通过JavaScript标记法书写的文本。其格式如下:
1 2 3 4 5 6 7 8 9 10 11 { "key" :value,"key" :value,"key" :value} var jsonstr = '{"name":"Tom", "age":18, "addr":["北京","上海","西 安"]}' ;var obj = JSON .parse (jsonstr);alert (obj.name );
其中,key必须使用引号并且是双引号标记,value可以是任意数据类型。
6.2 BOM对象
接下来我们学习BOM对象,BOM的全称是Browser Object Model,翻译过来是浏览器对象模型。也就是JavaScript将浏览器的各个组成部分封装成了对象。我们要操作浏览器的部分功能,可以通过操作BOM对象的相关属性或者函数来完成。
BOM提供了如下五种对象:
对象名称
描述
Window
浏览器窗口对象
Navigator
浏览器对象
Screen
屏幕对象
History
历史记录对象
Location
地址栏对象
6.2.1 Window对象
window对象指的是浏览器窗口对象,是JavaScript的全部对象,所以对于window对象,我们可以直接使用,并且对于window对象的方法和属性,我们可以省略window.
alert()函数:
1 2 3 4 5 6 <script> window .window .alert ("Hello BOM" );alert ("Hello BOM Window" );</script>
confirm()函数:
1 2 3 4 var flag = confirm ("您确认删除该记录吗?" );alert (flag);
setInterval(fn,毫秒值):
1 2 3 4 5 6 var i = 0 ;setInterval (function ( ){i++; console .log ("定时器执行了" +i+"次" );},2000 );
setTimeout(fn,毫秒值):
1 2 3 4 5 setTimeout (function ( ){ alert ("JS" ); },3000 );
6.2.2 Location对象
location是指代浏览器的地址栏对象,对于这个对象,我们常用的是href属性,用于获取或者设置浏览器的地址信息,添加如下代码:
1 2 3 4 5 alert (location.href );location.href = "https://www.itcast.cn" ;
6.3 DOM对象
DOM:Document Object Model 文档对象模型。也就是 JavaScript 将 HTML 文档的各个组成部分封装为对象。
DOM 其实我们并不陌生,之前在学习 XML 就接触过,只不过 XML 文档中的标签需要我们写代码解析,而 HTML 文档是浏览器解析。封装的对象分为:
Document:整个文档对象
Element:元素对象
Attribute:属性对象
Text:文本对象
Comment:注释对象
那么我们学习DOM技术有什么用呢?主要作用如下:
改变 HTML 元素的内容
改变 HTML 元素的样式(CSS)
对 HTML DOM 事件作出反应
添加和删除 HTML 元素
获取DOM对象
函数
描述
document.getElementById()
根据id属性值获取,返回单个Element对象
document.getElementsByTagName()
根据标签名称获取,返回Element对象数组
document.getElementsByName()
根据name属性值获取,返回Element对象数组
document.getElementsByClassName()
根据class属性值获取,返回Element对象数组
实现代码如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 <!DOCTYPE html > <html lang ="en" > <head > <meta charset ="UTF-8" > <meta http-equiv ="X-UA-Compatible" content ="IE=edge" > <meta name ="viewport" content ="width=device-width, initialscale=1.0" > <title > JS-对象-DOM</title > </head > <body > <img id ="h1" src ="img/off.gif" > <br > <br > <div class ="cls" > 传智教育</div > <br > <div class ="cls" > 黑马程序员</div > <br > <input type ="checkbox" name ="hobby" > 电影<input type ="checkbox" name ="hobby" > 旅游<input type ="checkbox" name ="hobby" > 游戏</body > <script > var divs = document .getElementsByClassName ('cls' );var div1 = divs[0 ];div1.innerHTML = "传智教育666" ; </script > </html >
7.JavaScript事件
7.1 事件介绍
什么是事件呢?HTML事件是发生在HTML元素上的 “事情”,例如:
而我们可以给这些事件绑定函数,当事件触发时,可以自动的完成对应的功能。这就是事件监听。
接下来我们进行事件的学习。那么我们对于JavaScript事件需要学习哪些内容呢?我们得知道有哪些常用事件,然后我们得学会如何给事件绑定函数。所以主要围绕2点来学习:
7.2 事件绑定
JavaScript对于事件的绑定提供了2种方式:
1 2 3 4 5 6 7 <input type ="button" id ="btn1" value ="事件绑定1" onclick ="on()" > <script > function on ( ){alert ("按钮1被点击了..." ); } </script >
方式二:通过DOM中Element元素的事件属性进行绑定
1 2 3 4 5 <input type ="button" id ="btn2" value ="事件绑定2" > document.getElementById('btn2').onclick = function(){ alert("按钮2被点击了..."); }
7.3 常见事件
事件属性名
说明
onclick
鼠标单击事件
onblur
元素失去焦点
onfocus
元素获得焦点
onload
某个页面或图像被完成加载
onsubmit
当表单提交时触发该事件
onmouseover
鼠标被移到某元素之上
onmouseout
鼠标从某元素移开
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 <!DOCTYPE html > <html lang ="en" > <head > <meta charset ="UTF-8" > <meta http-equiv ="X-UA-Compatible" content ="IE=edge" > <meta name ="viewport" content ="width=device-width, initialscale=1.0" > <title > JS-事件-案例</title > </head > <body > <img id ="light" src ="img/off.gif" > <br > <input type ="button" value ="点亮" onclick ="on()" > <input type ="button" value ="熄灭" onclick ="off()" > <br > <br > <input type ="text" id ="name" value ="ITCAST" onfocus ="lower()" onblur ="upper()" ><br > <br > <input type ="checkbox" name ="hobby" > 电影<input type ="checkbox" name ="hobby" > 旅游<input type ="checkbox" name ="hobby" > 游戏<br > <input type ="button" value ="全选" onclick ="checkAll()" > <input type ="button" value ="反选" onclick ="reverse()" > </body > <script > onclick function on ( ){var img = document .getElementById ("light" );img.src = "img/on.gif" ; } function off ( ){var img = document .getElementById ("light" );img.src = "img/off.gif" ; } onblur function lower ( ){var input = document .getElementById ("name" );input.value = input.value .toLowerCase (); } function upper ( ){var input = document .getElementById ("name" );input.value = input.value .toUpperCase (); } 有的复选框呈现取消勾选的状态 ; -- onclick function checkAll ( ){var hobbys = document .getElementsByName ("hobby" );for (let i = 0 ; i < hobbys.length ; i++) {const element = hobbys[i];element.checked = true ; } } function reverse ( ){var hobbys = document .getElementsByName ("hobby" );for (let i = 0 ; i < hobbys.length ; i++) {const element = hobbys[i];element.checked = false ; } } </script > </html >
8. Vue
8.1 Vue概述
MVVM:其实是Model-View-ViewModel的缩写,有3个单词,具体释义如下:
Model: 数据模型,特指前端中通过请求从后台获取的数据
View: 视图,用于展示数据的页面,可以理解成我们的html+css搭建的页面,但是没有数据
ViewModel: 数据绑定到视图,负责将数据(Model)通过JavaScript的DOM技术,将数据展示到视图(View)上
Vue.js(读音 /vjuː/, 类似于 view) 是一套构建用户界面的 渐进式框架。与其他重量级框架不同的是,Vue 采用自底向上增量开发的设计。Vue 的核心库只关注视图层,并且非常容易学习,非常容易与其它库或已有项目整合。Vue.js 的目标是通过尽可能简单的 API 实现响应的数据绑定和组合的视图组件。
8.2 快速入门
1 2 3 4 5 6 7 8 9 10 11 <script src ="js/vue.js" > new Vue ({el : "#app" , data :{message : "Hello Vue" } }) </script >
在创建vue对象时,有几个常用的属性:
el: 用来指定哪儿些标签受 Vue 管理。 该属性取值 #app 中的 app 需要是受管理的标签的id属性值
data: 用来定义数据模型
methods: 用来定义函数。
1 2 3 4 5 6 7 <body > <div id ="app" > <input type ="text" v-model ="message" > {{message}} </div > </body >
8.3 Vue指令
指令
作用
v-bind
为HTML标签绑定属性值,如设置 href , css样式等
v-model
在表单元素上创建双向数据绑定
v-on
为HTML标签绑定事件
v-if
条件性的渲染某元素,判定为true时渲染,否则不渲染
v-show
根据条件展示某元素,区别在于切换的是display属性的值
v-for
列表渲染,遍历容器的元素或者对象的属性
8.3.1 v-bind&v-model
v-bind: 为HTML标签绑定属性值,如设置 href , css样式等。当vue对象中的数据模型发生变化时,标签的属性值会随之发生变化。
v-model: 在表单元素上创建双向数据绑定。
vue对象的data属性中的数据变化,视图展示会一起变化
视图数据发生变化,vue对象的data属性中的数据也会随着变化
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 <!DOCTYPE html > <html lang ="en" > <head > <meta charset ="UTF-8" > <meta http-equiv ="X-UA-Compatible" content ="IE=edge" > <meta name ="viewport" content ="width=device-width, initial-scale=1.0" > <title > Vue-指令-v-bind</title > <script src ="js/vue.js" > </script > </head > <body > <div id ="app" > <a v-bind:href ="url" > 链接1</a > <a :href ="url" > 链接2</a > <input type ="text" v-model ="url" > </div > </body > <script > new Vue ({el : "#app" , data :{url : "https://www.baidu.com" } }) </script > </html >
8.3.2 v-on
v-on: 用来给html标签绑定事件的。需要注意的是如下2点:
v-on语法给标签的事件绑定的函数,必须是vue对象种声明的函数
v-on语法绑定事件时,事件名相比较js中的事件名,没有on
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 <!DOCTYPE html > <html lang ="en" > <head > <meta charset ="UTF-8" > <meta http-equiv ="X-UA-Compatible" content ="IE=edge" > <meta name ="viewport" content ="width=device-width, initial-scale=1.0" > <title > Vue-指令-v-on</title > <script src ="js/vue.js" > </script > </head > <body > <div id ="app" > <input type ="button" value ="点我一下" v-on:click ="handle()" > <input type ="button" value ="点我一下" @click ="handle()" > </div > </body > <script > new Vue ({el : "#app" , data :{ }, methods : {handle : function ( ){alert ("你点我了一下..." ); } } }) </script > </html >
8.3.3 v-if和v-show
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 <!DOCTYPE html > <html lang ="en" > <head > <meta charset ="UTF-8" > <meta http-equiv ="X-UA-Compatible" content ="IE=edge" > <meta name ="viewport" content ="width=device-width, initialscale=1.0" > <title > Vue-指令-v-if与v-show</title > <script src ="js/vue.js" > </script > </head > <body > <div id ="app" > 年龄<input type ="text" v-model ="age" > 经判定,为: <span v-if ="age <= 35" > 年轻人(35及以下)</span > <span v-else-if ="age > 35 && age < 60" > 中年人(35-60)</span > <span v-else > 老年人(60及以上)</span > <br > <br > 年龄<input type ="text" v-model ="age" > 经判定,为: <span v-show ="age <= 35" > 年轻人(35及以下)</span > <span v-show ="age > 35 && age < 60" > 中年人(35-60)</span > <span v-show ="age >= 60" > 老年人(60及以上)</span > </div > </body > <script > new Vue ({el : "#app" , data :{age : 20 }, methods : { } }) </script > </html >
8.3.4 v-for
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 <script > new Vue ({el : "#app" , data :{addrs :["北京" , "上海" , "西安" , "成都" , "深圳" ] }, methods : { } }) </script > <div id ="app" > <div v-for ="addr in addrs" > {{addr}}</div > <hr > <div v-for ="(addr,index) in addrs" > {{index + 1}} : {{addr}}</div > </div >
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 <body > <div id ="app" > <table border ="1" cellspacing ="0" width ="60%" > <tr > <th > 编号</th > <th > 姓名</th > <th > 年龄</th > <th > 性别</th > <th > 成绩</th > <th > 等级</th > </tr > <tr align ="center" v-for ="(user,index) in users" > <td > {{index + 1}}</td > <td > {{user.name}}</td > <td > {{user.age}}</td > <td > <span v-if ="user.gender == 1" > 男</span > <span v-if ="user.gender == 2" > 女</span > </td > <td > {{user.score}}</td > <td > <span v-if ="user.score >= 85" > 优秀</span > <span v-else-if ="user.score >= 60" > 及格</span > <span style ="color: red;" v-else > 不及格</span > </td > </tr > </table > </div > </body > <script > new Vue ({el : "#app" ,data : {users : [{name : "Tom" ,age : 20 ,gender : 1 ,score : 78 },{ name : "Rose" ,age : 18 ,gender : 2 ,score : 86 },{ name : "Jerry" ,age : 26 ,gender : 1 ,score : 90 },{ name : "Tony" ,age : 30 ,gender : 1 ,score : 52 }] }, methods : { }, }) </script >
8.4 生命周期
vue的生命周期:指的是vue对象从创建到销毁的过程。vue的生命周期包含8个阶段:每触发一个生命周期事件,会自动执行一个生命周期方法,这些生命周期方法也被称为钩子方法。其完整的生命周期如下图所示:
状态
阶段周期
状态
阶段周期
beforeCreate
创建前
created
创建后
beforeMount
挂载前
mounted
挂载完成
beforeUpdate
更新前
updated
更新后
beforeDestroy
销毁前
destroyed
销毁后
mounted:挂载完成,Vue初始化成功,HTML页面渲染成功。以后我们一般用于页面初始化自动的ajax请求后台数据
1 2 3 4 5 6 7 8 9 10 11 12 13 14 <script > new Vue ({el : "#app" , data :{ }, methods : { }, mounted () { alert ("vue挂载完成,发送请求到服务端" ) } }) </script >