前端HTML基础JS
数组操作
数组常见方法
数组的增、删、改、查
增push(常用)、unshift(常用)、splice(常用)、concat(常用)
删pop(常用)、shift(常用)、splice(常用)、slice(常用)
改 splice()
查 indexOf() 、includes() 、find()
排序方法 reverse()、sort()
转换方法 join()
迭代方法 some();、every()、forEach(常用)、filter()、map(常用);
字符串操作
增、删、改、查
增 concat() 与数组中concat一样
删 slice()、substr()、substring()
改 trim()、trimLeft()、trimRight()、repeat()、padStart()、padEnd()、tolowerCase()、toUpperCase()
查 chatAt()、indexOf()、startWith()、include()
转换 split()
模板匹配方法math()、search()、replace()
数据类型转换
执行上面的代码,很明显执行结果为false,因为数字类型不能和字符串进行比较,但转换数据后就可以进行比较
显示转换Number()、String()、Boolean()、parselnt()
Number()
Number转换的时候是很严格的,只要有一个字符无法转成数值,整个字符串就会被转为NaN
String()
可以将任意类型的值转化成字符串
Boolean()
ParseInt()
隐式转换 (==、 != 、>、<)、if、while (+、-、*、%)
拷贝
Object.assign()
slice()
concat()
扩展运算符
深拷贝_.cloneDeep()、jQuery.extend()、JSON.stringify()、手写循环递归
深拷贝开辟一个新的栈,两个对象属完成相同,但是对应两个不同的地址,修改一个对象的属性,不会改变另一个对象的属性
_.cloneDeep()
jQuery.extend()
JSON.stringify()
递归循环
浅拷贝和深拷贝都创建出一个新的对象,但在复制对象属性的时候,行为就不一样
浅拷贝只复制属性指向某个对象的指针,而不复制对象本身,新旧对象还是共享同一块内存,修改对象属性会影响原对象
闭包
闭包就是一个函数对其周围状态的应用捆绑在一起,这样的组合叫做闭包
闭包的作用额和使用场景
1、创建私有变量
2、延长变量的生命周期
柯里化的目的在于避免频繁调用具有相同参数函数的同时,又能够轻松的重用
两个计数器 Counter1 和 Counter2 是如何维护它们各自的独立性的。每个闭包都是引用各自的词法作用域内的变量 privateCounter。
注意事项:不是某些特定任务需要使用闭包,在其它函数中创建函数是不明智的,因为闭包在处理速度和内存消耗方面对脚本性能具有负面影响
this的指向
this关键志在JavaScript中的表现略有不同,在严格模式和非严格模式之间也会存在差异
this在函数的执行过程中,this一旦确认就不能进行更改
this的绑定关系
默认绑定
非严格模式:调用函数的对象在游览器中位window,因此this指向window,所以输出luckyjian
严格模式:不能将全局对象用于默认绑定,this会绑定到undefined,只有函数运行在非严格模式下,默认绑定才能绑定到全局对象
尽管这个函数是被最外层的对象所调用,this指向的也只是它上一级的对象
new绑定
new关键字改变了this的指向
new过程遇到return一个对象,此时this指向为返回的对象
显示修改
apply()、call()、bind()是函数的一个方法,作用是改变函数的调用对象。它的第一个参数就表示改变后的调用这个函数的对象。因此,这时this指的就是这第一个参数
箭头函数
箭头函数的this能够在编译的时候就确定了this的指向,箭头函数不能作为构建函数
优先级关系
new绑定====》显式绑定====》隐式绑定 ===》默认绑定