JavaScript--W3School
JavaScript
概念(一门客户端脚本语言)
- 运行在客户端浏览器中。每一个浏览器都有javaScript的解析引擎
- 脚本语言:不需要编译,直接就可以被浏览器解析执行
功能
可以增强用户与html页面的交互过程,可以来控制html元素,让页面有一些动态效果,增强用户的体验。
JavaScript发展史
- 1992年,Nombase公司,开发出第一门客户端脚本语言,专门用于表单的校验。命名为c–,后来更名为ScriptEase
- 1995年,Netscape(网景)公司,开发了一门客户端脚本语言:LiveScript。后来请来了Sun公司的专家,修改LiveScript,命名为JavaScript(JavaScript和Java没有半毛钱关系,如果有,就是SUN公司参与了设计)
- 1996年,微软抄袭JavaScript开发出了JScript
- 1997年,ECMA(欧洲计算机制造商协会)ECMAScript,就是所有客户端脚本语言的标准。
- javaScript=ECMAScript+JavaScript自己特有的东西(BOM+DOM)
ECMAScript:客户端脚本语言的标准
基本语法
与html结合的方式
- 内部JS:定义< script>,标签体内容就是js代码
- 外部JS:定义< script>,定义src属性引入外部的js文件
注意:
1. < script>可以定义在html页面的任意位置,但是定义的位置会影响执行的顺序
2. < script>可以定义多个
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<script>
alert("hello world");
</script>
<script src="JS/jsDemo.js"></script>
</head>
<body>
<input type="text">
<!-- <script>-->
<!-- alert("hello world");-->
<!-- </script>-->
</body>
</html>
注释
单行注释://注释内容
多行注释:/* 注释内容*/
数据类型
- 原始数据类型(基本数据类型)区分大小写
1. number:数字。整数/小数/NaN(not a number 一个不是数字的数字类型,区分大小写)
2. string:字符串。字符串(没有字符的概念)单引号多引号都可以"abc" ‘abc’ ‘a’
3. boolean:布尔。true和false
4. null:一个对象为空的占位符
5. undefined:未定义。如果一个变量没有给初始化值,则会默认为undefined - 引用数据类型:对象
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<script>
//定义number变量
var num=1;
var num2 = 2.2;
var num3 = NaN;
document.write(num+"<br>");
document.write(num2+"<br>");
document.write(num3+"<br>");
//定义String
var str="abc";
var str1="def";
var str2='ab';
document.write(str+"<br>");
document.write(str1+"<br>");
document.write(str2+"<br>");
//定义null,undefined
var obj=null;
var obj2=undefined;
var obj3;
document.write(obj+"<br>");
document.write(obj2+"<br>");
document.write(obj3+"<br>");
//定义boolean
var b=true;
document.write(b+"<br>");
</script>
</head>
<body>
<input type="text">
</body>
</html>
变量
- 变量:一小块存储数据的内存空间
- Java语言是强数据类型语言(在开辟变量存储空间时,定义了空间将来存储的数据的数据类型,只能存储固定类型的数据)
- JavaScript是弱类型语言(在开辟变量存储空间时,不定义空间将来存储的数据的数据类型,可以存放任意数据类型)所以typeof(变量名)获取数据类型没什么实际意义
运算符
一元运算符(只有一个运算数的运算符)
- ++,–:自增自减。在前:先自增自减再运算。在后:先运算再自增自减。
- +,-:正号,负号。
- 注意:在JS中,如果运算数不是运算符的类型,那么JS引擎会自动将运算数进行类型转换。例如其他类型转number:
- string转number,按照字面值转换,如果字面值不是数字,则转为NaN(不是数字的数字)
- boolean转number,+/-true为1,+/-false为0
- null为0
- undefined为NaN
算术运算符
+、-、*、/、%
比较运算符
>、 <、 ==、 >=、 <=、 ===(全等于)
比较方式:
- 类型相同,直接比较(字符串:按照字典顺序比较。按位逐一比较,直到得出大小为止)
- 类型不同,先进行类型转换,在比较(===全等于,在比较之前,先判断类型,若类型不同,则直接返回false)
逻辑运算符
&&、||、!
!进行逻辑转换:其他类型转boolean:
- number :0或NaN为假,其他为真
- string:空串为false,其他为true
- null和undefined:都是false
- 对象:所有对象都为true
三元运算符
表达式1?值1:值2
特殊语法(建议不知道)
- 语句以分号结尾。如果一行只有一条语句,可以不写分号。但是不建议省略。
- 变量的定义用var关键字,也可以不用(用:定义的变量是局部变量。不用:定义的变量是全局变量)
流程控制语句(和java一模一样)
- if…else…
- switch:
- 在java中,switch可以接受的变量类型:byte,int,short,char,枚举(1.5后),String(1.7后)
- 在JS中,switch可以接受任意的原始数据类型
- while
- do…while
- for(注意这里面循环用到的变量用var关键字定义)
示例99乘法表
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<style>
td{
border: 1px solid;
}
</style>
<script>
document.write("<table align='center'>");
for (var i=1;i<=9;i++){
document.write("<tr>");
for (var j=1;j<=i;j++){
document.write("<td>");
document.write(j+"*"+i+"="+(i*j)+" ");
document.write("</td>");
}
document.write("</tr>");
}
document.write("</table>");
</script>
</head>
<body>
</body>
</html>
基本对象
Function对象
创建
- var fun=new Function(形参列表,方法体);
- Function 方法名(形参列表){方法体}
- var 方法名=Function(形参列表){方法体}
属性
length:形参个数
特点
- 方法定义中返回值类型,形参类型都为var,都不用写
- 方法是一个对象,如果定义名称相同的方法,会覆盖
- 在JS中,方法的调用只与方法名有关,实参个数可以任意
- 在方法声明中会有一个隐藏的内置对象(数组),arguments,封装所有的实参。
调用
方法名称(实参列表);
Array
创建
- var arr=new Array(元素列表);
- var arr=new Array(数组长度);
- var arr=[元素列表];
方法
- join(参数):将数组中的元素按照指定的分隔符拼接成字符串
- push():像数组末尾添加一个或者多个元素,并返回数组长度
属性
- length:数组的长度
特点
- JS中,数组元素的类型可变
- JS中,数组元素的长度可变
Date(日期对象)
创建
var date=new Date();
方法
- toLocalString():用本地字符串格式返回当前date对象对应的时间
- getTime():获取毫秒值。当前时间到1970/1/1的毫秒差。可以当成时间戳。
Math(数学对象)
创建(Math对象不用创建,直接使用)
Math.方法名
方法
- round():四舍五入
- ceil():向上取整
- floor():向下取整
- random():[0,1)之间的随机数
[1,100]的随机正整数小案例
属性(PI)
RegExp(正则表达式对象)表单校验
正则表达式(定义字符串的组成规则)
- 单个字符:[ ]。例如[a] [a-zA-Z0-9_]
特殊符号代表特殊含义的单个字符:\d单个数字字符[0-9]。\w单个单词字符[a-zA-Z0-9_] - 量词符号:
? 出现0个或者1个
* 出现0个或者多个
+ 出现1个或者多个
{m,n}出现>=m次<=n次(如果m缺省,{,n}则上限为n。如果n缺省,{m,}则下限为m)
^开始:必须以其后的子表达式开始;
$结束:必须以其前面的子表达式结束
正则对象
- 创建(1.var reg=new RegExp(“正则表达式”);2. var reg=new RegExp(/正则表达式/))双引号里面的\要转义
- 方法(reg.test(字符串对象));
Global
- 特点:全局对象,这个Global种封装的方法不需要对象就可以直接调用。方法名();
- 方法:
- encodeURI():url编码
- decodeURI():url编码
- encodeURIComponent():url编码,编码的字符更多
- decodeURIComponent():url解码
- parseInt():将字符串转换为数字(注意判断每一个字符是否是数字,知道不是数字为止,将前边数字部分转为number)
- isNaN():判断一个值是否为NaN(NAN六亲不认,连自己都不认,NaN参与的==比较全部为false)
- eval():JS字符串,并把它作为脚本代码来执行。
<script>
var baidu=encodeURI("百度");
document.write(baidu+"<br>");//%E7%99%BE%E5%BA%A6
var baidu1=decodeURI("%E7%99%BE%E5%BA%A6");
document.write(baidu1+"<br>");//百度
var n=encodeURIComponent("https://www.baidu.com/?tn=80035161_1_dg");
document.write(n+"<br>");//https%3A%2F%2Fwww.baidu.com%2F%3Ftn%3D80035161_1_dg
var n1=decodeURIComponent("https%3A%2F%2Fwww.baidu.com%2F%3Ftn%3D80035161_1_dg");
document.write(n1+"<br>");//https://www.baidu.com/?tn=80035161_1_dg
var str="123abc123";
document.write(parseInt(str)+"<br>");//123
var str1="abc123";
document.write(parseInt(str1)+"<br>");//NaN
var o2=NaN;
document.write((o2==NaN)+"<br>");//false
document.write(isNaN(o2)+"<br>");//true
eval("alert(123456)");
</script>
BOM
概念
Browser Object Model浏览器对象模板(将浏览器的各个部分封装成对象)
组成
- Window:窗口对象(包含html的body 所以包含DOM的document对象)
- Location: 地址栏对象
- History :历史记录对象
- Screen:屏幕对象(不重要)
- Navigator:浏览器对象(不重要)
Window窗口对象
- 对象不需要创建
- 调用方法:
window.方法名()
方法名() - 方法:
- 与弹出有关的方法
alert() 显示带有一个消息和一个确认按钮的警示框
confirm() 显示带有一段消息、确认按钮、取消按钮的对话框(返回值:点击确认返回true,点击取消返回false)
prompt() 显示可提示用户输入的对话框(返回值为用户输入的内容)
- 与打开关闭有关的方法
close():关闭浏览器窗口(谁调用我,我关谁)
open():打开一个新的浏览器窗口(返回值:新的window对象)
- 与定时器有关的方式
setTimeout() 在指定毫秒数后调用函数或计算表达式
1. 参数1:js代码或函数;参数2:毫秒值
2. 返回值:唯一标识,用于取消定时器
clearTimeout() 取消由setTimeout() 方法设置的timeout
setInterval() 按照指定的周期(毫秒计)来调用函数或计算表达式
clearInterval() 取消由serInterval()设置的timeout
- 与弹出有关的方法
案例:轮播图
4. 属性:
1. 获取其他BOM对象:history location Navigator Screen
2. 获取DOM对象document
locatiom地址栏对象
- 创建/获取:window.location location
- 方法:reload() 刷新、重新加载
- 属性:href 设置/返回完整的URL
案例:5秒倒计时后自动跳转到百度
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>案例</title>
<style>
p{
text-align: center;
}
span{
color: red;
}
</style>
</head>
<body>
<p>
<span id="time">5</span>秒之后跳转到百度
</p>
<script>
//1.获取span
var gettime=document.getElementById("time");
//2.控制显示时间,修改标签体内容
var time=5;
//3.函数
function fun() {
time--;
if (time<=0){
location.href="https://www.baidu.com";
}
gettime.innerHTML=time+"";
}
//4.循环计时器,每隔一秒调用一次函数
window.setInterval(fun,1000);
</script>
</body>
</html>
history对象
- 创建/获取: window.history history
- 方法:
back() 加载当前窗口history列表中的前一个URL
forward() 加载当前窗口history列表中的后一个URL
go() 加载当前窗口history列表中的某个具体页面 - 属性:length 返回当前窗口历史列表记录中的URL数量
DOM
简单学习
document object model文档对象模型
- 功能:控制(增删改查)html文档的内容
- 代码(获取页面标签/元素对象Element)
var 对象名=document.getElementById(“id值”):通过元素的id值获取元素对象 - 操作Element对象:
- 修改属性值:对象名.属性名=“”;(明确获取的对象是哪一个,查看API文档找其中有哪些属性可以设置)
- 修改标签体内容:属性innerHTML
详细
将标记语言文档的各个组成部分,封装成对象,可以使用这些对象,对标记语言文档进行CRUD(增删改查)的动态操作。
W3C DOM 标准被分为3各不同的部分:
- 核心DOM (针对任何结构化文档的标准模型)
Document:文档对象
Element: 元素对象
Attribute: 属性对象
Text: 文本对象
Comment: 注释对象
Node: 节点对象(其他5个的父对象) - XML DOM(针对XML文档的标准模型)
- HTML DOM(针对HTML文档的标准模型)
核心DOM
HTML DOM
事件简单学习
某些组件被执行了某些操作后,出发某些代码的执行。
如何绑定事件
-
直接在html标签上,指定事件的属性(操作),属性值为js代码。
单击事件:onclick
-
通过js获取元素,指定事件属性,设置一个函数 (降低耦合)
实现两照片点击来回切换的效果
- 获得照片1对象
- 设置标记判断照片是1还是2
- 设置点击事件,如果是1则点击切换为2并且修改标记,如果是2则点击切换为1并修改标记。
<body>
<img id="i1"src="img/i1.jpg"height="70dp" width="70dp">
<script>
var i=document.getElementById("i1");
var flag=false;//代表图片1
i.οnclick=function(){
if (flag==false){//代表1要切换为2
i.src="img/i2.jpg";
flag=true;
}else{//代表2要切换为1
i.src="img/i1.jpg";
flag=false;
}
};
</script>
</body>
F12的控制台console可以看到JS代码的错误
案例(JS动态添加删除表格数据)
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>案例</title>
</head>
<body>
<div>
<input id="num" type="text" name="num" placeholder="请输入编号">
<input id="name" type="text" name="name" placeholder="请输入姓名">
<input id="sex" type="text" name="sex" placeholder="请输入性别">
<input id="btn" type="button" name="btn" value="添加">
</div>
<table border="1" id="table">
<caption>学生信息管理</caption>
<tr>
<th>编号</th>
<th>姓名</th>
<th>性别</th>
<th>操作</th>
</tr>
<tr>
<td>1</td>
<td>1</td>
<td>1</td>
<td><a href="JavaStrap:void(0);" onclick="del(this);">删除</a></td>
</tr>
</table>
<script>
var btn=document.getElementById("btn");
btn.onclick=function () {
var num=document.getElementById("num").value;
var name=document.getElementById("name").value;
var sex=document.getElementById("sex").value;
var table=document.getElementById("table");
table.innerHTML+="<tr>\n" +
" <td>"+num+"</td>\n" +
" <td>"+name+"</td>\n" +
" <td>"+sex+"</td>\n" +
" <td><a href=\"JavaStrap:void(0);\" οnclick=\"del(this);\">删除</a></td>\n" +
" </tr>"
}
function del(obj){
var table=obj.parentNode.parentNode.parentNode;
var tr=obj.parentNode.parentNode;
table.removeChild(tr);
}
</script>
</body>
</html>