算术运算符

重点关注 算数,赋值,逻辑运算符,三目运算符

  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4. <meta charset="UTF-8">
  5. <title>运算符</title>
  6. </head>
  7. <body>
  8. 运算符
  9. </body>
  10. <script>
  11. // 算术运算符
  12. // + | - | * | / | % | ++ | --
  13. console.log(5 / 2); // 2.5
  14. // 取整
  15. console.log('%d', 5 / 2); // "2"
  16. var num = parseInt(5 / 2); // 2
  17. console.log(num);
  18.  
  19. // 取模(求余)
  20. console.log(5 % 2); // 1
  21. // 任何一个自然数对 n 取余, 结果为 [0, n-1]
  22.  
  23. // 自增|自减 ++|--
  24. // ++就是自增1, --就是自减1
  25. var num = 10
  26. console.log(num++); // 10
  27. console.log(++num); // 12
  28. console.log(num); // 12
  29. // ++在变量后(num++), 先将变量的值拿去使用,再自身自增1
  30. // ++再变量前(++num), 先将变量自身自增1, 再将结果拿去使用
  31. // 总结: 不管++在前在后,运算结束后,变量自身值一定自增1
  32.  
  33. // res = ++num <==> num++; res = num
  34. // res = num++ <==> res = num; ++num
  35.  
  36. </script>
  37. <script>
  38. // 赋值运算符
  39. // = | += | -= | *= | /= | %=
  40. var x = 10; // 将10的值赋值给变量x
  41. y = x; // 将变量x的值传递给变量y
  42. console.log(y); // 10
  43.  
  44. x += 10; // x = x + 10, 运算方式由右至左, 将x+10的结果重新复制给x
  45. console.log(y); // 10, y的值虽然来源于x, 但y值只由自身控制
  46.  
  47. // x /= 10 == x = x / 10
  48. </script>
  49. <script>
  50. // 比较运算符, 结果为Boolean类型
  51. // == | ===
  52. console.log("5" == 5); // true, 只做值比较
  53. console.log("5" === 5); // false, 比较值及类型
  54.  
  55. // != | !==
  56. console.log("5" != 5); // false, 只做值比较
  57. console.log("5" !== 5); // true, 比较值及类型
  58.  
  59. </script>
  60. <script>
  61. // 逻辑运算符, 运算结果通常为Boolean(可以不是)
  62. // 或 | 与 | 非 <==> || | && | !
  63.  
  64. // &&(与)
  65. var a = 10;
  66. var b = 20;
  67. var c = "20";
  68. var res = a < b && b == c; // true
  69. console.log(res)
  70. // 总结&&: 全真为真, 有假则假
  71. // 总结||: 全假则假, 有真则真
  72. // 总结!: 真则假, 假则真
  73.  
  74. // 逻辑运算符的结果本质上为表达式值
  75. // 表达式: 由数字,变量,运算符组成的合法式子
  76. res = a < b && c;
  77. console.log(res);
  78.  
  79. res = (a = 1 || b == c);
  80. console.log(res);
  81.  
  82. // 针对 && | ||
  83. // 疑问: 逻辑运算符结果可能为逻辑运算符之前表达式的值,也可能是之后表达式的值
  84. // 当逻辑运算符出现 短路现象 , 就是之前表达式的值, 否则(正常情形下), 就是之后表达式的值
  85.  
  86. // &&, 前一个表达式为假时, 整个式子的结果已经确定为假, 后表达式不会被执行, 就是被短路了
  87. var num = 10;
  88. res = false && num++;
  89. console.log(res, num); // null, 10
  90. res = null && ++num;
  91. console.log(res, num); // null, 10
  92.  
  93. // ||, 前一个表达式为真时, 整个式子的结果已经确定为真, 后表达式不会被执行, 就是被短路了
  94. res = -10 || ++num;
  95. console.log(res, num); // -10, 10
  96.  
  97. // 特殊小技巧 => 类似于if分支来使用 ***
  98. /* if a > b:
  99. print(a)
  100. */
  101. var a = 100;
  102. a > b && console.log("大值a:", a);
  103.  
  104. </script>
  105. <script>
  106. // 三目运算符
  107. // 语法: 条件表达式 ? 表达式1 : 表达式2
  108. var a = 10, b = 20;
  109. var res = a < b ? a : b; // 取小值
  110. console.log(res);
  111. res = a < b ? b : a; // 取大值
  112. console.log(res);
  113.  
  114. // 类似于if...esle...
  115. a < b ? console.log("表达式结果为true") : console.log("表达式结果为false")
  116.  
  117. </script>
  118. <script>
  119. let abc = 10;
  120. // let abc = 20; // 在es6语法下,有变量的重复定义规则, 不允许在同一作用域下,出现变量的重复定义
  121. {
  122. let abc = 20; // 可以编译运行通过
  123. }
  124.  
  125. // ES6新增
  126. let [a1, b1, c1] = [1, 2, 3];
  127. // a1=1,b2=2,c3=3
  128.  
  129. let [a2, ...b2] = [1, 2, 3];
  130. // a2=1,b2=[2,3]
  131.  
  132. let {key: a3} = {key: 10};
  133. // a3=10
  134.  
  135. let [a4, b4, c4] = 'xyz';
  136. // a4='x',b4='y',c4='z'
  137.  
  138. console.log("end")
  139. </script>
  140. </html> 

程序的三大结构

程序本质分为三大结构: 顺序结构 | 分支结构 if|switch | 循环结构 for|while|do...while
根据程序代码执行的方式 划分为 三大结构

// 逻辑运算符 => 类似于 if单分支结构
// 三目运算符 => 类似于 if...else分支结构,见上面的代码

分支结构

if 基础语法

  1. if (条件表达式) {
  2. 代码块;
  3. }

当条件表达式结果为true,会执行代码块;反之不执行
条件表达式可以为普通表达式
0、undefined、null、""、NaN为假,其他均为真

  1. if (1) {
  2. var a = 10;
  3. let b = 20;
  4. console.log("d:%d只能在块级作用域中访问", b);
  5. }
  6. console.log("a:%d在块级作用域内外都可以访问", a);

if 复杂语法(三元,逻辑运算符,省略大括号,一个小技巧)

  1. 一、使用常见的三元操作符
  2. if (foo) bar(); else baz(); ==> foo?bar():baz();
  3. if (!foo) bar(); else baz(); ==> foo?baz():bar();
  4. if (foo) return bar(); else return baz(); ==> return foo?bar():baz();
  5. 对于以上使用三元操作符来优化if语句你肯定不会陌生,或许你经常使用它。
  6.  
  7. 二、使用and(&&)和or(||)运算符
  8. if (foo) bar(); ==> foo&&bar();
  9. if (!foo) bar(); ==> foo||bar();
  10. 老实说,我并没有这样去写过代码,这种写法我在学习《鸟哥的 Linux 私房菜》时看到过,但我并没想到在js中实现它。
  11.  
  12. 三、省略大括号{}
  13. if (foo) return bar(); else something(); ==> {if(foo)return bar();something()}
  14. 这种写法你我都很熟悉,但我建议在代码优化的时候这样做,或者交给UglifyJS帮你去解决。毕竟少一个大括号,代码的可阅读性并不高。
  15. 写到这里,我想到jQuery之父在《精通 JavaScript》中的一个获取HTML元素属性的方法。
  16. function getAttr(el, attrName){
  17. var attr = {'for':'htmlFor', 'class':'className'}[attrName] || attrName;
  18. };
  19. 如果我们不这样写,可能我们需借助于两个if语句来进行处理,而上面的代码不仅简洁有效,而且可阅读性强。
  20. 仔细想想,好些时候我们都能找到解决问题的有效途径,但关键在于我们是否用心去寻找一种更好的途径
  21.  
  22. javascript技巧】if(x==null)简写
  23. if(x==null)或if (typeof (x) == 'undefined')可以简写为if(!x),未验证。
  24. 反之if(x)表示x非空 

双分支

  1. if (表达式1) {
  2. 代码块1;
  3. } else {
  4. 代码块2;
  5. }

多分支

  1. if (表达式1) {
  2. } else if (表达式2) {
  3. }
  4. else if (表达式2) {
  5. } else {
  6. }

if 嵌套

  1. if (表达式1) {
  2. if (表达式2) {
  3. }...
  4. }...

if 与 if直接可以随意嵌套

  1. */
  2. var salary = prompt("请输入所发工资:");
  3. if (salary > 0) {
  4. console.log("工资已发, 打算还账!");
  5. salary -= 100000;
  6. if (salary > 0 ) {
  7. console.log("拯救世界...");
  8. } else if (salary == 0) {
  9. console.log("家里蹲, 峡谷见");
  10. } else {
  11. console.log("借钱, 填窟窿, 谁来拯救我...");
  12. console.log("借%d元钱", -salary);
  13. }
  14. } else {
  15. console.log("拿我刀来, 允许你跑49m");
  16. }

switch语句

  1. switch (表达式) {
  2. case 1: 代码块1; break;
  3. case 2: 代码块2; break;
  4. ...
  5. default: 代码块3;
  6. }

1.表达式可以为 整数表达式 或 字符串表达式
 2.值可以为 整数 或 字符串
 3.break可以省略
 4.default为默认代码块,需要出现在所有case最下方,在所有case均未被匹配时执行
switch()中的表达式结果为 整型 或 字符串, case的值要与其对应

运用实例

  1. 1
  2. var num = prompt("请输入一个自然数: "); // 输入接收的默认为字符串类型数据
  3. var num = +num;
  4. switch (num) {
  5. case "0": console.log("用户输入的是数字0"); break;
  6. case "1": console.log("用户输入的是数字1"); break;
  7. case 0: console.log("change, 用户输入的是数字0"); break;
  8. case 1: console.log("change, 用户输入的是数字1"); break;
  9. default: console.log("用户输入的是数字非0和1");
  10. }
  11.  
  12. 2
  13. var month = +prompt("请输入月份");
  14. switch (month) {
  15. case 1: case 3: case 5: case 7: case 8: case 10: case 12:
  16. console.log("%d月天数为31天", month); break;
  17. case 4: case 6: case 9: case 11:
  18. console.log("%d月天数为30天", month); break;
  19. case 2:
  20. console.log("%d月天数为28天", month);
  21. }

循环结构

for循环

  1. for (循环变量①; 条件表达式②; 循环变量增量③) {
  2. 代码块④;
  3. }
  4. // 1.循环变量可以在外、在内声明
  5. // 2.执行逻辑 ① ②④③ ... ②④③ ②,入口为①,出口为②,②④③个数为[0, n]
  6.  
  7. for (var i = 0; i < 5; i++) {
  8. console.log("我最棒, 我最帅, 我是天下第一!");
  9. } 

所有for循环可以解决的问题, 都可以由while来解决
while循环可以解决不明确循环次数的循环需求

while循环

  1. while (条件表达式) {
  2. 代码块;
  3. }
  4.  
  5. var count = 0;
  6. while (count < 5) {
  7. console.log("我最棒, 我最帅, 我是天下第一!");
  8. count++;
  9. }

do...while循环

  1. do {
  2. 代码块;
  3. } while (条件表达式);
  4.  
  5. // 无论条件是否满足, 都需要执行一次循环体 (循环体只是要被执行一次)
  6. var num = 0;
  7. do {
  8. console.log("我最棒, 我最帅, 我是天下第一!");
  9. num++;
  10. } while (num < 5); // 当条件满足时, 返回循环体

for...in循环

  1. obj = {"name": "zero", "age": 8}
  2. for (k in obj) {
  3. console.log(k, obj[k])
  4. }

用于遍历对象:遍历的结果为key,通过[]语法访问对应的value

for...of循环

  1. iter = ['a', 'b', 'c'];
  2. for (i of iter) {
  3. console.log(iter[i])
  4. }

用于遍历可迭代对象:遍历结果为index,通过[]语法访问对应的value
ES6新增,可迭代对象有 字符串、数组、Map、Set、Anguments、NodeList等

break,continue关键词

  1. break:结束本层循环
  2. continue:结束本次循环进入下一次循环

异常处理

  1. try {
  2. 易错代码块;
  3. } catch (err) {
  4. 异常处理代码块;
  5. } finally {
  6. 必须逻辑代码块;
  7. }

err为存储错误信息的变量finally分支在异常出现与否都会被执行

throw "自定义异常"必要的时候抛出自定义异常,要结合对应的try...catch使用

  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4. <meta charset="UTF-8">
  5. <title>异常处理</title>
  6. </head>
  7. <body>
  8. 异常处理
  9. </body>
  10. <script>
  11. // 了解
  12. let num = 10;
  13. try {
  14. console.log(num); // try...catch捕获的是runtime时的异常
  15. let num = 20;
  16. } catch (e) {
  17. console.log(e) // catch为处理异常的分支
  18. } finally {
  19. console.log('无论是否出现异常,该分支都会被执行')
  20. }
  21. </script>
  22. <script>
  23. console.log(num)
  24. </script>
  25. </html>

函数初级

函数的定义

ES5

  1. function 函数名 (参数列表) {
  2. 函数体;
  3. }
  4. var 函数名 = function (参数列表) {
  5. 函数体;
  6. }

ES6

  1. let 函数名 = (参数列表) => {
  2. 函数体;
  3. }

函数相关运用实例

  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4. <meta charset="UTF-8">
  5. <title>函数</title>
  6. </head>
  7. <body>
  8. 函数
  9. </body>
  10. <script>
  11. // 什么函数: 具有特定功能的代码块
  12.  
  13. // 函数与方法: 调用方式的不同 函数通过函数名 | 方法通过调用者.语法调用
  14.  
  15. // 如何定义函数:
  16. /*
  17. function 函数名(参数列表) {
  18. 函数体;
  19. (函数体可以包含函数的返回值)
  20. }
  21. */
  22.  
  23. // 函数的调用: 函数名(参数列表)
  24. // 函数的调用()一定不可以省略, 参数列表看情况(不管需不需要,均可以传或不传)
  25. // 函数的分类:
  26. // 无参函数:
  27. function fn1() {
  28. console.log("无参函数")
  29. }
  30. fn1();
  31. // 有参函数:
  32. function fn2(a, b) {
  33. console.log("a,b的和:", a + b)
  34. }
  35. fn2(10, 20);
  36. // 匿名函数:
  37. var fn3 = function () {
  38. // 匿名函数虽然没有名字, 但会开辟内存空间, 所以当然可以用一个变量来指向这个内存空间
  39. console.log("没有直接定义名字的函数");
  40. };
  41. fn3(); // 系统不好在()()之间添加;作为语句结束,需要添加分号时一定需要手动添加
  42. fn4 = fn3;
  43. fn4();
  44.  
  45. // 匿名函数的自调用
  46. (function () {
  47. // 定义一个匿名函数, 至少需要使用一次, 使用一次的方式就叫做 匿名函数的自调用
  48. // 如果匿名函数不存在任何使用, 编译就无法通过
  49. // 匿名函数的自调用:
  50. // 1.将整个匿名函数作为一个整体, 用()将其包裹
  51. // 2.并完成函数的调用, 添加 (参数列表)
  52. console.log(" 匿名函数的自调用");
  53. })();
  54.  
  55. // 函数的参数:
  56. function func1() {
  57. console.log("无参");
  58. }
  59. // 均可以调用
  60. func1();
  61. func1(10, 20);
  62.  
  63. function func2(a, b) {
  64. console.log(">>>", a + b);
  65. }
  66. func2()
  67. func2(10)
  68. func2(10, 20)
  69. func2(10, 20, 30)
  70.  
  71. // 默认值参数
  72. function func3(a, b=20, c, d=40) { // 定义在函数声明中的参数为形参
  73. console.log("***", a + b + c + d);
  74. }
  75. var temp = 1000;
  76. func3(10, 100, temp) // 函数调用传入的实际值,或拥有实际值的变量为实参
  77.  
  78. // 函数的返回值:
  79. // js的函数只能返回一个值, 这个值可以为任意类型(如果想返回多个值,将多个值放到数组或对象中)
  80. let func4 = () => {
  81. // return 1000, 8888, 6666; // 这种情况返回的是最后一个值
  82. return [1000, 8888, 6666];
  83. };
  84. console.log(func4())
  85.  
  86. // 函数的嵌套(定义 | 调用)
  87. </script>
  88.  
  89. <!-- 一个人写的js -->
  90. <script>
  91. // 为什么要出现匿名函数的自调用
  92. (function () { // 为了生成一个局部作用域
  93. var num = 10;
  94. })();
  95.  
  96. function abc() {
  97. var abc = 20;
  98. console.log(abc)
  99. }
  100. </script>
  101. <!-- 另一个人写的js -->
  102. <script>
  103. // console.log(num);
  104. abc()
  105. </script>
  106.  
  107. <script>
  108. // 函数的定义
  109. (function () {
  110. // 匿名函数定义并调用
  111. })()
  112.  
  113. // ES5
  114. function fun1() {
  115.  
  116. }
  117. var fun2 = function () {
  118.  
  119. };
  120. // ES6
  121. let fun3 = () => {
  122.  
  123. }
  124.  
  125. // 函数的调用
  126. // 函数名(参数列表)
  127. </script>
  128. <script>
  129. // 函数的参数:
  130. // 1.实参与形参个数可以不匹配,随意规定
  131. // 2.形参可以设置默认值(并非为py中的关键字参数)
  132. // 3.实参对形参进行传值时,完全采用位置匹配(eg:第n个实参一定将值传递给第n个形参)
  133. </script>
  134. <script>
  135. // 函数的返回值:
  136. // 1.函数的返回值有return来明确,没有明确,则相当于返回undefined
  137. // 2.函数只能返回一个值
  138. // 3.函数的返回值就是函数的执行结果,也就是函数值
  139. </script>
  140. </html>

函数闭包

  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4. <meta charset="UTF-8">
  5. <title>闭包</title>
  6. </head>
  7. <body>
  8. 闭包
  9. </body>
  10. <script>
  11. // 了解知识点
  12. // 闭包: 局部的函数(被一个函数包裹的函数)
  13. // 为什么使用闭包:
  14. // 1.一个函数要使用另一个函数的局部变量
  15. // 2.闭包会持久化包裹自身的函数的局部变量
  16. // 3.解决循环绑定
  17.  
  18. // 函数的嵌套定义
  19. function outer() {
  20. var num = 10;
  21. function inner() {
  22. // 1.在inner函数中,使用了outer的局部变量num
  23. return num;
  24. }
  25. return inner;
  26. }
  27. var innerFn = outer();
  28. // 2.借助闭包,将局部变量num的生命周期提升了
  29. var num = innerFn();
  30. console.log(num);
  31.  
  32. </script>
  33. </html>

JS常用类

Number

常用数字

  1. 整数:10
  2. 小数:3.14
  3. 科学计数法:1e5 | 1e-5
  4. 正负无穷:Infinity | -Infinity

常用进制

  1. 二进制:0b1010
  2. 八进制:012
  3. 十进制:10
  4. 十六进制:0xA

NaN

  1. 非数字类型,通过isNaN()进行判断 

常用常量

  1. 最大值:MAX_VALUE(1.7976931348623157e+308)
  2. 最小值:MIN_VALUE(5e-324)
  3. 正负无穷:NEGATIVE_INFINITY | POSITIVE_INFINITY(Infinity | -Infinity)

常用实例方法

  1. toExponential(n) => 3.14.toExponential(1) => 1.3e+1 (先科学记数,再确定精度,n为小数精度)
  2. toFixed(n) => 3.14.toFixed(1) => 3.1 (先确定精度,再普通记数,n为小数精度)
  3. toPrecision(n) => 13.14.toPrecision(1|2) => 1e+1|13 (先确定精度,再记数,n为位数进度)
  4. toString() =>

时间

创建并获取时间

  1. var date = new Date();

时间戳

  1. date.getTime();

获取时间

  1. 年:date.getFullYear()
  2. 月:date.getMonth() + 1
  3. 日:date.getDate()
  4. 星期:date.getDay()
  5. 小时:date.getHours()
  6. 分钟:date.getMinutes()
  7. 秒:date.getSeconds()
  8. 毫秒:date.getMilliseconds()

常见格式时间

  1. getUTCFullYear()
  2. getUTCDate()
  3. getUTCHours()

字符串

常用字符串

  1. 'string' | "string" | 'my name is "zero"' | "I'm boy" | "I \"love\" you"

常用属性

  1. length:字符串长度

常用方法

  1. chartAt(n):指定索引字符,同[n]
  2. concat(str):将目标字符串拼接到指定字符串之后
  3. indexOf(str):指定字符串第一次出现的位置
  4. lastIndexOf(str):指定字符串最一次出现的位置
  5. replace(re, str):将正则匹配到的字符串替换为指定字符串
  6. substr(n, m):从索引n开始,截取m个字符长度(m省略代表截取到最后)
  7. substring(n, m):从索引n开始,截取到索引m(m省略代表截取到最后)
  8. slice(n, m):同substring(n, m)
  9. split(re):以指定正则将字符串拆分为数组
  10. toUpperCase():转换为大写
  11. toLowerCase():转换为小写
  12. trim():去除首尾空白字符

数组

常见数组

  1. [1, 2, 3] | ['1', '2', '3'] | [1, '2', true]

常用属性

  1. length:数组元素个数

常用基础方法

  1. concat(arr):将目标数组拼接到指定数组之后
  2. indexOf(ele):指定元素第一次出现的位置
  3. lastIndexOf(ele):指定元素最一次出现的位置
  4. reverse():反转数组
  5. includes(ele, n):从索引n开始往后,元素ele是否在数组中,做全等匹配,索引从头开始n可以省略(in只做值匹配)
  6. fill(ele):以指定元素填充整个数组
  7. slice(n, m):从索引n开始,截取到索引m(m省略代表截取到最后)
  8. join(str):以指定字符串连接成字符串

增删改方法

  1. push(ele):从尾加
  2. unshift(ele):从头加
  3.  
  4. pop():从尾删
  5. shift():从头删

splice详细用法

  1. splice(begin, length, ...eles):完成增删改
  2. // begin开始索引
  3. // length操作长度
  4. // 新元素们(可以省略)
  5. splice(begin,length,....eles):完成增删改
  6.  
  7. newArr.splice(1,2,666,888);//从索引第一位开始 操作两个长度,替换为666 888
  8. 从头删除
  9. newArr.splice(0,1);//从索引0开始 操作1长度 替换位省略,则就是删除操作
  10. 从尾删除
  11. newArr.splice(newArr.length-1,1);// 删掉末尾最后一个数
  12. 从头添加
  13. newArr.splice(0,0,115);
  14. 从尾添加
  15. newArr.splice(newArr.length,0,999);

回调函数方法

  1. filter(function(value, index){ return true | false}):过滤器
  2. every(function(value, index){ return 条件表达式; }):全部满足条件
  3. some(function(value, index){ return 条件表达式; }):部分满足条件
  4. reduce(function(prev,value,index){ return prev * value; }):累积
  5. sort(function(o, n){ return o > n }):正逆向排序

Math

常用常量

  1. E:返回算术常量 e,即自然对数的底数(约等于2.718
  2. LN2:返回 2 的自然对数(约等于0.693
  3. LN10:返回 10 的自然对数(约等于2.302
  4. LOG2E:返回以 2 为底的 e 的对数(约等于 1.4426950408889634
  5. LOG10E:返回以 10 为底的 e 的对数(约等于0.434
  6. PI:返回圆周率(约等于3.14159

常用方法

  1. abs(x):返回 x 的绝对值
  2. ceil(x):向上取整
  3. floor(x):向下取整
  4. max(...n):求最大值
  5. min(...n):求最小值
  6. pow(x,y):返回 x y 次幂
  7. random():返回 0 ~ 1 之间的随机数
  8. round(x):四舍五入

随机数运用实例

  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4. <meta charset="UTF-8">
  5. <title>随机数</title>
  6. </head>
  7. <body>
  8. 随机数
  9. </body>
  10. <script>
  11. var randomNum = Math.random();
  12. // 随机数的取值范围: [0, 1)
  13. console.log(randomNum);
  14.  
  15. // 要产生[n, m]之间的正整数
  16. var r1 = parseInt(Math.random() * 11) + 5; // [5, 15]
  17. var r2 = parseInt(Math.random() * 21) + 7; // [7, 27]
  18. // var r3 = parseInt(Math.random() * (m - n + 1)) + n; // [n, m]
  19.  
  20. function rFn(n, m) {
  21. return parseInt(Math.random() * (m - n + 1)) + n;
  22. }
  23. for (var i = 0; i < 20; i++) {
  24. console.log(rFn(3, 19))
  25. }
  26.  
  27. </script>
  28. </html>

正则

正则对象的创建和声明的两种方法

  1. // 构造函数
  2. var re = new RegExp('^\\w', 'igm');
  3. // 字面量
  4. var re = /^\w/igm; i,g,m的意思如下
    注:使用“//”来创建正则对象,是推荐的风格。但有的时候在js中使用“//”来创建正则对象时会报错,这个时候就可以作用new来进行创建。

修饰符

  1. i:不区分大小写
  2. g:全文匹配
  3. m:多行匹配

正则方法

  1. test():匹配目标字符串,结果为true|false
  2. exec():匹配目标字符串,结果为第一条结果所有信息的数组

字符串方法

  1. match(re):匹配指定正则,结果为数组(可全文匹配)
  2. search(re):匹配指定正则,结果为匹配的索引,反之-1
  3. replace(re, newStr):匹配指定正则,替换匹配的结果(可全文匹配)
  4. split(re, n):按正则进行拆分,n的值可以决定结果的数组长度(可选参数)

① boolean reg.test(str)

test()用于检查指定的字符串是否存在,如果存在的话就返回true,否则返回false

  1. var reg = /\d+/;
  2. var str = 32343”;
  3. alert(reg.test(str));
  4. 输出结果:true

② string[] reg.exec(str)
exec()函数返回的是源字符串中与正则表达式相匹配的整个子串和正则中的各个分组相匹配的子串组合在一起的一个数组,即这个数组(group)存放的是匹配组中各个组得到的匹配串,各个元素之间用逗号分隔,比如下面的例子中strArr中存放的是{"John Smith","John","Smith"}。第0个元素是整个串,因为第0个组代表的是整个正则表达式

  1. var reg = /(\w+)\s(\w+)/;
  2. var str = "John Smith";
  3. var strArr = reg.exec(str);
  4. for(var i=0; i< strArr.length; i++){
  5. document.write("第"+i+"组:"+ strArr[i]+"<br/>");
  6. }
  7. 输出结果:
  8. 0组:John Smith
  9. 1组:John
  10. 2组:Smith

③ string[] str.match(reg)
match()返回匹配得到的数组。在正则表达式后面加个g(golable全局匹配),那么match()函数就能得到将正则表达式每次匹配的结果都放在一个数组里面,最后将这个数组返回。如果在正则表达式最后没有g的话,那么match()这个函数就只能返回第一次匹配得到的结果,然后将其存放在数组里面返回

  1. var reg = /(\d)(\w+)/g;//如果没有最后的g,则只会得到一次匹配,即第0组
  2. var str = "1a,213,skk,2_j,ca2t,3dfs,3,Cat,dsfsdfs";
  3. var strArr = str.match(reg);
  4. for(var i=0; i< strArr.length; i++){
  5. document.write("第"+i+"组:"+ strArr[i]+"<br/>");
  6. }
  7. 输出结果:
  8. 0组:1a
  9. 1组:213
  10. 2组:2_j
  11. 3组:2t
  12. 4组:3dfs
  13. 注:如果正则为:var reg = /(\d)(\w+)/;的话,则输出的结果为:第0组:1a

④ int reg.search(str)
search()返回匹配串的位置,从0开始计数的话,就是返回匹配串第一个字符的标号,类似于indexof()

  1. var str = "3,Cat,cat,asfsdfs";
  2. var reg = /a\w{3}/;
  3. document.write(str.search(reg));
  4. 输出结果:10

⑤ string str.replace(reg,str2);
replace()函数的第一个参数可以是普通字符串,也可以是正则表达式。它将匹配到的子串替换为str2,然后将替换后的结果返回。
如果正则表达式的最后含有g(golable全局匹配)的话,那么它将遍历整个字符串str,将能够匹配的子串全部替换。

  1. var str = "123123,213,12312,312,3,Cat,cat,dsfsdfs";
  2. var reg = /cat/gi;//如果没有g的话,就只会替换第一次匹配的子串
  3. var newstr = str.replace(reg,"#####");
  4. document.write(newstr);
  5. 输出结果:123123,213,12312,312,3,#####,#####,dsfsdfs
  6. 如果正则表达式为var reg = /cat/i;的话,输出结果为:123123,213,12312,312,3,#####,cat,dsfsdfs

⑥ stting[] str.split(reg)
split()函数的参数可以为普通字符串,也可以为正则表达式。它是将源字符串str以参数reg进行分割,然后将分割后得到的每个子串存放在数组里面返回。

  1. var str = "121#cat###345##mmm";
  2. var reg = /#/;
  3. str = str.replace(/#+/g,"#");
  4. var strArr = str.split(reg);
  5. for(var i=0; i<strArr.length; i++){
  6. document.write("第"+i+"个:"+strArr[i]+"<br/>");
  7. }
  8. 输出结果:
  9. 0个:121
  10. 1个:cat
  11. 2个:345
  12. 3个:mmm

$1...$9 引用(匹配)得到的分组子串,如果它(们)存在的话。注意:是没有$0的,$1是引用第一个分组匹配的子串

  1. var reg = /(\w+)\s(\w+)/;
  2. var str = "John Smith";
  3. var str = str.replace(reg, "$2,$1");
  4. document.write(str);
  5. 输出结果:Smith,John

  

JavaScript常用操作,常用类的更多相关文章

  1. c++ MFC图像处理CImage类常用操作代码

    原文作者:aircraft 原文地址:https://www.cnblogs.com/DOMLX/p/9598974.html MFC图像处理CImage类常用操作 CImage类头文件为#inclu ...

  2. day06 字典、元组、set的方法及常用操作

    今日内容: 1.深浅拷贝 2.元组 3.字典 4.set 1.深浅拷贝 # 1.值拷贝 # 采用赋值的方法进行 # 只会将堆区容器变量与栈区的绑定关系进行复制 # 2.浅拷贝 # 会将堆区与栈区的绑定 ...

  3. JavaScript数组常用操作

    前言 相信大家都用惯了jquery或者underscore等这些类库中常用的数组相关的操作,如$.isArray,_.some,_.find等等方法.这里无非是对原生js的数组操作多了一些包装. 这里 ...

  4. [WinForm]WinForm跨线程UI操作常用控件类大全

    前言 在C#开发的WinForm窗体程序开发的时候,经常会使用多线程处理一些比较耗时之类的操作.不过会有一个问题:就是涉及到跨线程操作UI元素. 相信才开始接触的人一定会遇上这个问题. 为了解决这个问 ...

  5. select元素javascript常用操作 转

    /*------------------------------------------------------ *作者:xieyu @ 2007-08-14 *语言:JavaScript *说明:s ...

  6. javascript中字符串常用操作总结、JS字符串操作大全

    字符串的操作在js中非常频繁,也非常重要.以往看完书之后都能记得非常清楚,但稍微隔一段时间不用,便会忘得差不多,记性不好是硬伤啊...今天就对字符串的一些常用操作做个整理,一者加深印象,二者方便今后温 ...

  7. javascript中字符串常用操作整理

    javascript中字符串常用操作整理 字符串的操作在js中非常频繁,也非常重要.以往看完书之后都能记得非常清楚,但稍微隔一段时间不用,便会忘得差不多,记性不好是硬伤啊...今天就对字符串的一些常用 ...

  8. String 类上的常用操作

    java 中String 类上的常用操作: 首先创建对象  String line = new String("String demo"); String line2 = new ...

  9. Java8获取当前时间、新的时间日期类如Java8的LocalDate与Date相互转换、ZonedDateTime等常用操作包含多个使用示例、Java8时区ZoneId的使用方法、Java8时间字符串解析成类

     下面将依次介绍 Date转Java8时间类操作 ,Java8时间类LocalDate常用操作(如获得当前日期,两个日期相差多少天,下个星期的日期,下个月第一天等) 解析不同时间字符串成对应的Java ...

  10. C#文件操作常用相关类(Directory类、File类、Path类)

    1.文件操作常用相关类 1)File //操作文件,静态类,对文件整体操作.拷贝.删除.剪切等 2)Directory //操作目录(文件夹),静态类 3)DirectoryInfo //文件夹的一个 ...

随机推荐

  1. nginx ipv4 ipv6 chrome /firefox remote-address/chrome://net-internals/dns

    nginx ---access log server {listen 80;listen [::]:80;server_name localhost;location / {proxy_http_ve ...

  2. 《深入理解Android内核设计思想》已陆续在全国各大书店及网上书店上市,感谢大家一直以来的支持~~

    <深入理解Android内核设计思想>已陆续在全国各大书店上市,电子书店也在陆续上架中(不断添加): 1. China-Pub 2. 京东 3. s=books&ie=UTF8&a ...

  3. docker的安装,使用

    1:安装:https://blog.csdn.net/yx_222/article/details/80936757 sudo apt-get install docker.io 2:  使用dock ...

  4. http形式的webservice

    import java.io.ByteArrayOutputStream; import java.io.IOException; import java.io.InputStream; import ...

  5. BootStrap的布局学习

    布局组件无数可复用的组件,包括字体图标.下拉菜单.导航.警告框.弹出框等更多功能. Bootstrap的使用非常灵活,可以对各种组件进行合并使用(如:为标签页项 添加带下拉菜单),下面的知识点中将逐个 ...

  6. VS2010/MFC编程入门之五十一(图形图像:GDI对象之画刷CBrush)

    上一节中鸡啄米主要讲的是画笔CPen的用法,前面也说了,GDI对象中最常用的就是画笔和画刷,本节就讲讲画刷CBrush. 鸡啄米依然是通过实例的方式来说明画刷的用法.此实例要实现的功能是,对话框上有一 ...

  7. 最近整理出了有关大数据,微服务,分布式,Java,Python,Web前端,产品运营,交互等1.7G的学习资料,有视频教程,源码,课件,工具,面试题等等。这里将珍藏多年的资源免费分享给各位小伙伴们

    大数据,微服务,分布式,Java,Python,Web前端,产品运营,交互 领取方式在篇尾!!! 基础篇.互联网架构,高级程序员必备视频,Linux系统.JVM.大型分布式电商项目实战视频...... ...

  8. 20155308 2016-2017-2 《Java程序设计》第9周学习总结

    20155308 2016-2017-2 <Java程序设计>第9周学习总结 教材学习内容总结 第十六章 整合数据库 16.1 JDBC入门 驱动的四种类型 JDBC-ODBC Bridg ...

  9. mysql系统变量查询

    mysql系统变量包括全局变量(global)和会话变量(session),global变量对所有session生效,session变量包括global变量.mysql调优必然会涉及这些系统变量的调整 ...

  10. 硬件中断和DPC一直占40-52%左右 解决方法

    硬件中断和DPC一直占40-52%左右,突然感觉电脑变慢 重启后竟然启动不了了,冷却一段时间后才能进去,温度检测cpu,硬盘都超标了! 用Process Explorer检测硬件中断和DPC 占cpu ...