JavaScript是一种弱类型,直译式脚本语言,主要用于向HTML页面添加动态交互行为,它的解释器被称为JavaScript引擎,为浏览器的一部分,Js支持跨平台使用。
JavaScript组成
1.ECMAScript(核心)
规定了该语言的语法和基本对象
2.DOM(文档对象模型)
包含整个Html页面的内容,规定处理网页内容的方法和接口。
3.BOM(浏览器对象模型)
包含整个浏览器相关的内容,规定与浏览器交互的方法和接口。
应用场景
1.读写HTML元素
2.控制Cookies,包括创建和修改等
3.对浏览器事件做出响应
4.检测访客的浏览器信息,对浏览器事件做出响应
5.基于Node.js技术进行服务器端编程
Js基本使用
1.Js引入
可以在<html>标签中,任何地方添加<script></script>标签,标签中内容就是js代码。
虽然可以放在页面的任何地方,但是规范放在<head>标签中。
<html>
<head>
<title>Demo</title>
1.直接引入
<script type="text/javascript">
alert("Demo")
</script>
2.单独使用一个文件来编写javascript代码,在需要使用的页面中引入该文件
<script src="demo.js" type="text/javascript"/>
</head>
<body>
3.把代码编写放置在a标签的href属性中,点击a标签的时候,就执行里面代码
<a href="javascript:alert('测试')">点击</a>
</body>
</html>
2.Js基本语法
1.变量和常常量
Js区分大小写,弱类型。
每行结尾的分号可有可无,但是建议都写。
1.变量声明的关键字:var
var userName;
Js定义变量无需指定类型,任何类型都使用var声明,var类似java中的Object类型。
变量打印
alert(内容);
console.debug(内容)
2.Js的基本数据类型和常量
整型常量:10进制,8进制,16进制
实型常量:12.32,5E7,4e5
Boolean:true,false
String字符串
注意:Js没用char类型,所以'a'也是一个字符串
字符串中的特殊字符,需要以反斜杠(\)后跟一个普通字符来表示。
null:表示引用任何的内容空间
undefined:未定义,定义未赋值
3.Js运算符和Java相同
注意
= :赋值
== :用来比较变量或常量的内容,不管数据类型
===:比较数据类型和内容,若数据类型相同,且内容相同返回true
2.函数定义
4.函数定义
函数调用时才会执行,将脚本编写为函数,就可以避免页面载入时执行该脚本。
1.定义函数
<script type="text/javascript">
function demo(){
console.debug("打印到控制台");
}
demo(); //调用
</script>
2.带参数和返回值
<script type="text/javascript">
function demo(a, b) {
return a + b;
}
var res = demo(1, 1);
console.debug(res);
</script>
3.匿名函数
在定义函数的时候,没有定义函数名称
此时,可以把函数当作是一个变量赋值
<script type="text/javascript">
var res = function (a, b) {
return a + b;
}
console.debug(res(1,1));
</script>
3.Js构建类
js创建一个类,只需要定义类的构造方法
this关键字
1.在构造方法中:this指新创建的对象
2.在方法中:谁调用this所在的方法,this就是谁
<head>
<title>Demo</title>
<script type="text/javascript">
function User() {
this.name;
this.age;
this.info = function () {
console.debug(this.name+":"+this.age);
}
}
var user = new User();
user.name = "演示";
user.age = 18;
user.info();
</script>
</head>
4.for in
作用
1.遍历数组里所有的数组元素的索引
2.遍历Js对象的所有属性
<head>
<title>Demo</title>
<script type="text/javascript">
function User() {
this.name = "演示";
this.age = 18;
this.info = function () {
printf(this.name+":"+this.age);
}
}
function printf(p) {
console.debug(p);
}
var user = new User();
for (var item in user){
printf("打印属性名:"+ item);
printf("打印属性值:"+ user[item])
}
</script>
</head>
补充
eval():将参数字符串作为一个JavaScript表达式执行。
5.数组
Js中的数组类似于Java中的ArrayList
声明
var arr = [ "数据1", "数据2" ];
/*
* arr.splice(start, deletecount, items)
* 从哪个索引开始操作
* 操作元素的个数
* 要改变的元素结果
*/
<head>
<title>Demo</title>
<script type="text/javascript">
var arr = ["data1","data2"];
arr.splice(1,1); //删除元素
arr.splice(1,2,"添加元素");
arr.splice(0,1,"修改元素");
for(var item in arr){
console.debug(arr[item])
}
</script>
</head>
方法 | 作用 |
---|---|
arr.length | 获取数组长度 |
arr.unshift(values); | 在前面追加元素 |
arr.pop(); | 删除最有一个元素 |
arr.shift(); | 移除第一个元素 |
arr.sort(funct); | 数组排序 |
arr.reverse(); | 颠倒数据中的元素顺序 |
arr.join(seperator) | 数组转换成字符串 |
arr.splice(start, deletecount, items) | 截取字符串 |
6.Js原型
原型即得到对象的时,已经有自定义的方法
关键字prototype
Array.prototype.setFunc = function(){
console.debug("");
}
var arr = [];
//调用
arr.setFunc();
BOM,DOM
1.BOM(浏览器对象模型)
浏览器对象模型,包含整个浏览器相关的内容
Window
setTimeout(code,time):指定多少秒后执行
setInterval(code,time):指定每隔多少秒执行一次
clearTimeout(code):清除定时器
clearInterval():清除定时器
弹窗:confirm("确认删除");
2.DOM(文档对象模型)
Document
每个载入浏览器的HTML文档,都会成为Document对象,通过Document对象,可以访问HTML页面中所有的元素。
事件
onsubmit="写在form标签中,必须有返回值"
onload="此事件只能写一次并且放到body标签中"
onfocus="获取焦点"
onblur="失去焦点"
onmouseover="鼠标经过"
onmouseout="鼠标离开"
获取元素
document.getElementById("id")
获取元素里面的值
document.getElementById("id").value
向页面输出
弹窗:alert();
向浏览器中写入内容:document.write(内容);
向页面指定位置写入内容:innerHTML
document.forms:获取HTML中所有表单元素
document.forms[0]:通过索引指定获取HTML中指定的表单
document.links:获取HTML中所有链接对象
document.writeln("向页面输出数据");
根据Id or Name获取操作的元素
document.getElementById("user")
document.getElementsByName("user")
<!DOCTYPE html>
<html>
<head>
<title>Demo</title>
<script type="text/javascript">
//当文档加载完后,执行
window.onload = function (){
console.debug(document.forms[0]);
console.debug(document.forms);
console.debug(document.links)
}
function getContent() {
var userName = document.getElementById("user").value;
console.debug("获取内容:" + userName);
}
</script>
</head>
<body>
<form action="#" method="get">
<input type="text" id="user" name="name" placeholder="用户名" >
<input type="button" onclick="getContent()" value="获取">
</form>
</body>
</html>
案例
1.前台校验
当用户输入的数据不符合要求时,不提交表单。
思路
通过onsubmit()事件,控制表单提交。
onsubmit() 需要在定义函数的时候给出一个返回值。
return false时表单不能提交。
<!DOCTYPE html>
<html>
<head>
<title>Demo</title>
<script type="text/javascript">
function checkInfo() {
var userName = document.getElementById("user").value;
if(userName != "demo"){
alert("请输入demo");
return false;
}
}
</script>
</head>
<body>
<form action="#" method="get" onsubmit="checkInfo()">
<input type="text" id="user" name="name" placeholder="用户名">
<input type="submit" value="提交">
</form>
</body>
</html>
2.替换图片/轮播
当网页加载完成时,图片开始轮播
页面加载完成事件onload(),此事件只能写一次并且放到body标签中
思路
1.轮播的图片前缀名称相同,仅标识的数字不同
img1,img2...
2.开启定时器,不断调用图片切换方法
window.setInterval(code,time)
参数:开启函数,切换时间,setInterval有返回值,用于清除定时器。
<html>
<head>
<title>Demo</title>
<script type="text/javascript">
var i = 1;
function toggleImg() {
i++;
if(i == 4){
i = 1;
}
document.getElementById("img").src="img/img"+ i +".jpg";
}
//页面加载后调用
function init() {
//定时器
var code = window.setInterval("toggleImg()",2000);
// window.clearInterval(code);
}
</script>
</head>
<body onload="init()">
<img id="img" src="img/img1.jpg">
<br/>
<input type="button" onclick="toggleImg()" value="下一张">
</body>
</html>
Json(JavaScript Object Notation)
JSON是JavaScript原生格式,是一种简单的数据格式,比XML更轻巧,易于阅读和编写,也易于机器解析和生成。
JSON规则
一个对象以"( { "开始,以" }) "结束,()可以省略不写。
对象是一个无序的 " 名称:值 " 集合。
多个" 名称:值 " 之间用" , "分隔。
并列数据的集合,用("[]")表示。
[
{名称1:值1,名称2:值2}
{名称1:值1,名称2:值2}
]
元素值可具有的类型:string,number,object,array,true,false,null
<head>
<title>Demo</title>
<script type="text/javascript">
var user = [
{
name:"user1",
age:18,
hobby:["Java","Android"],
data:{
other:"Other"
}
},
{
name:"user2",
age:18,
hobby:["Web","C"],
data:{
other:"Other"
}
}
]
console.debug(user[0].hobby[1])
console.debug(user[1].data.other)
</script>
</head>
补充
字符串转换为Json
<script type="text/javascript">
var str = "({name:'demo',age:18})"
var user = eval(str);
console.debug(user);
</script>
JQuery
JQuery封装了Js常用的功能代码,JQuery的加载比Js的加载要快,是一个快速、简洁的Js框架。
IDEA引入JQuery
在线引入
<script src="https://code.jquery.com/jquery-3.1.1.min.js"></script>
基本语法
JQuery 的入口函数是在 html 所有标签都加载之后,就会去执行。
Js的 window.onload 事件是等到所有内容,包括外部图片之类的文件加载完后,才会执行。
<!DOCTYPE html>
<html>
<head>
<title>Demo</title>
<script src="https://code.jquery.com/jquery-3.1.1.min.js"
type="text/javascript">
</script>
<script>
$(function () {
//相当于document.getElementById("btn")
$("#btn").click(function () {
alert("demo")
})
})
</script>
</head>
<body>
<input id="btn" type="button" value="Demo">
</body>
</html>
JQuery使用教程
Ajax
Ajax可以使网页实现异步更新,是一种在无需重新加载整个网页的情况下,更新部分网页的技术。
Ajax的基本使用
Ajax使用JQuery的方式
1.Post方式
$.post(url, [data], [callback], [type])
url:请求路径,可以用${pageContext.request.contextPath}获取根路径
data:请求参数
callback:回调函数
type:返回内容格式,默认的是text,xml,html,script,json。
2.Get方式
$.get(url, [data], [callback], [type]);
3.$.ajax(url,[settings])
url:请求路径。
settings:AJAX 请求设置,所有选项都是可选的。
<script type="text/javascript">
function demo(){
$.ajax({
url:"/demo", //url地址
async:true, //是否异步
type:"POST", //请求方式
data:{"name":"张三","age":25},//请求参数
success:function(data){ //响应成功后的回调
alert(data.name);
},
error:function(){ //响应失败后的回调
alert("请求失败");
},
dataType:"json" //返回数据的类型,确定是Json还是文本(text)
});
}
</script>
案例
检验用户名是否存在
<!DOCTYPE html>
<html>
<head>
<title>Demo</title>
<script src="https://code.jquery.com/jquery-3.1.1.min.js"
type="text/javascript">
</script>
<script>
function checkUserName() {
$.get(
"/a",
{username: $("#username").val()},
function (data) {
$("#label").html(data);
},
"text"
);
}
</script>
</head>
<body>
<input id="username" type="text" name="username"
placeholder="用户名">
<input type="button" value="提交" onclick="checkUserName()">
<br/>
<label id="label"></label>
</body>
</html>
public class UserBean {
private String userName;
public UserBean() {
}
public UserBean(String userName) {
this.userName = userName;
}
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
}
public class AServlet extends HttpServlet {
@Override
protected void service(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
req.setCharacterEncoding("utf-8");
resp.setContentType("text/html;charset=utf-8");
// 获取用户名参数
String username = req.getParameter("username");
// 模拟查询用户
UserBean user = new UserBean("demo");
if (!user.getUserName().equals(username)) {
resp.getWriter().write("用户名可用");
} else {
resp.getWriter().write("用户名不可用");
}
}
}