JavaWeb-JavaScript
什么是JavaScript
Web标准
- Web标准也称为网页标准,由一系列的标准组成,大部分由W3C ( World Wide Web Consortium,万维网联盟)负责制定。
- 三个组成部分:
HTML:负责网页的结构(页面元素和内容)。
CSS:负责网页的表现(页面元素的外观、位置等页面样式,如:颜色、大小等)。
JavaScript:负责网页的行为(交互效果)。
JavaScript
- JavaScript(简称:JS)是一门跨平台、面向对象的脚本语言。是用来控制网页行为的,它能使网页可交互。
- JavaScript和Java是完全不同的语言,不论是概念还是设计。但是基础语法类似。
- JavaScript在1995年由Brendan Eich 发明,并于1997年成为ECMA标准。
- ECMAScript 6 (ES6)是最新的JavaScript版本(发布于2015年)。
ECMA
ECMA国际(前身为欧洲计算机制造商协会),制定了标准化的脚本程序设计语言ECMAScript,这种语言得到广泛应用。而JavaScript是遵守ECMAScript的标准的。
js引入方式
内部脚本:
- 将JS代码定义在HTML页面中
- JavaScript代码必须位于<script><script>标签之间
- 在HTML文档中,可以在任意地方,放置任意数量的<script>
- 一般会把脚本置于<body>元素的底部,可改善显示速度
<script>alert("Hello JavaScript")
</script>
外部脚本:
- 将JS代码定义在外部JS文件中,然后引入到HTML页面中
- 外部JS文件中,只包含JS代码,不包含<script>标签
- <script>标签不能自闭合
<script src="js/demo.js"></script>
alert("Hello JavaScript")
代码运行结果
js基础语法
书写语法
- 区分大小写:与Java一样,变量名、函数名以及其他一切东西都是区分大小写的
- 每行结尾的分号可有可无,建议写上;
- 注释:
- 单行注释://注释内容
- 多行注释:/*注释内容*/
- 大括号表示代码块
//判断
if(count == 3){alert(count);
}
输出语句
- 使用window.alert()写入警告框
- 使用document.write()写入HTML输出
- 使用console.log()写入浏览器控制台
<script>window.alert("Hello JavaScript");//浏览器弹出警告框document.write("Hello JavaScript");//写入HTML,在浏览器展示console.log("Hello JavaScript");//写入浏览器控制台
</script>
代码运行结果
变量
- JavaScript中用var关键字(variable的缩写)来声明变量
- JavaScript是一门弱类型语言,变量可以存放不同类型的值
- 变量名需要遵循如下规则:
- 组成字符可以是任何字母、数字、下划线_、或美元符号$
- 数字不能开头
- 建议使用驼峰命名
<script>//var定义变量var a = 20;a = "张三";alert(a);
</script>
代码运行结果
注意事项
- ECMAScript6新增了let关键字来定义变量。它的用法类似于var,但是所声明的变量,只在let关键字所在的代码块内有效,且不允许重复声明
- ECMAScript6新增了const关键字,用来声明一个只读的常量。一旦声明,常量的值就不能改变
代码演示
<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>JS-基本语法-变量</title>
</head><body><script>// var定义变量// var a = 10;// a = "张三";// alert(a);// 特点1:作用域比较大,全局变量// 特点2:可以重复定义的// {// var x = 1;// var x = "test";// }// alert(x);// let{let x = 1;// let x = "a"; let不能重复定义alert(x);//1}// alert(x);//不能拿到let x = 1; 说明let是局部变量,此行会报错// const:常量,不能改变const pi = 3.14;// pi=3.15; const声明的是常量,数值不能改哦,此行会报错alert(pi);</script>
</body></html>
数据类型:
JavaScript中分为:原始类型和引用类型
原始类型 | 描述 |
---|---|
number | 数字(整数、小数、NaN(Not a Number)) |
string | 字符串,单双引号都可 |
boolean | 布尔,true、false |
null | 对象为空 |
undefined | 当声明的变量未初始化时,该变量的默认值是undefined |
- 注:使用typerof运算符可以获取数据类型
代码演示
<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>JS-基本语法-数据类型</title>
</head><body><script>// 原始数据类型// alert(typeof 3);//number// alert(typeof 3.14);//number// alert(typeof "A");//string// alert(typeof 'Hello');//string// alert(typeof true);//boolean// alert(typeof false);//boolean// alert(typeof null);//objectvar a;alert(typeof a);//undefined</script>
</body></html>
运算符:
类型 | 运算符 |
---|---|
算术运算符 | +、-、*、/、%、++、– |
赋值运算符 | =、+=、-=、*=、/=、%= |
比较运算符 | >、<、>=、<=、!=、==、 === |
逻辑运算符 | &&、||、! |
三元运算符 | 条件表达式 ? true_value : false_value |
- 注:==会类型转换,===不会类型转换
类型转换
- 字符串类型转换为数字
- 将字符串字面值转为数字。如果字面值不是数字,则为NaN
- 其他类型转为boolean
- Number:0和NaN为false,其他均为true
- String:空字符串为false,其他均转为true
- Null和undefined:均转为false
<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>JS-基本语法-运算符</title>
</head><body><script>// var age = 20;// var _age = "20";// var $age = 20;// alert(age == _age);//true// alert(age === _age);//false// alert(age === $age);//true// // 类型转换-其他类型转为数字// alert(parseInt("12"));//12// alert(parseInt("12A45"));//12// alert(parseInt("A45"));//NaN(not a number)// 类型转换 - 其他类型转为boolean// if(0){//false// alert("0 转换为false");// }// if(NaN){//false// alert("NaN 转换为false");// }// if(-1){//true// alert("除了0和NaN其他数字都转为true");// }// 字符串转换为booleanif ("") {//falsealert("空字符串为false,其他都是true");}if (null) {//falsealert("null 转化为false");}if (" ") {//truealert("空格字符串转化为true");}// null和undefined转换为boolean都是falseif (null) {//falsealert("null 转化为false");}if (undefined) {//falsealert("undefined转化为false");}// 注意if循环中,判断值为false时不执行代码块内容</script>
</body></html>
流程控制语句
- if… else if…else…
- switch
- for
- while
- do…while
js函数
函数
-
介绍:函数(方法)是被设计为执行特定任务的代码块
-
定义:JavaScript函数通过function关键字进行定义,语法为:
-
function functionName(参数1, 参数2){ //要执行的代码 }
-
例如定义一个求和函数,并调用
//定义函数 function add(a, b){return a + b; } //调用函数 var result = add(10,20); alert(result);
-
注意:
- 形式参数不需要类型,因为JavaScript是弱类型语言
- 返回值也不需要定义类型,可以在函数内部直接使用return返回即可
- JS中,函数调用可以传递任意个数的参数
-
调用:函数名称(实际参数列表)
-
定义方式二:JavaScript函数通过var关键字进行定义,语法为:
-
var functionName = function(参数1, 参数2){ //要执行的代码 }
-
例如定义一个求和函数,并调用
//定义函数 var add = function(a, b){return a + b; } //调用函数 var result = add(10, 20); alert(result);
js对象
Array
-
JavaScript中Array对象用于定义数组
-
定义:方式一
var 变量名 = new Array(元素列表); //例如 var arr = new Arry(1, 2, 3, 4);
-
定义:方式二
var 变量名 = [元素列表]; //例如 var arry = [1, 2, 3, 4];
-
访问
arr[索引] = 值; //例如 arr[10] = "hello";
-
注意:
JavaScript中的数组相当于Java中的集合,数组的长度是可变的,而JavaScript是弱类型,所以可以存储任意类型的数据
-
示例代码
//定义数组// var arr = new Array(1, 2, 3, 4);var arr = [1, 2, 3, 4];console.log(arr[0]);//1console.log(arr[1]);//2// 特点:长度可变 类型可变var arr = [1, 2, 3, 4];arr[10] = 50;console.log(arr[10]);//50console.log(arr[9]);//undefinedconsole.log(arr[8]);//undefinedarr[8] = "A";arr[9] = true;console.log(arr[8]);//Aconsole.log(arr[9]);//true
-
属性
属性 | 描述 |
---|---|
length | 设置或返回数组中元素的数量 |
- 方法
方法 | 描述 |
---|---|
forEach() | 遍历数组中的每个有值的元素,并调用一次传入的函数 |
push() | 将新元素添加到数组的末尾,并返回新的长度 |
splice() | 从数组中删除元素 |
代码示例
var arr = [1, 2, 3, 4];// for 循环遍历数组中的所有元素// for (let index = 0; index < arr.length; index++) {// console.log(arr[index]);// }//forEach:遍历数组中有值的元素arr.forEach(function (e) {console.log(e);})// console.log("=====================")//ES6 箭头函数:(...) => {...} 作用:简化函数的定义arr.forEach((e) => {console.log(e);})//push:添加元素到数组末尾arr.push(7, 8, 9);console.log(arr);//splice:删除元素arr.splice(2, 2);console.log(arr)
代码运行结果
String
-
String字符串对象创建方式有两种:
//方式一 var 变量名 = new String("...") //例 var str = new String("Hello String");//方式二 var 变量名 = "..."; //例 var str = "Hello String"; var str = 'Hello String'
-
属性
属性 描述 length 字符串的长度 -
方法
方法 描述 charAt() 返回指定位置的字符 indexOf() 检索字符串 trim() 去除字符串两边的空格 substring() 提取字符串中两个指定的索引号之间的字符 -
示例代码
<!DOCTYPE html> <html lang="en"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>JS-对象-String</title> </head><body><script>//创建字符串对象// var str = new String("Hello String");var str = " Hello String ";console.log(str);//length 获取字符串的长度console.log(str.length);//charAt 返回指定位置的字符console.log(str.charAt(6));//indexOf 检索字符串位置console.log(str.indexOf("lo"));//trim 去除字符串两端的空格var s = str.trim();console.log(s);//substring(start, end) 开始索引,结束索引(含头不含尾)console.log(s.substring(0, 5));</script> </body></html>
代码运行结果
JSON
-
定义格式
var 对象名 = {属性名1: 属性值1,属性名2: 属性值2,属性名3: 属性值3,函数名: function(形参列表){} }; //例 var user = {name:"Tom",age:20,gender:"male",eat:function(){alert("用膳~");}/*简写eat(){alert("用膳~");}*/ };
-
调用格式
对象名.属性名; 对象名.函数名(); //例 console.log(user.name); user.eat();
JSON-介绍
-
概念:JavaScript Object Notation,JavaScript对象标记法
-
JSON是通过JavaScript对象标记书法书写的文本
-
由于其语法简单,层次结构鲜明,现多用于作为数据载体,在网络中进行数据传输
{"name":"Tom","age":20,"gender":"male" }
-
定义
var 变量名 = '{"key1":value1,"key2":value2}'; //例 var userStr = '{"name":"Tom","age":18,"addr":["北京","上海","郑州","西安"]}';
-
value的数据类型为:
- 数字(整数或浮点数)
- 字符串(在双引号中)
- 逻辑值(true或false)
- 数组(在方括号[]中)
- 对象(在花括号{}中)
- null
-
JSON字符串转换为JS对象
var jsObject = JSON.parse(userStr);
-
JS对象转化为JSON字符串
var jsonStr = JSON.stringify(jsObject);
示例代码
<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>JS-对象-JSON</title>
</head><body><script>//自定义对象var user = {name: "Tom",age: 20,gender: "male",eat: function () {alert("用膳~");}};alert(user.name);user.eat();// 定义jsonvar jsonStr = '{"name":"Tom","age":18,"addr":["北京","上海","郑州","西安"]}';alert(jsonStr.name);//undefined 不能获取name的值// json字符串 ==》 js对象var jsObject = JSON.parse(jsonStr);alert(jsObject.name);// js对象 ==》 json字符串alert(JSON.stringify(jsObject));</script>
</body></html>
BOM
概念:
Browser Object Model浏览器对象模型,允许JavaScript与浏览器对话,JavaScript将浏览器的各个组成部分封装为对象。
-
组成
BOM 描述 Window 浏览器窗口对象 Navigator 浏览器对象 Screen 屏幕对象 History 历史记录对象 Location 地址栏对象 -
图示
Window
-
介绍:浏览器窗口对象
-
获取:直接使用window,其中window.可以省略
window.alert("Hello Window");alert("Hello Window");
-
属性
属性 描述 history 对History对象的只读引用 location 用于窗口或框架Location对象 navigator 对于Navigator对象的只读引用 -
方法
方法 描述 alert() 显示带有一段消息和一个确认的警告框 confirm() 显示带有一段消息以及确认按钮和取消按钮的对话框 setInterval() 按照指定的周期(以毫秒计)来调用函数或表达式 setTimeout() 在指定的毫秒数后调用函数或计算表达式
Location
-
介绍:地址栏对象
-
获取:使用window.location获取,其中window.可以省略
window.location.属性;location.属性;
-
属性:
-
href:设置或返回完整的URL
location.href = "https://blog.csdn.net/qq_59621600";
-
示例代码:
<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>JS-对象-BOM</title>
</head><body><script>// 获取window.alert("Hello BOM");alert("Hello BOM Window");// 方法// confirm - 对话框 -- 确认:true,取消:false// var flag = confirm("你确认删除该记录嘛?");// alert(flag);//定时器 - setInterval -- 周期性的执行某一个函数// var i = 0;// setInterval(function () {// i++;// console.log("定时器执行了" + i + "次");// }, 2000);//定时器 - setTimeout -- 延迟指定时间执行一次// setTimeout(function () {// alert("JS")// }, 3000);//locationalert(location.href);location.href = "https://blog.csdn.net/qq_59621600";//拿到当前地址后会跳转到该域名</script>
</body></html>
DOM
概念:
Document Object Model,文档对象模型,DOM是W3C(万维网联盟)的标准,定义了访问HTML和XML文档的标准,分为3个不同的部分:
1、Core DOM-所有文档类型的标准模型
- 将标记语言的各个组成部分封装为对应的对象:
- Document:整个文档对象
- Element:元素对象
- Attribute:属性对象
- Text:文本对象
- Comment:注释对象
<html><head><title>DOM</title></head><body><h1>DOM对象标题</h1><a href="https://blog.csdn.net/qq_59621600">甲柒CSDN</a></body>
</html>
2、XML DOM - XML文档的标准模型
3、HTML DOM - HTML文档的标准模型
- Image:<img>
- Button:<input type=‘button’>
HTML中的Element对象可以通过Document对象获取,而Document对象是通过window对象获取的
- Document对象中提供了以下获取Element元素对象的函数:
-
根据id属性值获取,返回单个Element对象
var h1 = document.getElementById('h1');
-
根据标签名称获取,返回Element对象数组
var divs = document.getElementsByTagName('div');
-
根据name属性值获取,返回Element对象数组
var hobbys = document.getElementsByName('hobby');
-
根据class属性值获取,返回Element对象数组
var clss = document.getElementsByClassName('cls');
-
查看参考手册,属性、方法
示例代码
<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>JS-对象-BOM-获取元素</title>
</head><body><img id="h1" src="img/三只松鼠.png"><br><br><div class="cls">甲柒</div><br><div class="cls">CSDN</div><br><input type="checkbox" name="hobby">电影<input type="checkbox" name="hobby">旅游<input type="checkbox" name="hobby">教育
</body><script>// 1.获取Element元素// 1.1获取元素-根据ID获取// var img = document.getElementById('h1');// alert(img);// 1.2获取元素-根据标签获取 - div// var divS = document.getElementsByTagName('div');// for (let i = 0; i < divS.length; i++) {// alert(divS[i]);// }// 1.3获取元素-根据name属性获取// var inS = document.getElementsByName('hobby');// for (let i = 0; i < inS.length; i++) {// alert(inS[i]);// }// 1.4获取元素-根据class属性获取// var divS = document.getElementsByClassName('cls');// for (let i = 0; i < divS.length; i++) {// alert(divS[i]);// }// 1.5查询参考手册,属性、方法var divS = document.getElementsByClassName('cls');var div1 = divS[0];div1.innerHTML = "甲柒大佬~~~~"
</script></html>
代码运行结果:略
案例:
通过DOM操作,完成如下效果实现
- 点亮灯泡
- 将所有的div标签的标签体内容后面加上:very good
- 使用所有的复选框呈现被选中的状态
示例代码
<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>JS-对象-BOM-</title>
</head><body><img id="h1" src="img/off.gif"><br><br><div class="cls">甲柒</div><br><div class="cls">CSDN</div><br><input type="checkbox" name="hobby">唱<input type="checkbox" name="hobby">跳<input type="checkbox" name="hobby">rap
</body>
<script>// 1. 点亮灯泡:src属性值的改变var img = document.getElementById('h1');img.src = "img/on.gif"// 2. 将所有的div标签的标签体内容后面加上:very goodvar divS = document.getElementsByTagName('div');for (let i = 0; i < divS.length; i++) {const element = divS[i];element.innerHTML += "<font color='red'> very good</font>"}// 3. 使用所有的复选框呈现被选中的状态var inS = document.getElementsByName('hobby');for (let i = 0; i < inS.length; i++) {const element = inS[i];element.checked = true;//选中状态}
</script></html>
代码运行结果
js监听事件
事件:
HTML事件是发生在HTML元素上的"事情"。比如:
- 按钮被点击
- 鼠标移到元素上
- 按下键盘按键
事件监听:
JavaScript可以在事件被侦测到时执行代码
事件绑定
-
方式一:通过HTML标签中的事件属性进行绑定
<input type="button" onclick="on()" value="按钮1"> <script>function on() {alert('我被点击了~~~');} </script>
-
方式二:通过DOM元素属性绑定
<input type="button" id="btn" value="按钮2"><script>document.getElementById('btn').onclick = function () {alert('我被点击了!!!');}</script>
常见事件
事件名称 | 说明 |
---|---|
onclick | 鼠标单击事件 |
onblur | 元素失去焦点 |
onfocus | 元素获取焦点 |
onload | 某个页面或图像被完成加载 |
onsubmit | 当表单提交时触发该事件 |
onkeydown | 某个键盘的键被按下 |
onmouseover | 鼠标被移到某元素之上 |
onmouseout | 鼠标从某元素移开 |
示例代码:
<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>JS-事件-常见事件</title>
</head><body onload="load()"><form action="" style="text-align: center;" onsubmit="subfn()"><input type="text" name="username" onblur="bfn()" onfocus="ffn()" onkeydown="kfn()"><input id="b1" type="submit" value="提交"><input id="b2" type="button" value="单机事件" onclick="fn1()"></form><br><br><br><table width="800px" border="1" cellspacing="0" align="center" onmouseover="over()" onmouseout="out()"><tr><th>学号</th><th>姓名</th><th>分数</th><th>评语</th></tr><tr align="center"><th>001</th><th>张三</th><th>90</th><th>很优秀</th></tr><tr align="center"><th>002</th><th>甲柒</th><th>99</th><th>优秀</th></tr><tr align="center"><th>003</th><th>李四</th><th>59</th><th>不及格</th></tr></table>
</body>
<script>// | onclick | 鼠标单击事件 |function fn1() {console.log("我被点击了....");}// | onblur | 元素失去焦点 |function bfn() {console.log("失去焦点、、、");}// | onfocus | 元素获取焦点 |function ffn() {console.log("获得焦点!!!");}// | onload | 某个页面或图像被完成加载 |function load() {console.log("页面加载完成~~~");}// | onsubmit | 当表单提交时触发该事件 |function subfn() {console.log("表单被提交///");}// | onkeydown | 某个键盘的键被按下 |function kfn() {console.log("获得焦点。。。");}// | onmouseover | 鼠标被移到某元素之上 |function over() {console.log("鼠标移入了。。。");}// | onmouseout | 鼠标从某元素移开 |function out() {console.log("鼠标移出了····");}
</script></html>
代码运行结果
案例
通过事件监听及DOM操作,完成如下效果实现
- 点击“点亮”按钮点亮灯泡,点击“熄灭”按钮熄灭灯泡。
- 输入框鼠标聚焦后,展示小写;鼠标离焦后,展示大写。
- 点击“全选”按钮使所有的复选框呈现被选中的状态,点击“反选”按钮使所有的复选框呈现取消勾选的状态。
示例代码
<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>JS-事件-案例</title>
</head><body><img id="light" src="img/off.gif"><br><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">rap<br><input type="button" value="全选" onclick="checkAll()"><input type="button" value="反选" onclick="reverse()">
</body>
<script>// 1. 点击“点亮”按钮点亮灯泡,点击“熄灭”按钮熄灭灯泡。---onclickfunction on() {// a. 获取img对象var img = document.getElementById("light");// b. 设置src属性img.src = "img/on.gif";}function off() {// a. 获取img对象var img = document.getElementById("light");// b. 设置src属性img.src = "img/off.gif";}// 2. 输入框鼠标聚焦后,展示小写;鼠标离焦后,展示大写。---onfocus onblurfunction lower() {//小写// a. 获取输入框元素对象var input = document.getElementById("name");// b. 将值转为小写input.value = input.value.toLowerCase();}function upper() {//大写// a. 获取输入框元素对象var input = document.getElementById("name");// b. 将值转为大写input.value = input.value.toUpperCase();}// 3. 点击“全选”按钮使所有的复选框呈现被选中的状态,点击“反选”按钮使所有的复选框呈现取消勾选的状态。---onclickfunction checkAll() {// a. 获取所有复选框元素对象var hobbyS = document.getElementsByName("hobby");// b. 设置选中状态for (let i = 0; i < hobbyS.length; i++) {const element = hobbyS[i];element.checked = true;}}function reverse() {// a. 获取所有复选框元素对象var hobbyS = document.getElementsByName("hobby");// b. 设置未选中状态for (let i = 0; i < hobbyS.length; i++) {const element = hobbyS[i];element.checked = false;}}
</script></html>
代码运行结果
mg对象
var img = document.getElementById(“light”);
// b. 设置src属性
img.src = “img/off.gif”;
}
// 2. 输入框鼠标聚焦后,展示小写;鼠标离焦后,展示大写。---onfocus onblur
function lower() {//小写// a. 获取输入框元素对象var input = document.getElementById("name");// b. 将值转为小写input.value = input.value.toLowerCase();
}
function upper() {//大写// a. 获取输入框元素对象var input = document.getElementById("name");// b. 将值转为大写input.value = input.value.toUpperCase();
}
// 3. 点击“全选”按钮使所有的复选框呈现被选中的状态,点击“反选”按钮使所有的复选框呈现取消勾选的状态。---onclick
function checkAll() {// a. 获取所有复选框元素对象var hobbyS = document.getElementsByName("hobby");// b. 设置选中状态for (let i = 0; i < hobbyS.length; i++) {const element = hobbyS[i];element.checked = true;}
}
function reverse() {// a. 获取所有复选框元素对象var hobbyS = document.getElementsByName("hobby");// b. 设置未选中状态for (let i = 0; i < hobbyS.length; i++) {const element = hobbyS[i];element.checked = false;}
}
```
代码运行结果