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 |