浅拷贝
对象遍历只能用中括号。
只拷贝最外面一层。
for (var key in obj) { newObj[key] = obj[key]; }
es6新方法:
Object.assign(newObj, obj)
;
深拷贝
for in 既可以遍历对象也能遍历数组,key就是数组下标
使用递归
如果拷贝对象的过程中,发现这个属性又是一个复杂数据类型,就继续递归这个函数再遍历,知道遍历到基本数据类型就直接赋值。
function copy(newObj, obj) { for (var key in obj) { if (obj[key] instanceof Array) { newObj[key] = []; copy(newObj[key], obj[key]); } else if(obj[key] instanceof Object) { newObj[key] = {}; copy(newObj[key], obj[key]) } else { newObj[key] = obj[key]; } } }
正则表达式
用于匹配字符串的表达式
作用:
- 检索关键字
- 过滤敏感字符
- 表单验证
特点:
- 灵活性、逻辑性和功能性非常的强。
- 可以迅速地用极简单的方式达到字符串的复杂控制
使用:
创建正则表达式
方式一:通过实例化对象创建正则
var reg = new RegExp(/abc/);
方式二:通过字面量创建正则
var reg = /123/;
测试正则表达式
- test()正则对象方法,用于检测字符串是否符合该规则,会返回true或false,参数是测试字符串。
reg.test(str);
正则组成
- 简单字符和特殊字符所构成(元字符)
边界符
- 用来提示字符所处位置,主要有两个字符
- 如果单独使用就是匹配开头结尾。
- 但是如果一起使用,精确匹配:
- /^abc$/: 只能匹配abc
- ^: 表示匹配行首的文本(以谁开始)
- $: 表示匹配行尾的文本(以谁结束)
字符类
- [ ]方括号
- 多选一,只要匹配一个就行
- /^[abc]$/
- 三选一
- 只能有a或b或c
- /^[a-z]$/
- 从26个字母选一个,只能选一个,只能小写
- /^[a-zA-Z]$/ 大小写
- /^[a-zA-Z0-9]$/ 大小写,数字0-9
- /^[a-zA-Z0-9_-]$/ 大小写,数字0-9,包括下划线和中划线
/^[^a-zA-Z0-9_-]$/
在中括号中第一位放一个^是取反,匹配的都是false,不在规则里的是true
- [ ]方括号
量词符
- 用来设定某个模式出现的次数。[a-z]量词符。
*
重复出现0次或更多次+
重复1次或者更多次?
0次或者1次{n}
重复n次或更多次- {n,} 重复n次或更多次
{n,m}
重复n到m次
括号总结
- 大括号
- 中括号
- 小括号
预定义类
- \d 0-9
- \D 匹配所有0-9以外的字符
- \w 匹配任意
- \W 除了字母,数字下划线以外的所有字符
- \s 匹配空格
- \S 匹配非空格的字符
替换
- replace ()
- 字符串方法
- /表达式/[修饰符]
- g:全局匹配
- i: 忽略大小写
- gi:全局忽略大小写