JavaScript
的解析引擎html
页面的交互过程,可以用来控制html
元素,让页面有一些动态的效果,增强用户体验Nombase
公司开发了第一门客户端脚本语言,专门用于表单的校验,命名为C--
,后来改名为ScriptEase
Netscape
(网景)公司开发了一门客户端脚本语言:LiveScript
。后来请来SUN
公司的专家修改LiveScript
,并改名为JavaScript
JScript
语言ECMA
(欧洲计算机制造商协会)制定了ECMAScript
,即所有客户端脚本语言的标准JavaScript
= ECMAScript
+ JavaScript
自己特有的东西(BOM
+DOM
)
基本语法
与html
结合方式
JS
:定义<script>
,标签体内容就是js
代码JS
:定义<script>
,通过src
属性引入外部的js
文件【注意】:
<script>
可以定义在html
页面的任何地方,但是定义的位置会影响执行顺序<script>
标签可以定义多个<!--内部样式--> <script> alert("hello world"); </script> <!--外部样式--> <script src="js/1.js"></script>
//注释内容
/*注释内容*/
number
:数字,范围:整数/
小数/
NaNstring
:字符串boolean
:true
和false
null
:一个对象为空的占位符undefined
:未定义。如果一个变量没有给初始值,则会被默认赋值为undefined
var 变量名 = 初始化值;
typeof
:获取数据类型<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> <script> //定义变量 var a = 3; alert(a); a = "abc"; alert(a); //定义number类型 var num1 = 3; var num2 = 2.4; var num3 = NaN; //输出到页面上 document.write(num1 + "---" + typeof (num1) + "<br>"); document.write(num2 + "---" + typeof (num2) + "<br>"); document.write(num3 + "---" + typeof (num3) + "<br>"); //定义string类型 var str1 = "abc"; var str2 = 'cde'; document.write(str1 + "---" + typeof (str1) + "<br>"); document.write(str2 + "---" + typeof (str2) + "<br>"); //定义boolean var flag = true; document.write(flag + "---" + typeof (flag) + "<br>"); //定义null,undefined var obj1 = null; var obj2 = undefined; var obj3; document.write(obj1 + "---" + typeof (obj1) + "<br>"); document.write(obj2 + "---" + typeof (obj2) + "<br>"); document.write(obj3 + "---" + typeof (obj3) + "<br>"); </script> </head> <body> </body> </html>
效果:
【注意】:typeof
运算符对null
值会返回Object
运算符
一元运算符:只有一个运算数的运算符
++,--,+(正号),-(负号)
【注意】:在JS
中,如果运算数不是运算符所要求的类型,则会自动进行类型转换
string
转number
:按字面值转换,若字面值不是数字,则转为NaN
boolean
转number
:true
转为1,false
转为0算数运算符
+,-,*,/(非整除运算),%
赋值运算符
=,+=,-=
比较运算符
<,>,<=,>=,==,===(全等于)
比较方式:
===
全等于必须满足类型和值都相等)逻辑运算符
&&,||,!
其他类型转boolean
:
number
:0或NaN为假,其他为真string
:空字符串为假,其他为真null、undefined
:都为假三元运算符
? :
流程控制语句
if else
switch
while
do while
for
JS
特殊语法
;
结尾,如果一行只有一条语句,则;
可以省略(不建议这样做)var
关键字,也可以不使用
练习:打印九九乘法表
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>九九乘法表</title> <style> td { border: 1px solid black; } </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 + "=" + j * i + " "); document.write("</td>"); } document.write("</tr>"); } document.write("</table>") </script> </head> <body> </body> </html>
效果:
基本对象
Function
:函数(方法)对象
创建:
var fun=new Fuction(形参列表,方法体);
function 方法名(形参列表){ 方法体 }
var 方法名=function(形参列表){ 方法体 }
属性:
length
:代表形参的个数特点:
调用:
方法名称(实参列表);
<script> function fun2(a, b) { alert(a + b); } fun2(2, 2); var fun3 = function (a, b) { alert(a + b); } fun3(1, 2); function add() { var sum = 0; for (var i = 0; i < arguments.length; i++) { sum += arguments[i]; } return sum; } var a = add(1, 2, 3, 4); alert(a); //10 </script>
Array
(数组对象)
创建
var arr=new Array(元素列表);
var arr=new Array(默认长度);
var arr=[元素列表];
方法
join(参数)
:将数组中的元素按照指定分隔符拼接为字符串push()
:向数组的末尾添加一个或更多元素,并返回新的长度pop()
:删除并返回数组的最后一个元素属性
特点
<script> var arr1 = new Array(1, 2, 3); var arr2 = new Array(5); var arr3 = [1, 2, 3, 4]; var arr = [1, "abc", true]; document.write(arr[4] + "<br>"); //undefined document.write(arr.length + "<br>"); //3 document.write(arr.join() + "<br>"); //1,abc,true document.write(arr.join("--") + "<br>"); //1--abc--true arr.push(5); //添加元素 arr.pop(); //删除最后一个元素 </script>
Boolean
:基础类型boolean
的包装类
Number
:基础类型number
的包装类
String
:基础类型string
的包装类
Date
:日期对象
var date=new Date();
toLocaleString()
:返回当前date
对象对应的时间本地字符串格式getTime()
:获取毫秒值(自1970年1月1日零点)Math
:数学对象
Math.方法名()
random()
:返回[0 , 1)
之间的随机数ceil()
:向上取整floor()
:向下取整round()
:四舍五入//输出1到100以内的随机数 var number = Math.floor((Math.random() * 100)) + 1;
PI
RegExp
:正则表达式对象(定义字符串的组成规则)
单个字符:
\d
:单个数字字符\w
:单个单词字符量词符号:
?
:表示出现0次或1次*
:表示出现0次或多次+
:表示出现1次或多次{m, n}
:表示m<=数量<=n
开始结束符号:
^
$
正则对象:
创建
var reg= new RegExp("正则表达式");
var reg= /正则表达式/;
test(参数)
:验证指定的字符串是否符合正则定义的规范<script> var reg1 = new RegExp("^\\w{6,12}$"); var reg2 = /^\w{6,12}$/; var username = "jiangchao"; document.write(reg1.test(username)); //true </script>
Global
encodeURI()
:url编码decodeURI()
:url解码encodeURIComponent()
:url编码,编码的字符更多decodeURIComponent()
:url解码<script> var str = "长沙理工大学"; var encode = encodeURI(str); document.write(encode + "<br>"); var str1 = "长沙理工大学"; var encode1 = encodeURIComponent(str1); document.write(encode1 + "<br>"); var a = NaN; document.write(a == NaN + "<br>"); //有NaN的任何等式==都为false document.write(isNaN(a) + "<br>"); var str="123"; var number = parseInt(str); //123 var jscode = "alert(123)"; eval(jscode); //弹出提示框:123 </script>
Browser Object Model
:浏览器对象模型Window
:窗口对象History
:历史记录对象Location
:地址栏对象Navigator
:浏览器对象Screen
:显示器对象特点:
Window
对象不需要创建,可以直接调用window
使用:window.方法名()
window
引用可省略:方法名()
方法:
alert()
:显示带有一段消息和一个确认按钮的警告框confirm()
:显示带有一段消息以及确认按钮和取消按钮的对话框
prompt()
:显示可提示用户输入的对话框
close()
:关闭浏览器窗口
open()
:打开一个新的浏览器窗口
window
对象setTimeout()
:在指定的毫秒数后调用函数或计算表达式
js
代码或者方法对象clearTimeout()
:取消由setTimeout()
方法设置的对象setInterval()
:按照指定的周期(以毫秒计)来调用函数或计算表达式clearInterval()
:取消由setInterval()
方法设置的对象<!--轮播图--> <img id="picture" src="../images/p1.jpg" width="100%" height=400px> <script> var cnt = 1; setInterval(fun, 3000); function fun() { cnt++; var picture = document.getElementById("picture"); if (cnt > 3) { cnt = 1; } picture.src = "../images/p" + cnt + ".jpg"; } </script>
属性:
BOM
对象:
history
location
Navigator
Screen
DOM
对象:
document
window.location
location
reload()
:重新加载当前文档,刷新页面href
:设置或返回完整的URL<!--5秒后自动跳转到百度--> <p> <span id="time">5</span>秒之后,自动跳转到百度 </p> <script> var second = 5; var time = document.getElementById("time"); function showTime() { second--; if (second == 0) { location.href = "https://www.baidu.com"; } time.innerHTML = second; } setInterval(showTime, 1000); </script>
window.history
history
back()
:加载history
列表中的前一个URL
forward()
:加载history
列表中的下一个URL
go()
:加载history
列表中的某个具体页面length
:返回当前窗口历史列表中的URL
数量<input type="button" id="btn" value="获取历史记录个数"> <input type="button" id="forward" value="前进"> <script> var btn = document.getElementById("btn"); btn.onclick = function () { var length = history.length; alert(length); } var forward = document.getElementById("forward"); forward.onclick = function () { history.forward(); history.go(2); } </script>
概念:Document Object Model
:文档对象模型
W3C DOM标准被分为三个不同的部分:
DOM
:针对任何结构文档的标准模型
Document
:文档对象Element
:元素对象Attribute
:属性对象Text
:文本对象Comment
:注释对象Node
:结点对象,其他5个的父对象XML DOM
:针对XML文档的标准模型HTML DOM
:针对HTML文档的标准模型window.document
document
Element
对象
getElementById()
:根据id属性值获取元素对象,id属性值一般唯一getElementByTagName()
:根据元素名称获取元素对象们,返回一个数组getElementByClassName()
:根据Class
属性值获取元素对象们,返回一个数组getElementByName()
:根据name
属性值获取元素对象们,返回一个数组DOM
对象
createAttribute(name)
:createComment()
:createElement()
:createTextNode()
:document
来获取和创建setAttribute
:设置属性removeAttribute
:删除属性<a>click me</a> <input type="button" id="set" value="设置属性"> <input type="button" id="remove" value="删除属性"> <script> var set = document.getElementById("set"); var remove = document.getElementById("remove"); set.onclick = function () { var element = document.getElementsByTagName("a")[0]; element.setAttribute("href", "https://www.baidu.com"); } remove.onclick = function () { var element = document.getElementsByTagName("a")[0]; element.removeAttribute("href"); } </script>
CRUD dom
数:
appendChild()
:向节点的子节点列表的结尾添加新的子节点removeChild()
:删除并返回当前节点的指定子节点replaceChild()
:用新节点替换一个子节点parentNode
:返回节点的父节点//动态表格 <style> div { text-align: center; margin: 50px; } table { border: 1px solid; margin: auto; width: 500px; } td, th { text-align: center; border: 1px solid; } </style> </head> <body> <div> <input type="text" id="id" placeholder="请输入编号"> <input type="text" id="name" placeholder="请输入姓名"> <input type="text" id="sex" placeholder="请输入性别"> <input type="button" id="add_btn" value="添加"> </div> <table id="tab"> <caption>学生信息表</caption> <tr> <th>编号</th> <th>姓名</th> <th>性别</th> <th>操作</th> </tr> <tr> <td>1</td> <td>路飞</td> <td>男</td> <td> <a href="javascript:void(0);" onclick="delTr(this);">删除</a> </td> </tr> <tr> <td>2</td> <td>索隆</td> <td>男</td> <td> <a href="javascript:void(0);" onclick="delTr(this);">删除</a> </td> </tr> <tr> <td>3</td> <td>娜美</td> <td>女</td> <td> <a href="javascript:void(0);" onclick="delTr(this);">删除</a> </td> </tr> </table> <script> //添加功能 //1.获取按钮 var add = document.getElementById("add_btn"); add.onclick = function () { //2.获取文本框内容 var id = document.getElementById("id").value; var name = document.getElementById("name").value; var sex = document.getElementById("sex").value; //3.创建td,赋值td的标签体 var text_id = document.createTextNode(id); var text_name = document.createTextNode(name); var text_sex = document.createTextNode(sex); var td_id = document.createElement("td"); td_id.appendChild(text_id); var td_name = document.createElement("td"); td_name.appendChild(text_name); var td_sex = document.createElement("td"); td_sex.appendChild(text_sex); var td_a = document.createElement("td"); var ele_a = document.createElement("a"); ele_a.setAttribute("href", "javascript:void(0);"); ele_a.setAttribute("onclick", "delTr(this);"); var text_a = document.createTextNode("删除"); ele_a.appendChild(text_a); td_a.appendChild(ele_a); //4.创建tr,添加td到tr中 var tr = document.createElement("tr"); tr.appendChild(td_id); tr.appendChild(td_name); tr.appendChild(td_sex); tr.appendChild(td_a); //5.获取table var table = document.getElementsByTagName("table")[0]; table.appendChild(tr); } //删除功能 function delTr(obj) { var table = obj.parentNode.parentNode.parentNode; var tr = obj.parentNode.parentNode; table.removeChild(tr); } </script> </body>
标签体的设置和获取:innerHTML
使用html元素对象的属性
控制元素样式
使用元素的style
属性来设置
div1.style.border="1px solid red"; div1.style.fontSize="20px";
提前定义好类选择器的样式,通过元素的className
属性来设置其class
属性值
div1.className="d1";
案例:
//使用HTML DOM添加功能 var add = document.getElementById("add_btn"); add.onclick = function () { var id = document.getElementById("id").value; var name = document.getElementById("name").value; var sex = document.getElementById("sex").value; var table = document.getElementsByTagName("table")[0]; table.innerHTML += "<tr>\n" + " <td>" + id + "</td>\n" + " <td>" + name + "</td>\n" + " <td>" + sex + "</td>\n" + " <td>\n" + " <a href=\"javascript:void(0);\" οnclick=\"delTr(this);\">删除</a>\n" + " </td>\n" + " </tr>"; }
概念:某些组件被执行了某些操作后,触发某些代码的执行
常见的事件:
onclick
:单击事件ondblclick
:双击事件onblur
:失去焦点onfocus
:元素获得焦点onload
:一张页面或一幅图像完成加载onmousedown
:鼠标按钮被按下
event
对象event
对象的button
属性可以获取鼠标哪个按钮被点击了onmouseup
:鼠标按钮被松开onmousemove
:鼠标被移动onmouseover
:鼠标移到某元素之上onmouseout
:鼠标从某元素移开onkeydown
:某个按键被按下onkeyup
:某个按键被松开onkeypress
:某个按键被按下并松开onchange
:域的内容被改变onselect
:文本被选中onsubmit
:确认按钮被点击false
则表单被阻止提交onreset
:重置按钮被点击实例演示:
<form id="form"> <input id="input"></input> <input type="submit"> </form> <script> var input = document.getElementById("input"); //1.失去焦点事件 input.onblur = function () { alert("失去焦点"); } //2.绑定鼠标移动到元素之上事件 input.onmouseover = function () { alert("鼠标移动到上面了"); } //3.绑定鼠标单击事件 input.onmousedown = function (event) { alert(event.button); //鼠标按键从左至右是0,1,2 } //4.设置按键被按下事件 input.onkeydown = function (event) { //13对应的按键是回车 if (event.keyCode == 13) { alert("提交表单"); } } document.getElementById("form").onsubmit = function () { return false; } </script>
<img id="p" src="../images/off.jpg" onclick="fun()"> <script> var flag = false; function fun() { var p = document.getElementById("p"); if (flag == false) { p.src = "../images/on.jpg"; flag = true; } else { p.src = "../images/off.jpg"; flag = false; } } </script>