前期知识
js框架
- jQuery:JavaScript库,优点是简化了DOM操作,缺点是 DOM操作太频繁,影响前端性能;在前端眼里使用它仅仅是为了兼容IE6、7、8;
- Angular: Google 收购的前端框架,由一群Java程序员开发,其特点是将后台的MVC模式搬到了前端并增加了模块化开发的理念,与微软合作,采用TypeScript语法开发;对后台程序员友好,对前端程序员不太友好;最大的缺点是版本迭代不合理(如:1代->2代,除了名字,基本就是两个东西)
- React: Facebook出品,一款高性能的JS前端框架;特点是提出了新概念【虚拟DOM】用于减少真实DOM操作,在内存中模拟DOM操作,有效的提升了前端渲染效率;缺点是使用复杂,因为需要额外学习一门【SX】语言;
- Vue: (既有模块化开发又有虚拟DOM)一款渐进式JavaScript框架,所谓渐进式就是逐步实现新特性的意思,如实现模块化开发、路由、状态管理等新特性。其特点是综合了Angular(模块化)和React(虚拟 DOM)的优点;
- Axios:前端通信框架;因为 Vue的边界很明确,就是为了处理DOM,所以并不具备通信能力,此时就需要额外使用一个通信框架与服务器交互;当然也可以直接选择使用jQuery 提供的AJAX通信功能;
1.js基础
可放head、body任意位置
js严格区分大小写
1.1js引入两种方式
(1)内部引入
< ! DOCTYPE html>
<htm1 1ang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<!--script标签内,写avascript代码-->
<script>
<!--弹窗,显示hello,world-->
aLert("hello,wor1d");
</script>
</head>
<body>< !--这里也可以存放--></ body>
</html>
(2)外部引入
< ! DOCTYPE html>
<htm1 1ang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<script src="地址"></script>
</head>
<body>< !--这里也可以存放--></ body>
</html>
1.2定义变量
变量类型 变量名=变量值;
例:
< ! DOCTYPE html>
<htm1 1ang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<script>
var number=1;
</script>
</head>
<body>< !--这里也可以存放--></ body>
</html>
1.3条件判断
if、else if、else
可嵌套使用
例:
< ! DOCTYPE html>
<htm1 1ang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<script>
var num=60;
if(num>60 && num<70){
alert("60~70")
}else if(num>70 && num<80){
alert("70~80")
}else{
alert("大于80")
}
</script>
</head>
<body>< !--这里也可以存放--></ body>
</html>
1.4浏览器必备调试须知
elements:查看代码
console:调试js代码
source:打断点
network:抓包
application:查看网站cookie
2.数据类型
2.1数值类型
js不区分大小写
object 对象有函数和属性,符合数据类型
2.2字符串
2.2.1正常字符串使用单引号或双引号
‘abc’、“abc”
2.2.2注意转义字符
js定义反斜杠加上字符可以表示字符自身。
\
\' 撇号或单引号
\n 换行符
\r 回车符
\u#### \u4e2d unicode字符
\x41 ascII码字符
2.2.3多行字符串编写
//tab上面 esc下面的符号
var msg=`你好毒你好
毒你好毒`
//若使用""与'',字符串换行写会报错
使用`` 与""、’’ 的区别:
" "与’ '不能让字符串换行写
2.2.4模板字符串
let name="dsfds";
let all=`你好呀,${name}` //注意是多行字符串的符号:tab上面,esc下面的符号
alert(all);
结果:
2.2.5字符串长度
<script>
var name="dsfds";
alert(name.length);
</script>
结果:
2.2.6字符串的可变性:不可变
【注】ECMAScript中的字符串是不可变的,也就是说,字符串一旦创建,它们的值就不能改变。要改变某个变量保存的字符串,首先要销毁原来的字符串,然后再用另一个包含新值的字符串填充该变量。
var str="hello"
str="hwllo"
2.2.7大小写的转换
// 注意,大小写转换是方法,不是属性
//大写
<script>
var name="dsfds";
alert(name.toUpperCase());
</script>
<style>
结果:
// 注意,大小写转换是方法,不是属性
//小写
<script>
var name="dsfds";
alert(name.toLowerCase());
</script>
<style>
2.2.7字符串方法
(1)indexof()
返回指定字符在字符串中第一次出现处的索引,如果此字符串中没有这样的字符,则返回 -1。
(2)lastIndexof()
【格式】字符串.lastIndexof(子串)
【返回值】子串在字符串中最后一次出现的位置,如果没有,返回-1。
var arr="abcabcabc"
alert(arr.lastIndexof("abc"))
(3)substring()
substring() 方法用于提取字符串中介于两个指定下标之间的字符。
【注】不包含结束位置的
<script type="text/javascript">
var str="Hello world!"
document.write(str.substring(3))
</script>
结果:
lo world!
(4)charAt()
访问字符串的字符
【格式】字符串.charAt(下标)
【返回值】对应下标的字符
(5) search()
search(子串/正则) 参数可以是正则表达式
/abc/ig
【注】正则表达式可以添加修饰符,i代表忽略大小写,g代表全局匹配
var arr="Abcabcabc"
alert(arr.search(/abc/ig))
(6)replace()
【格式】 字符串.replace(匹配的字符串/正则表达式,替换成的新字符串)
【返回值】替换完成以后生成的新字符串。
【注】想替换所有符合条件字符串,就必须使用正则表达式完成。
【字符串】
var str="how are are you"
alert(str.replace("are","old are"))
效果:
【正则表达式】
var str="how are are you"
alert(str.replace(/are/g,"old are"))
效果:
【正则表达式,不区分大小写】
var str="how Are are you"
alert(str.replace(/are/ig,"old are"))
效果:
(7)split()
split() 字符串分割
【格式】字符串.split(分割符,生成的数组的长度)
【返回值】通过分隔符,分割成装有子串的字符串
【注】
1.分隔符,整体
2.会分割出空字符串
3.如果分割符是空字符串"",那么字符串会分割成单个字符
4.字符串=>数组 split 数组=>字符串 join
var str="this is a box"
var arr=str.split(" ",2);
//效果:this,is
//分隔符为两个空格
var str="this is a box"
var arr=str.split(" ")
//效果:this,is a box
var arr=str.split(" ");
//效果:this,is,a,box
//分隔符为空字符串
var arr=str.split("");
//效果:t,h,i,s, ,i,s, ,a, ,b,o,x
alert(arr.join("="))
//效果:t=h=i=s= =i=s= =a= =b=o=x
alert(arr);
2.3布尔值
2.4逻辑运算
&&、||、!
2.5比较运算符
=
== 等于(坚决不用类型不一样,值一样,判断为true)
=== 绝对等于(常用类型一样,值一样,双符合才判断为true)
须知:
- NaN===NaN,这个与所有的数值都不相等,包括自己
- 只有通过isNaN(NaN)才能判断
浮点数问题:
尽量避免使用浮点数进行运算,存在精度问题!
2.5.1空指针
null、undefined
2.6数组
可以包含任意的数据类型
< ! DOCTYPE html>
<htm1 1ang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<script>
/*数组用[]或者()都可以,但为了保证代码的可读性,建议使用[]*/
var arr=[2,23,'hello'];
</script>
</head>
<body>< !--这里也可以存放--></ body>
</html>
2.6.1.长度
长度可更改
arr.length=10;
若给arr.length赋值,数组大小会发生变化,如果赋值过小,数值会丢失。
2.6.2.indexof
通过元素获得下标索引
arr.indexOf(2)
1
arr.indexOf("hello")
4
2.6.3.slice()、splice()
2.6.3.1 slice()
截取数组的一部分,返回一个新数组,类似string中的substring
arr.slice(3)
(2) [4, "hello"]
slice() 方法可从已有的数组中返回选定的元素。
slice()方法可提取字符串的某个部分,并以新的字符串返回被提取的部分。
注意: slice() 方法不会改变原始数组。
<html>
<head>
<meta charset="utf-8">
<title>菜鸟教程(runoob.com)</title>
</head>
<body>
<p id="demo">点击按钮截取数组下标 1 到 2 的元素。</p>
<button onclick="myFunction()">点我</button>
<script>
function myFunction(){
var fruits = ["Banana", "Orange", "Lemon", "Apple", "Mango"];
var citrus = fruits.slice(1,3);
var x=document.getElementById("demo");
x.innerHTML=citrus;
}
</script>
</body>
</html>
点击前:
点击后:
2.6.3.2 splice()
splice()可以完成删除、插入、替换操作
参数:
参数1 截取的开始下标
参数2 截取的数组长度
参数3 在截取的开始下标位置,我们要插入的元素, 插入的元素个数随意。
【注】会对原数组进行修改
返回值:截取掉的数组元素,组成的数组
//删除功能
arr.splice(1,1)
//插入功能
arr.splice(1,0,'yellow','sdsa') //插入多个
//替换功能 先删除,再插入
arr.splice(1,1,'yellow')
2.6.4.push()、pop() 尾部
push:压入到尾部
arr
(5) [1, 2, 3, 4, "hello"]
arr.push(8,9)
7
arr
(7) [1, 2, 3, 4, "hello", 8, 9]
pop:弹出尾部
arr
(7) [1, 2, 3, 4, "hello", 8, 9]
arr.pop()
9
arr
(6) [1, 2, 3, 4, "hello", 8]
2.6.5.unshift()、shift() 头部
unshift:添加到头部
arr.unshift(1)
7
arr
(7) [1, 1, 2, 3, 4, "hello", 8]
shift:从头部弹出
arr
(6) [1, 2, 3, 4, "hello", 8]
arr.shift()
1
arr
(5) [2, 3, 4, "hello", 8]
2.6.6.排序sort()
按照升序排序
【注】是按照字符串ascii码的大小排序
var arr=["b","c","a"]
arr.sort()
(3) ["a", "b", "c"]
2.6.7.元素反转reverse()
arr
(3) ["a", "b", "c"]
arr.reverse()
(3) ["c", "b", "a"]
2.6.8.拼接 concat()
arr
(3) ["c", "b", "a"]
arr.concat(1,2,3)
(6) ["c", "b", "a", 1, 2, 3]
arr
(3) ["c", "b", "a"]
注:并没有把原来的数组覆盖掉,原有的数组依旧保存,只是会返回新的数组。
2.6.9.连接符 join()
打印拼接数组,使用特定的字符串连接
arr.join(2)
"c2b2a"
arr.join("-")
"c-b-a"
2.6.10.多维数组
var arr=[[1,2],[3,4],["a","b"]]
undefined
arr[0][1]
2
二维数组:
建立5*5数组,再将数组左下三角部分的值输出
<script>
var count=0;
var arr=[];
for(i=0;i<5;i++){
var newarr=[];
for(j=0;j<5;j++){
newarr.push(++count);
}
arr.push(newarr);
}
for(var i=0;i<arr.length;i++){
for(var j=0;j<=i;j++)