一、正则
正则的创建:
字面量 : var num = / a /;
构造函数: var reg = new RegExp(“ b ”)
修饰符:
i----表示忽略大小写
g : 全局匹配;
m: 多行匹配;
正则是用于验证一个字符串是否符合正则表达的要求。
test方法检测:返回布尔值;
exec( )方法检测:获取满足该正则表达式的字符,以数组的方式返回信息
complie( ) ; 重写正则表达式
字符串方法:
search():获取满足条件的第一个字符下标,如果没有则返回-1
march( ):有g修饰符时,以数组的方式返回所有满足条件的字符;
没有g修饰符时,返回结果跟exec相同;
replace():修改;
var bu = “ a ”;
/ . / bu 中只要有任意字符就ok ;
\ 表示转义 将右边的一个有特殊含义字符转换成普通字符;
/ \ . / 表示bu 中只要包含了点就ok;
\d :匹配0~9的数字;
\D :匹配除了数字以处的任意字符
\w :匹配a-zA-Z0-9_
\W :匹配所有除了数字字母和下划线以外的其它字符
\s :匹配空格字符
\S :匹配非空字符
^:匹配开头 /限定开头
$:匹配结尾 /限定结尾
正则-限定符
-
: 匹配一个或多个;
var str = “ab”;
var reg = /^ac+b$/;//以a开头b结尾,中间可以是1个或多个c
* :匹配0个或多个
? :匹配0个或1个
{3}:匹配3次 {n}匹配n次
{3,}:最少匹配3次 {n,}最少匹配n次{3,6}:最少匹配3次,最多6次 {n,m}匹配n-m次
//特殊符
//(): 限定的一组元素
// |: 表示或者
// -:范围,比如a-z表示a到z之间的任意小写字母
// [ ]:字符集合,表示写在[ ]中的任意一个都行
// []:反字符集合。表示只要不是写在[]中的,其它的都行
[\u4e00-\u9fa5] 匹配中文
var reg = /a[\u4e00-\u9fa5]+b$/;//只要不在[]的最开头就没有取相反的含义
二、 ES6新增特性
【说明】ES5和ES6是javascript语法发展过程中的新增版本,对一些语法及功能性方法作了增加,因些,对于一些旧的浏览器来说,有很大的兼容性问题。因些,我们在做一些开发工作时,对一些浏览器的兼容有一定要求时,一定要慎用。
symbol类型==基本数据类型
01、ES6新增语法-let和const声明变量
以前 var a = 9;不能重新声明。会覆盖上的。
新增 let a = 9;不能重复声明;会报错。
const a =9 ;不能重复声明;会报错。
{
console.log( b );变量提升
var b = 7;
}
有自己的块级区;
{
console.log( b );程序报错
let b = 7;
}
var let const 三者区别
let 声明的变量都可以改变,不仅可以改变值还可以改变引用。
const 声明的变量不能被改变。不能修改引用地址,但可以修改数据;
var 可以重复声明,有变量提升;
两者区别:let 可以修改变量的值和引用。没有变量提升;
const 不能修改栈中的值,只能修改堆中的数组。没有变量提示;
【未来使用const 来声明常量值】
常量和变量在书写上的区别,变量小写,常量大写
总结:
1、let声明的时候可以不赋值,const声明的时候必须赋值
2、let声明的变量,可以改变,const声明的变量,不可以改变(引用数据类型的地址不可变,数据可变)。
3、var声明的变量有变量提升,没有块级作用域,可以重复声明,let和const都相反
let关键字 let 块级作用域
let 声明变量
let 不允许重复声明变量
let 必须在某个{}内部使用
let 在作用域范围内 声明的变量没有变量提升; 暂时性死区:通过let声明的变量 变量声明之前该变量不可用,这种现象就称作暂时性死区
let 块级作用域案例:点击某个li,获取li在页面的下标
三、重点:this指向总结
自定义的函数中this指向:window;
事件处理程序中的this指向:当前的事件源;
对象下的方法中的this指向:当前对象;
箭头函数中的this指向: 父级作用域;
构造函数中的this指向:指向调用该构造函数所创建的实例对象;
严格模式下全局函数的this返回的是undefined;
定时器中的this指向window
【this 指向,在箭头函数中没有自己的this指向, this来源于声明时所在父级作用率;】
this指向不是一成不变的,可以通过bind(), call(),apply()将函数中的this强制改变;
四、箭头函数
箭头函数只能用于匿名函数
语法格式:
var box = ( )=> { };
箭头函数的参数:
var box = (a,b) => {
return a+b;
}
box( 3, 7);
只有一个参数的可以省略小括号;
只有一行语句的可以省略花括号;
箭头函数中没有自己的this指向,this指向是跟该函数的上下级有关(父级作用率)
箭头函数中没有arguments对象
可以使用展开运算符来获取传入的参数(…arg)
ES6-新增bind(val)方法:将函数内部中的this指向强制改变
五、解构赋值
var [a,b,c] = [1,2,3]
console.log(a,b,c);
var { uname,age } = { uname : "Tom" , age : 23 };
console.log( uname,age );
好处:
1.可以一次性定义多个变量
2.可以让一个函数返回多个值
3.可以作用在函数的传参上,以对象的方式传递,可以无视参数的顺序,形参与对象的键命名要一致。
4.可以轻松实现两个数的交换
六、模版字符串
` ` ,是ES6 中新增的一种定义字符串的方式
模版字符串与单双引号字符串区别:
01、 在模版字符串中的内容可以换行书写,单双引号字符串不行;
02、 在模版字符串中的内容可以通过${ }直接书写变量,单双引号字符串不行;
七、展开运算符:…
1、当该符号出现在数组前面时,是直接输出数组中所有元素;
2、当该符号出现在函数的形参前面时,时传入的所有实参统一放在一个一个数组中;
3、当该符号出现在对象前面时,是该对象中的键值对获取出来,作为当前对象中的键值对;
八、Symbol数据类型
是ES6 新增的一种原始数据类型,表示独一无二的意思,在该方法中的参数
九、面向对象
面向对象 是一种高级的开发思想
构造函数是一种特殊的函数;
面向对象的三大特征:
01、封装。 02、继承 。 03、多态(js没有多态)
shen
构造:可以用new 关键字创建
构造函数的名称是一个大写字母,不是规定,是原则
构造函数描述属性和方法
构造函数中的
var top = new Person ( “张三”,10,“110”)
new关键字创建出来的对象,是perso构造函数的的实例化对象
在不同的实现对象下,两个方法有不同的地址,非常占用内存
Prototype 是函数中自动生成的一个属性,这个属性是一个对象;
【在任何函数中都有,但只有构造函数有用】
eat方法,在所有实例对象下都一个共同地点
【eat=function(){}行为方式】
面向对象 new关键字
1.创建了一个空对象,将这个对象返回
2.将
bind:可以将事件处理程序中的this指向