正则表达式
应用对象:文本
使用正则表达式可以指定想要匹配的字符串规则,然后通过这个规则来匹配
、查找
、替换
或切割
那些符合指定规则的文本。
正则表达式的==标识符==: / /
PS:
“ “ 是 字符串str 的标识符、[ ] 是 数组arr 的标识符、{ } 是 对象obj 的标识符。
match 获取匹配的项目 返回数组
search 字符串搜索
replace 替换
正则表达式的创建
###1.构造函数方式:
1 | var reg=new RegExp("a"); |
2.字面量方式:
1 | var reg=/a/; |
正则方法
1.==test== 方法用于检测一个字符串是否匹配某个模式. 返回true和false;
2.==exec( )== 找到了返回数组,找不到返回null;
量词
1.贪婪(贪心) 如 * 字符,贪婪量词会首先匹配整个字符串,尝试匹配时,它会选定尽可能多的内容,如果 失败则回退一个字符,然后再次尝试回退的过程就叫做回溯,它会每次回退一个字符,直到找到匹配的内容或者没有字符可以回退。相比下面两种贪婪量词对资源的消耗是最大的,
2.懒惰(勉强) 如 ? 字符,懒惰量词使用另一种方式匹配,它从目标的起始位置开始尝试匹配,每次检查一个字符,并寻找它要匹配的内容,如此循环直到字符结尾处。
3.占有 如 + 字符,占有量词会覆盖整个目标字符串,然后尝试寻找匹配内容 ,但它只尝试一次,不会回溯,就好比先抓一把石头,然后从石头中挑出黄金
1.” * “ 匹配 0个或多个, 相当于 {0, }
1 | var str="aaaaaaaa"; |
2.” + “ 匹配 1次或 更多(至少一个),相当于 {1, }
1 | var str="aaabbsaassb"; |
3.” ? “ 匹配0个或者1个, 相当于{0, 1}
1 | var str="aaabbsaassb"; |
4.{n}:匹配前一个字符正好出现n次
1 | var str="aaabbsaassb"; |
5.{n,}:匹配前一个字符出现n次以上,没有限制
1 | var str="aaabbsaassb"; |
6.{n,m}:匹配一个字符出现n到m次
1 | var str = "aaaaaaaaabbsaassb"; |
元字符
【小写】
\d [0-9] 数字
\w [a-z0-9_] 数字,字母,下划线(之间没有空格)
\s 空白字符
\b 匹配单词边界
【大写】
\D [^0-9] 非数字
\W [^a-z0-9_ ] 非数字,字母,下划线
\S 非空白字符
. 表示任意字符
修饰符
i 忽略大小写
g 全局匹配
表达式
[abc] 查找方括号之间的任何字符 等同于 a|b|c
[0-9] 查找任何从 0 至 9 的数字
[a-z] 查找任何从小写 a 到小写 z 的字符
[A-Z] 查找任何从大写 A 到大写 Z 的字符
[A-z] 查找任何从大写 A 到小写 z 的字符
ES5
严格模式
进入严格模式 :”use strict”
1 | 1.针对整个脚本文件:将 "use strict" 放在脚本文件的第一行,则整个脚本文件都将以“严格模式”运行, |
严格模式下的注意事项
1 | 1.全局变量声明时,必须加关键字(var) |
ES5新增数组方法:
1 | 索引方法:indexOf() 和 lastIndexOf(); |
字符串方法
==trim( )== 去掉字符串前后空格;
==trimLeft( )== 去掉字符串前面空格
==trimRight( )== 去掉字符串后面空格
反序列化
1 | JSON.parse(str); 字符串---->>json |
序列化
1 | JSON.stringify(); obj(json)------>>字符串 |
日期对象得到当前日期的毫秒数
1 | Date.now(); |
ES6
ES6新增定义变量的方法
1.let
let定义的变量没有声明提升,在 { } 中有let定义变量,该区域就会变成块级作用域。
1 | { |
关于暂时性死区:
1 | var a = 10; |
2.const
常量(不能改变的量),赋值和覆盖都不可以改变它的值。同样在 { } 中有const定义变量,该区域就会变成块级作用域。
1 | const a =20; |
知识了解
Unicode编码
ES6字符串扩展
###1.字符串新增方法
==repeat()==
1 | var str="我永远拥护中国共产党" |
==includes()== ==startsWith()== ==endsWith()== 判定字符串中是否存在某个字符串
1 | var s = 'Hello world!'; |
==for of==
可以用于遍历字符串:
1 | var str= "abcd"; |
字符串模板
ES6中存在一种新的字符串, 这种字符串是 以 `` (波浪线上的那个字符 > 反引号)括起来表示的;
1 | 拼接 |
箭头函数
1 | var obj = { |
解构赋值
基本
1 | var [a,b,c] = [1,2,3]; |
可嵌套
1 | let [a, [[b], c]] = [1, [[2], 3]]; |
可忽略
1 | let [a, , b] = [1, 2, 3]; |
不完全解构
1 | let [a = 1, b] = []; |
字符串等
1 | let [a, b, c, d, e] = 'hello'; |
应用:交换两个变量的值
1 | before: |
ES6新增的基本数据类型
==symbol== :凡是属性名属于 Symbol 类型,就都是独一无二的,可以保证不会与其他属性名产生冲突
1 | var sy1=sybol("10"); |
ES6新数据结构set
类似数组,但是成员的值都是唯一的,没有重复性(可用于去重)
属性
size:返回值得长度
1 | var s=new Set(["a","b","c","d"]) |
方法
==add(value)== 添加一个值,返回Set结构本身
1 | var s=new Set(["a","b","c","d"]) |
==delete(value)== 删除某个值,返回布尔值
1 | var s=new Set(["a","b","c","d"]) |
==has(value)== 返回布尔值,表示是否是成员
1 | var s=new Set(["a","b","c","d"]) |
==clear()== 清除所有成员,无返回值
1 | var s=new Set(["a","b","c","d"]) |
面向对象
面向对象(Object Oriented,OO)是软件开发方法,一种高级的编程思想。
面向对象的特点
封装
不考虑内部实现,只考虑功能实现(全局变量会导致命名污染问题)。
继承
从已有对象上,继承出新对象(获取已存在的对象已有的属性和方法的)。
1 | //简单的继承 |
多态
多态, 统一操作结果会不一样
1 | var arr = ["a", "c", "d"]; |
类与对象的关系
JavaScript中的类相当于图纸,用来描述一类事物。
JavaScript中可以自定义类, 但是也提供了一个默认的类叫做Object。
1 | function Person(name, age){ //这就是 类 相当于模板 |
创建对象的方式
1.通过new Object( )创建对象
1 | var obj = new Object(); //创建一个空对象 |
2.通过字面量创建对象
1 | var obj = { |
3.通过工厂函数创建对象
第一种形式
1 | function person(name,age,sex){ |
第二种形式
1 | function person(name,age,sex){ |
函数中的this关键字
每个函数中都有一个this,根据调用方式不同,this的指向就不同。谁调用当前函数,this就是谁。
1.默认情况下直接调用的函数都是由==window==调用的:
1 | function fn(){ |
2.如果函数作为对象的方法,由对象来调用函数,这个时候函数里面的this就是==对象本身==。
1 | var obj = { |
构造函数
1、什么是构造函数?构造函数和工厂函数是一样的,都是专门用来创建对象的,构造函数本质上来说是工厂函数的简写。
2、构造函数和工厂函数的区别?
①构造函数的函数名称必须==首字母大写==;
②构造函数只能通过==new关键字来调用==。
1 | function Person(name, age){ |
对比上面的工厂形式,系统为我们做了什么?
会在构造函数中自动==创建一个对象==,将自动创建的==对象赋值给this==,会在构造函数的最后自动添加==return this==;
1 | function Person(name, age, sex) { |
构造函数优化
new出(即实例化出来)的对象都是使用的构造函数中的方法,但是存储不一样,所以会有性能问题;
在构造函数里面, 提供了一个==prototype==属性, 可以用存储一个公共的方法。存储在prototype中的方法和属性可以被对应的构造函数创建出来的所有对象共享
==查找规则==:先查找自己构造函数中,再去找prototype中的
####1.prototype
JavaScript 规定,每一个构造函数都有一个 prototype 属性,指向另一个对象。
这个对象的所有属性和方法,都会被构造函数的所拥有。
可以把所有对象实例需要共享的属性和方法直接定义在 prototype 对象上。
1 | function Person(name, age, sex) { |
对象的三角恋关系
- 每个==构造函数==中都有一个默认的属性,叫做prototype。prototype属性保存着一个对象,这个对象我们称之为“==原型对象==”
- 每个”原型对象“中都有一个默认的属性,叫做constructor。这个constructor指向当前原型对象对应的构造函数
- 通过构造函数创建出来的对象我们称之为“实例对象”。每个实例对象都有一个默认的属性,叫做
_proto_
__proto__
指向创建它的那个构造函数的原型对象。
函数和对象
JavaScript中的函数是引用类型(对象类型),既然是对象,所以也是通过构造函数创建出来的, “所有函数”都是通过Function构造函数创建出来的对象
JavaScript中只要是”函数”,就有prototype属性。Function函数的prototype属性指向Function原型对象
JavaScript中只要有原型对象就有constructor属性。Function原型对象的constructor指向它对应的构造函数
JavaScript中万物皆对象,只要是对象就有
__proto__
属性。
原型链
1.先查找当前对象,当前对象有就使用当前对象的方法。
2.当前对象没有再逐层在原型链查找,最先找到那个就用那个。
3.如果找到null都没找到,就报错。
==4.Function构造函数的__proto__
是Function的原型对象!!!==
ES6定义类
从ES6开始系统提供了一个名称叫做class的关键字,这个关键字就是专门用于定义类的
1 | class Person{ |
OOA和OOD
OOA面向对象分析
OOD面向对象设计
构造函数和对象的关系
1 | 面向对象----对一个对象进行编程 |
前后端交互
服务器协议
应用程序分类
B/S:Browser(浏览器)/ Server(服务器)
C/S:Client(客户端)/ Server(服务器)
http协议:基于TCP/IP的无状态通信协议
前端(浏览器客户端)向后台(web服务器端)发送http请求获取数据
http请求报文
请求报文的组成:
==请求行==(request line)
==请求头部==(header)
空行(主要隔开数据与头部)
==请求数据==;
form的enctype属性为编码方式。常用有两种:urlencoded和form-data;
application/x-www-form-urlencoded和multipart/form-data,==默认==为application/x-www-form-urlencoded;
当action为==get==时候,浏览器用x-www-form-urlencoded的编码方式把form数据转换成一个字串(name1=value1&name2=value2…),然后把这个字串追加到url后面,用?分割,加载这个新的url。
当action为==post==时候,浏览器把form数据封装到http body中,然后发送到server。 如果没有type=file的控件,用默认的application/x-www-form-urlencoded就可以了。 但是如果有type=file的话,就要用到multipart/form-data了。
当action为==post==且Content-Type类型是multipart/form-data,浏览器会把整个表单以控件为单位分割,并为每个部分加上Content-Disposition(form-data或者file),Content-Type(默认为text/plain),name(控件name)等信息,并加上分割符(boundary)。
http响应报文
Response Headers里的==Content-Type==指服务器告诉浏览器相应的数据,类型一般有这三种:
application/x-www-form-urlencoded:数据被编码为名称/值对。这是标准的编码格式
multipart/form-data: 数据被编码为一条消息,页上的每个控件对应消息中的一个部分
text/plain: 数据以纯文本形式(text/json/xml/html)进行编码,其中不含任何控件或格式字符
Status-Code表示服务器发回的响应状态代码;Reason-Phrase表示状态代码的文本描述。状态代码由三位数字组成,第一个数字定义了响应的类别,且有五种可能取值。
- 1xx:指示信息–表示请求已接收,继续处理。
- 2xx:成功–表示请求已被成功接收、理解、接受。
- 3xx:重定向–要完成请求必须进行更进一步的操作。
- 4xx:客户端错误–请求有语法错误或请求无法实现。
- 5xx:服务器端错误–服务器未能实现合法的请求。
常见状态代码、状态描述的说明如下。
- 200 OK:客户端请求成功。
- 400 Bad Request:客户端请求有语法错误,不能被服务器所理解。
- 401 Unauthorized:请求未经授权,这个状态代码必须和WWW-Authenticate报头域一起使用。
- 403 Forbidden:服务器收到请求,但是拒绝提供服务。
- 404 Not Found:请求资源不存在,举个例子:输入了错误的URL。
- 500 Internal Server Error:服务器发生不可预期的错误。
- 503 Server Unavailable:服务器当前不能处理客户端的请求,一段时间后可能恢复正常。
PHP和数据库
PHP(HyperText Preprocessor)是一种创建动态交互性站点的强有力的服务器端脚本语言。
1 |
|
超级全局变量
1 | - $GLOBALS |
PHP关联数组
数组
1 | $arr = array(1,2,3,4,5); //获取数组长度:count()函数; |
关联数组
1 | $testarr = array( |
JOSN返回
json_encode( )
方法进行JSON格式的转码;
json_decode( )
方法对JSON进行解析;
在PHP中连接数据库
1 | 连接数据库: |
数据库增删改查语句
1 | -- 查询所有数据 |
Cookie
通信协议
TCP协议 —>> 浏览器 —> 服务器之间的交流
1 | 连接--三次握手 |
HTTP (无状态协议) –>> 基于TCP协议的一种高级协议, 用于客户端和服务器直接的通信
这种通信最大的问题在哪?
问题就在于每次收到返回的页面后,连接都断开了。
Cookie会话跟踪技术
一个网站从打开到浏览(包括这个网站的其他子页面)到最后关闭浏览器整个过程叫一个“会话”。
在一次会话从开始到结束的整个过程,全程跟踪记录客户端的状态(例如:是否登录、购物车信息、是否已下载、是否 已点赞、视频播放进度等等)。 多次请求页面,数据共享
Cookie的存取
1 | function setCookie () { |
注意:cookie是http/https协议下的技术,大部分浏览器都不支持本地file文件对cookie操作
Cookie的时效问题
1 | function setCookie () { |
cookie的特点
1 | 1 只能使用文本 |
==PS:==
cookie直接存==中文==会造成未知错误,所以一般使用==encodeURIComponent( )==进行编码,
====decodeURIComponent( )==进行解码。
封装cookie的设置,获取和删除
1 | /** 获取cookie |