一.严格模式
- 严格模式的意义:
- 一把情况下,js是运行在松散模式下.为了让语言越来越规范,引入了严格模式.
- 使用严格模式
- 在脚本的第一行增加一个字符串"use strict",表示当前脚本使用严格模式
- 松散模式与严格模式的常见区别
- 1.在松散模式下,形参跟arguments是有映射关系的,但是在严格模式下形参和arguments没有映射关系,如果在函数中修改形参的值,arguments里的值也会随之修改.
注意点:使用webpack打包时,会吧js文件默认添加 "use strict"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);- 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
二. 错误类型
- throw关键字
- throw的定义
- 用于手动抛出异常(错误),抛出异常后,后面的代码就不会执行了(同步情况下不执行).
- throw关键字后面无论写什么都会当成错误抛出
throw 'hello world'; console.log(123); // 不会输出,因为throw关键字抛出的是错误,js一旦抛出错误后就会停止后面的代码执行; - throw的定义
- 常见的内置错误类型
- ReferencrError 引用错误
(一般由于引用未声明的变量导致) - TypeError 类型错误
(一般由于搞错类型导致 比如:执行一个基本数据类型的变量) - SyntaxError 语法错误
(一般因为语法写的不对) - Error 普通错误
- ReferencrError 引用错误
三. 解构赋值
- 定义:利用数据结构的对应关系,快速的对对象和数组进行取值(Es6新增)
- 解构赋值的分类
- 数组的解构赋值
- 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
- 对象的解构赋值
- 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的缩写)
- 正则是一个专门用来处理字符串的规则,这种处理分为两种:
- 判断字符串是否符合这个规则,即正则匹配
- 把符合规则的字符串获取到,即正则的捕获
- 创建一个正则,分为两种方式:
- let reg = /^\d+$/g; 字面量创建
- let reg2= new RegExp("\d+",“g”) //构造函数创建
- 正则的构成(字面量):正则是由元字符和修饰符组成,两个斜线中包裹的叫做元字符
- 元字符:
- 特殊元字符
- \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 全局匹配
- 元字符:
本文详细介绍了JavaScript的严格模式,包括启用方式、与松散模式的区别,如形参与arguments的关系、this的指向变化等。接着讨论了错误类型及throw关键字的用法。然后深入解构赋值,涵盖数组、对象、字符串和函数参数的解构,并讲解了默认值和重命名。最后,文章探讨了正则表达式的基本概念、创建方式、元字符、修饰符和量词的应用。
360

被折叠的 条评论
为什么被折叠?



