严格模式/解构赋值/简单正则

本文详细介绍了JavaScript的严格模式,包括启用方式、与松散模式的区别,如形参与arguments的关系、this的指向变化等。接着讨论了错误类型及throw关键字的用法。然后深入解构赋值,涵盖数组、对象、字符串和函数参数的解构,并讲解了默认值和重命名。最后,文章探讨了正则表达式的基本概念、创建方式、元字符、修饰符和量词的应用。
一.严格模式
  1. 严格模式的意义:
    • 一把情况下,js是运行在松散模式下.为了让语言越来越规范,引入了严格模式.
  2. 使用严格模式
    • 在脚本的第一行增加一个字符串"use strict",表示当前脚本使用严格模式
  3. 松散模式与严格模式的常见区别
    • 1.在松散模式下,形参跟arguments是有映射关系的,但是在严格模式下形参和arguments没有映射关系,如果在函数中修改形参的值,arguments里的值也会随之修改.
    function sum(a, b) {
    b = 100; // 普通模式中
    console.log(arguments); // 1 100
    }
    sum(1, 3);
    
    
    'use strict';
    function sum2(a, b) {
    b = 100;   //严格模式中
    console.log(arguments); // 1 2
    }
    sum2(1, 2);
    
    注意点:使用webpack打包时,会吧js文件默认添加 "use strict"
    • 2.在严格模式下,通过call方法改变this指向时与松散模式有一些不同.
      • 不传参时,this指向undefined
      • 传参时,this指定谁,谁就是this
    'use strict';
    function f1() {
    console.log(this);
    }
    f.call(); // 输出 undefined
    f1.call(undefined); //输出 undefined
    f1.call(null); // 输出 null
    //非严格模式下第一次输出 window
    //非严格模式下第二次输出 window
    //非严格模式下第三次输出 window
    
    • 3.严格模式下,我们不能直接给未声明的变量赋值,如果赋值会报错
    'use strict';
     aa= 123; // 非严格模式下给window增加属性
     aa = 123; // 严格模式下会报错: Uncaught Reference:aa is not defined
    
二. 错误类型
  1. throw关键字
    • throw的定义
      • 用于手动抛出异常(错误),抛出异常后,后面的代码就不会执行了(同步情况下不执行).
      • throw关键字后面无论写什么都会当成错误抛出
       throw 'hello world';
       console.log(123); // 不会输出,因为throw关键字抛出的是错误,js一旦抛出错误后就会停止后面的代码执行;
    
  2. 常见的内置错误类型
    1. ReferencrError 引用错误
      (一般由于引用未声明的变量导致)
    2. TypeError 类型错误
      (一般由于搞错类型导致 比如:执行一个基本数据类型的变量)
    3. SyntaxError 语法错误
      (一般因为语法写的不对)
    4. Error 普通错误
三. 解构赋值
  1. 定义:利用数据结构的对应关系,快速的对对象和数组进行取值(Es6新增)
  2. 解构赋值的分类
    1. 数组的解构赋值
      • 1.顺序解构:变量放在等号左边,数组放在等号右边,左边变量取出来的值是和右边数组的索引一一对应的.
          let ary = [10, 50, 100, 200];
          let [a, b, c] = ary; 
          console.log(a, b, c);//10,50,100
      
      • 2 只取数组中的某一个
      let [,, d] = ary; //如果只想得到第三个,前面两个空着,但是需要写两个 ,
      console.log(d);//200
      
      • 3 进一步解构:取数组中的数组
      let ary2 = [10, ['12', '13']];
      let [g, [h, i]] = ary2;
      console.log(g,h,i); // 10,12,13
      
      • 4 取出数组中的第一项跟第二项,并把剩下的放到一个数组中
      let ary = [10, 50, 100, 200]
      let [e, f, ...arr] = ary;
      console.log(e,f,arr); // 10 50 [100,200]
      
      • 5 数组解构时可以添加默认值
        • 1 当变量项比数组项多时,多出来的变量默认为undefined,如果这时设置了变量项的默认值,那么会解构出默认值
        • 2 当同时存在可以解构的值和默认值时,会优先使用可以解构的值,但是当可以解构的值为undefinde时,会优先使用默认值
        let ary3 = [1, 3];
        
        let [j = 2, k = 3, l = 100] = ary3; // j的默认值是2,k的默认值是3,l的默认值是100
        console.log(j); // 2
        console.log(k); // 3
        console.log(l); // 100
        
        • 3 当解构变量互为默认值时
        let [b=a,a]=[undefined,1];
        console.log(b,a)// 报错:a is not defined, 1
        
    2. 对象的解构赋值
    • 1.解构赋值的意义:
      • 通常情况下,我们使用对象.属性名 或者对象[“属性名”]取得属性名对应的属性.
        而对象的解构赋值就是通过变量和对象的属性对应时,就可以取得对象的改属性名的值
    • 2.解构赋值
    let obj={name:"帅哥",age:18}
    let { name, age } = obj;
    console.log(name);//帅哥
    console.log(age);//18
    
    • 3.进一步解构:
    let obj={a:1,b:{c:2}};
    let {num{b:{c}}=obj
    console.log(num)//2;
    
    • 4.重命名:防止和其他变量名冲突;
    let obj={name:"dadapeng"}
    let {name} = obj
    let {name:name2}=obj
    
    • 5.对象解构的默认值
    let obj={name="帅哥"};
    let {name=name2,age="3"}=obj;
    console.log(name,age)//帅哥,3;
    
    • 6.字符串的解构赋值:跟对象的解构赋值一样,根据位置解构对应的值.
    let [x,y,z]="hello"
    console.log(x,y,z)//h,e,l
    
    • 7.解构函数的实参
    function fun({name,age}){
        console.log(name,age)//帅哥,18
    }
    fun({name:"帅哥",age:18});
    
四. 正则

正则:RegExp (regular expression的缩写)

  1. 正则是一个专门用来处理字符串的规则,这种处理分为两种:
    • 判断字符串是否符合这个规则,即正则匹配
    • 把符合规则的字符串获取到,即正则的捕获
  2. 创建一个正则,分为两种方式:
    • let reg = /^\d+$/g; 字面量创建
    • let reg2= new RegExp("\d+",“g”) //构造函数创建
  3. 正则的构成(字面量):正则是由元字符和修饰符组成,两个斜线中包裹的叫做元字符
    • 元字符:
      • 特殊元字符
        • \d 0-9之间的任意一个数字
        • \D 除了0-9之间的任意一个字符
        • \w 字母,数字,_(下划线)中的任意一个
        • \W 除了字母,数字,_(下划线)中的任意一个
        • \s 匹配一个空白符(包括空格,制表符(\t)也就是Tab,一个Tab代表4个空格)
        • \b 匹配边界,‘zhu-feng’ 边界字母和非字母链接的地方,z的左边,u的右边,f的左边,g的右边都是边界
        • \n 匹配一个换行符
        • . 通配符 匹配除了换行符\n以外的任意一个字符
        • \ 转译符 1. 把具有特殊意义的字符转义成普通字符.比如:正则中的.表示匹配除了换行符\n以外的任意一个字符,而转义符+.则只表示一个普通的小数点
          2.还可以把普通元字符转义成特殊元字符,例如转义符+d表示0-9的数字.
        • ^ 表示以某个元字符开头
        • $ 表示以某个元字符结尾
        • | 表示或者 比如: x|y 表示x或者y中的任意一个
        • [xyz] 表示x,y,z中的任意一个数字
        • [a-z] 表示a-z中的任意一个小写字母
        • [0-9] 表示0-9中的任意一个数字
        • [A-Z] 表示A-Z中的任意一个大写字母
        • [^abc] 表示除了a,b,c以外的任意一个字母
        • ()正则分组
        • (?:)表示当前分组只匹配不捕获
        • (?=)正向预查
        • (?!)负向预查
      • 量词元字符:表示个数
        • *号 表示出现0-1次
        • ? 表现出现0次到多次
        • +号 表示出现1次到多次
        • {n} 表示出现n次
        • {n,}表示至少出现n次
        • {n,m}表示出现n到m次
      • 普通元字符:除特殊原字符和量词元字符以外的元字符
    • 修饰符:
      • i 忽略大小写
      • m 多行匹配
      • g 全局匹配
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值