OOP
因为JavaScript是弱类型,没有直接的机制去实现参数的重载,在JS中函数传参类型不确定,个数也是任意的,可以通过判断实际传入参数的个数,去模拟重载
1  | function Person(){  | 
调用基类
1  | function Person(name){this.name = name;}  | 
模块化
1  | var moduleA;  | 
实践-探测器
立即执行的匿名函数,防止变量、函数声明这些泄露到外部
1  | !function(global){ // 匿名函数 最外层只传了this 一般模式下 会指向全局对象  | 
正则表达式
1  | /\d\d\d/.test("123"); //true  | 
| 格式 | 意义 | Demo(return true) | 
|---|---|---|
. | 
任意字符(除换行符) | /…/.test(‘1a@’); | 
\d | 
数组0-9 | /\d\d\d/.test(“123”); | 
\D | 
非\d:不是数字0-9的字符 | 
/\D\D\D/.test(“ab!”); | 
\w | 
0-9,A-Z,a-z,_ | /\w\w\w/.test(“aB9_”); | 
\W | 
非\w | 
/\W\W\W/.test(“@!$”); | 
\s | 
空格符、TAB、换页符、换行符 | /\sabc/.test(“ abc”); | 
\S | 
非\s | 
|
\t \r \n \v \f | 
tab 回车 换行 垂直制表符 换页符 | 
| 范围符号 | 意义 | Demo | 
|---|---|---|
[...] | 
字符范围 | [a-z] [0-9] [A-Z0-9a-z_] | 
[^...] | 
字符范围以外 | [^a-z] [^abc] | 
^ | 
行首 | ^Hi | 
$ | 
行尾 | test$ | 
\b | 
零宽单词边界 | \bno | 
\B | 
非\b | 
** 右斜线 \ 转义**
分组
| 格式 | 意义 | Demo(return true) | 
|---|---|---|
(x) | 
分组,并记录匹配到的字符串 | /(abc)/ | 
\n | 
表示使用分组符(x)匹配匹配到的字符串 | 
/(abc)\1/.test('abcabc') | 
(?:x) | 
仅分组不引用 | /(?:abc)(def)\1/.test('abcdefdef') | 
重复
| 格式 | 意义 | Demo | 
|---|---|---|
x* x+ | 
*>=0 +>0 贪婪算法 | 
abc* —> ab、abc、abcc abc+ —> abc、abcc | 
x*? x+? | 
同x* x+ 非贪婪算法(少) | 
abcccc -> abc*? 匹配ab,abc+? 匹配abc | 
x? | 
出现0或者1次 | |
| `x | y` | x或者y | 
x{n} x{n,} x{n,m} | 
重复n次 重复>=n次,重复次数满足n<=x<=m | 
三个Flag
- global 匹配所有的情况 —— g
 - ignoreCase 不区分大小写 —— i
 - multiline 有分行跨行时 —— m
1
2/abc/gim.test("ABC"); //true
RegExp("abc","gim"); 
对象属性
1  | /abc/g.global //true  | 
对象方法
1  | /abc/.exec("abcdef"); //"abc" 匹配  | 
string类型与正则相关的方法
1  | String.prototype.search "abcabcdef".search(/(abc)\1/); //0  |