文章目录
JavaScript概述
什么是JavaScript
JavaScript是世界上最流行的脚步语言,属于前端三要素之一,用于控制网页的行为。
历史
ECMAScript可以理解是JavaScript的一个标准
最新版本已经到ES6版本
但是大部分浏览器还停留在ES5代码上
开发环境:IDEA,WebStorm,DW等
快速入门
基本使用及其HelloWorld
-
JS代码位于script标签中
-
script标签一般位于head标签中和位于body标签的底部(内部标签)
<script type=text/javascript> alert("HelloWorld !"); </script>
-
和CSS相同,在项目中可以把JS写成单独的文件,然后通过外部引入(外部标签)
<script src="js/lan.js"></script>
基本语法
-
JavaScript中所有的变量定义都使用var关键字,不像Java要分各种数据类型
<script> var num=1; var name="小蓝"; var a=3.14; var b='学'; if(2>num){ alert(name); } </script>
-
JavaScript注释和Java相同,而且也是严格区别大小写
<script type=text/javascript> alert("HelloWorld !");// 网页弹窗,弹出HelloWorld ! </script> /*不用type属性也是默认是JavaScript */
-
控制台,在浏览器的控制台可以进行JS代码的调试,浏览器右击->检查->console
数据类型
-
数值型
var 3.14; var 25; var2 0.5 //js不区分小数整数
-
布尔值
var a=true;
var b=false;
-
逻辑运算和java相同
-
数组
var arr=[1,2,3,null,true,"hello"];//数组也可以是不同数据类型的集合,而且习惯使用中括号,在java中绝对不能这样 alert(arr[0]);
-
比较运算符
var a; var b; alert(a=b); alert(a==b);//值相同,类型不同也输出为true alert(a===b);//绝对等于,值相同,类型相同才输出true
对象的定义
- 在JavaScript中是这样定义对象,属性之间与逗号隔开,相当于Java中定义类
<script>
var person={
name: "小蓝",
age: 22,
sex: "男",
school: "牛马大学"
}
alert(person.school);
</script>
严格检查模式strict
- 在JavaScript中要注意严格审查模式 使用“use strict”放在第一行即可自助标出错误的变量(IDEA6.0以上支持),局部变量定义建议使用let替换var,因为var是全局变量
<script>
'use strict';
let i=100;
alert(i);
</script>
字符串类型详解
<script>
// 转义字符和java使用相同
//多行字符需要使用单引号位于tab键上方
let src=`
您好呀
hello
欢迎来我家做客
哈哈
`;
//模板字符串
let name="lansupei";
let msg=`您好呀!${name}`;
alert(msg);
//字符串长度
let str="lansupei";
alert(str.length);
//大小写转换
alert(str.toUpperCase());
//字符串截取
alert(str.substring(1));//截取下标1后面所有的字符
alert(str.substring(1,3));//截取[1,3)的字符
</script>
数组类型详解
<script>
var arr=[1,2,3,"4","a"];
arr.IndexOf(1); //通过元素1获得下标索引
arr.slice(2);//下标从2开始截取数组,类似于字符串的substring()
arr.push("c","d"); //压入元素到尾部
arr.pop(); //弹出尾部的元素
arr.unshift("c","d"); //压入元素到头部
arr.shift(); //弹出头部的元素
arr.sort(); //排序
arr.reverse(); //元素反转
arr.concat([4,5,6]); //往数组里添加元素,此方法并没有修改原来的数组,只是返回了一个新的数组
arr.join('-'); //打印数组,可以使用特定的字符进行拼接
//多维数组和java相同
</script>
对象类详解
- Java中使用class定义一个类,通过new来创建对象非常严谨,而JavaScript只需var对象类名即可
<script>
var person={
name:"ss",
score:100,
age:22 //最后一个属性不需要逗号
} //固定格式,js中{....}表示一个对象,使用键值对xx:xx描述属性,通过逗号隔开
person.name="lansupei" ; //对象赋值
delete person.name; //可动态删除对象属性
person.haha="haha"; //添加新的属性,只需给新的属性赋值即可
'age' in person ; //通过in方法判断某个属性是否在对象中,存在则返回true
</script>
流程控制
<script>
while(age<100){
age=age+1;
console.log(age);
} //while循环
do{
age=age+1;
console.log(age)
}
while(age<100) //do~while循环
for(i=0;i<100;i++){
console.log(i)
} //for循环
var age=[17,18,22,20,21,24,19];
age.forEach(function(value)){
console.log(value)
}) //通过方法直接输出里面的值,即循环遍历输出,es5.0新特性
for(var num in age){ //for(var index in Object)
if(age.hasOwnProperty(num){
console.log(age[num])
}
} //通过方法先获得数组的下标索引,再进行循环遍历输出,es6.1新特性
for(var num in age){ //for(var index in Object)
{
console.log(num)
}
} //循环输出下标索引
for(var num of age){ //for(var index of Object)
{
console.log(num)
}
} //循环输出值
</script>
Map和Set集合(Iterablet迭代)
<script>
//Map
var map=new Map([["jack",100],["tom",90],["mom",80]]);
var name=map.get("jack"); //通过key获得value
map.set("lan",99); //通过set往里加值
map.delete("lan") //通过key删除
//Set无序不重复,也就是可以去重
let set=new Set([1,2,3,4,4,5,5]);
set.add(2); //添加元素
set.delete(1); //删除
console.log(set.has(3)) //判断是否存在某个元素, 存在返回true
//遍历Map和Set集合只能通过for..of
for(let x of map){
console.log(x)
}
for(let x of set){
console.log(x)
}
</script>
函数的定义和参数获取
<script>
//第一种函数定义方式
var abs=function(x){ //其中x可以为多个参数之间用逗号隔开即可
if(typeof x!==‘number’){ //在js中是这样抛出异常的
throw "not a number";
}
if(x>=0){
return x;
}else
{return -x;
}
}
//第二种函数定义方式
function abs(x){
if(typeof x!==‘number’){ //在js中是这样抛出异常的
throw "not a number";
}
if(x>=0){
return x;
}else
{return -x;
}
}
//arguments是js免费赠送的一个关键字,代表所有传进来的参数包括已经定义的参数,是一个数组,通过此方法可以获取传入的参数
function abs(x){
for(let i=0;i<arguments.length;i++){
console.log(arguments[i]); //打印传入的所有参数
}
if(arguments.length>1){
console.log(arguments[i]); //比如想获取第二个参数
}
if(x>=0){
return x;
}else
{return -x;
}
}
//rest函数 ,ES6引进的新特性,获取除了已经定义的参数之外的所有参数
function abs(a,b,...rest){ //rest必须方法参数最后用...标识
console.log("a>="+a);
console.log("b>="+b);
console.log(rest);
console.log(rest); //这样可以省略for循环
if
if(x>=0){
return x;
}else
{return -x;
}
}
</script>
变量的作用域,let,const详解
<script>
//js中的变量作用域和java完全相同,在函数体内定义的只能函数体内使用,如果变量相同,从内到外排查
//输出等价于alert(x),因为所有的全局变量都绑定在window下
var x=123;
alert(window.x)
//所有的全局变量其实都绑定于window下,所以当多个js文件中变量相同的时,会发生冲突,所以把自己的代码放入自己定义的唯一命名空间中,降低全局命名冲突问题
var lan={};
lan.name="supei";
lan.age=22;
console.log(name);
//js中使用const来定义常量,ES6的新特性,相当于java中的final
const PI=3.14;
allert(PI);
</script>
方法的定义调用,apply
<script>
//方法就是把方法放到对象里面。因为对象只有两个东西:属性和方法
var kuangshen={
name:xiaolan,
birth:2000,
age:function(){
var now=new Date().getFullYear();
return now-this.birth; //this表示指向调用它的对象
}
}
//调用
kuangshen.name; //属性
kuangshen.age(); //方法
//也可以把函数放在对象外面,通过属性调用
function getAge(){
var now=new Date().getFullYear();
return now-this.birth;
}
var kuangshen={
name:xiaolan,
birth:2000,
age:getAge, //不需要()
}
}
//通过apply(对象名,参数)可以改变this的指向
getAge().apply(kuangshen,[]); //this指向了kuangshen,[]表示参数为空,在js中参数就是一个数组的集合,比如有多个对象,更换对象名即可
</script>
Date类详解
<script>
var now=new Date(); //只能获取本地主机的时间,所以可修改
now.getFullYear();//年
now.getMonth(); //月
now.getDate; //日
now.getDay; //星期几
now.getHours(); //时
now.getMinutes();//分
now.getSeconds();//秒
now.getTime(); //时间戳 ,全球唯一
new Date(now.getTime()); //通过此办法才能获取当前国家的标准时间
//可转换为国家时间标准形式
now.ToLocalString(); //2022/3/25 上午10:20:15
</script>
JSON对象
- 是一种轻量型数据交换格式,简洁和清晰地层次结构使得JSON成为理想数据交换语言,易于阅读和编写,也易于机器解析和生成,可以有效提升网络传输速率
<script>
//JSON格式:对象都用{},数组都用[],键值对都用key:value
var user={
name:"kuangshen",
age:"22",
}
var jsonuser=JSON.stringfy(user) ; //可以把js对象转换为JSON字符串 ,输出{"name":"kuangshen","age":"22"}
var obj=JSON.parse('{"name":"kuangshen","age":"22"}'); //参数为JSON字符串,相反可以把JSON字符串转换为js对象
</script>
面向对象原继承和class继承
<script>
//原型继承,ES5.0之前,只需了解即可
var user={
name:"kuansghen",
age:22,
run:function(){
console.log(this.name+"run....")
}
};
var xiaoming={
name:"xiaoming"
} //xiaoming想继承user的run方法通过以下原型继承
xiaoming._proto_=user; //通过此代码找到xiaoming的原型user,这个时候才能调用xiaoming.run()方法
//class继承,ES6.0之后才引入的,比较符合java编写规则
class student{
constructor(name){ //构造器
this.name=name;
}
hello(){
alert("hello")
}
}
var xiaoming=new student("xiaoming"); //实例化对象后即可调用里面的方法xiaoming.hello()
//继承与java相似
class xiaostudent extends student{
constructor(name,grade){ //构造器
super(name);
this.grade=grade;
}
mygrade(){
alert("我是一名小学生")
}
}
var xiaoming=new xiaostudent("xiaoming",100); //实例化对象后即可调用里面的方法xiaoming.mygrade(),或者也可以调用父类的方法xiaoming.hell0()。
操作BOM对象(浏览器对象模型)
- 操作BOM节点实际上就是对浏览器一些配置修改,比如获取当前系统版本和浏览器版本信息
操作DOM对象(文档对象模型)
- 操作DOM节点实际上就是前端的动态的增删改节点
jQuery
-
jQuery是一种封装了大量的JavaScript方法的工具类或者称作库,一般不能称为框架
-
公式,就一个公式,selector表示选择器,实际就是css选择器,action()表示函数
$(selector).action()<body> <a href="#" id="test-jQuery">点我</a> 坐标:<span id="mouse"></span> <div id="divmouse">在这里移动鼠标试试</div> <script> //其他事件 $("#test-jQuery").click(function(){ alert("hello,jQuery"); }) //鼠标移动事件事例 $(function(){ $('#divmouse').mousemove(function(e){ $('#mouse').text('x:'+e.pageX+'y:'+e.pageY); }) }); </script>
-
引入jQuery的方法有两种,一种是通过cdn引入(百度一大推,这种方式是优化前端页面的方法之一),一种是下载到本地通过项目里面导入
<script src="http://libs.baidu.com/jquery/2.0.0/jquery.min.js"></script>
表单提交验证及其前端MD5加密
- 我们可以在前端做一些加密工作,省去后端的工作量
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>表单提交验证及其前端MD5加密</title>
<!--md5加密工具类-->
<script src="https://cdn.bootcss.com/blueimp-md5/2.10.0/js/md5.min.js"></script>
</head>
<body>
<form action="#" method="post" onsubmit="return login()">
<span>用户名:</span>
<input type="text" id="user" name="user">
<span>密码:</span>
<input type="password" id="pwd" >
<input type="hidden" id="md5pwd" name="pwd">
<button type="submit">提交</button>
</form>
<script>
function login(){
var username=document.getElementById('user');
var password=document.getElementById('pwd');
var md5password=document.getElementById('md5pwd');
md5password.value=md5(password.value);
//在此可以在做一些判断,比如用户名和密码需要和数据库中的进行对比,返回true则跳转登录成功页面,返回false提示账号不存在等信息
return true;
}
</script>
</body>
</html>