节流防抖
function debounce(fn, delay) {
let timer = null
return function() {
if(timer) {
clearTimeOut(timer)
}
timer = setTimeOut(fn, delay)
}
}
function throttle(fn, delay) {
let valid = true
return function() {
if(!valid) return false
valid = false
setTimeOut(() => {
fn()
valid = true
}, delay)
}
}
js数据类型
基本数据类型:Undefined, Null, Number, String, Boolean
引用数据类型:对象,数组和函数
两者的区别是存储位置不同:基本数据类型存放在栈中,引用数据类型在栈中存储了指针,该指针指向堆中该实体的起始位置。
js有哪些内置对象
1. 值属性:Infinity, NaN, undefined, null字面量
2. 函数属性:eval(), parseFloat(), parseInt()...
3. 基本对象:Object, Function, Boolean, Error...
4. 数字和日期对象:Number, Math, Date
5. 字符串:String, RegExp
6. 可索引的集合对象:Array
7. 使用键的集合对象:Map, Set, WeakMap, WeakSet
...
js三大对象:本地对象,内置对象,宿主对象
本地对象:需要通过new来创建所需的实例对象(Object, Array, Date, RegExp, Function, Boolean等)
内置对象:无需实例化,内置对象是本地对象的子集(Global, Math, JSON)
宿主对象:所有的DOM和BOM对象都属于宿主对象(Window, Document)
Object类型
属性:constructor, prototype
实例方法:toString(), toLocaleString(), valueOf()
静态方法:
Object.assign(target, ...sources)
把一个或多个原对象可枚举,自有属性值复制到目标对象中,返回值为目标对象。
Object.create(proto [,propertiesObject])
创建一个对象,其原型为prototype,同时可添加多个属性。
Object.defineProperty(obj, prop, descriptor)
在一个对象上定义一个新属性或修改一个现有属性,并返回该对象。
Object.defineProperties(obj, props)
Object.seal(obj)/Object.isSealed(obj)
密封对象,防止其修改现有属性的配置特性
Object.freeze(obj)/Object.isFrozen(obj)
完全冻结对象,在seal的基础上,属性值也不可以修改
getOwnPropertyDescriptor(obj, prop)
获取目标对象上某自有属性的配置特性
Object.getOwnPropertyNames(obj)
获取目标对象上的全部自有属性名组成的数组
Object.getPrototypeOf(obj)
获取指定对象的原型
Object.setPrototypeOf(obj, proto)
设置目标对象的原型为另一个对象或null,返回该目标对象
Object.keys(obj)
获取目标对象上所有可枚举属性组成的数组
Object.preventExtensions(obj)/Object.isExtensible(obj)
使某一对象不可扩展,也就是不能为其添加新属性
Array
Array对象属性
1. length
2. constructor
3. prototype
Array对象方法
1. concat() 用于连接两个或多个数组,不改变现有的数组
2. join() 把数组中所有元素放入一个字符串,元素通过制定分隔符进行分割
3. push() 向数组的末尾添加一个或多个元素,并返回新的数组长度
4. pop() 删除数组的最后一个元素,并返回被删除的这个元素
5. shift() 把数组的第一个元素从其中删除,并返回被移除的这个元素
6. unshift() 向数组的开头添加一个或更多的元素,并返回新的数组长度
7. reverse() 用于颠倒数组中元素的顺序
8. sort() 排序
9. slice(start, [,end]) 截取
10. splice(index,howmany [,item1,item2...] 删除从index开始的hownamy个元素,并用可选参数列表中声明的一个或多个值来替换那些被删除的元素。
map()
filter()
some()
every()
forEach()
reduce()
Date类型
FullYear, Month, Date, Day, Hours, Minutes, Seconds, Milliseconds,每个日期分量都有一个get和set方法
RegExp类型
对象属性:global(g), ignoreCase(i), lastIndex(规定下次匹配的起始位置)
对象方法:
compile() 用于在脚本执行过程中的正则表达式的匹配
exec() 用于检索字符串中的正则表达式的匹配
test() 用于检测一个字符串是否匹配某个模式
正则表达式的String对象的方法有:search(), match(), replace()和split()
Function类型
对象属性
1. arguments
arguments.length: 获取函数实参的个数
arguments.callee: 获取函数对象本身的引用
arguments.callee.length: 获取函数形参的个数
对象方法 toString() 将函数体转换成对应的字符串
Boolean类型
常用方法: toString(), valueOf()
Number类型
常用方法:toString(), toLocaleString(), valueOf()
String类型
对象属性:length
对象方法:
charAt() 返回指定位置的字符
charCodeAt() 返回在指定的位置的字符的Unicode编码
indexOf 检索字符串,返回指定字符串在字符串中首次出现的位置
lastIndexOf() 从后向前索引字符串,返回指定字符串在字符串中首次出现的位置
match() 返回指定位置的字符
replace()
search()
toLowerCase()&toUpperCase()
concat()
split()
slice() 参数1,截取的起始位置,必选;参数2,截取的结束位置,可选
substr() 参数1,截取的起始位置,必选;参数2,截取的字符串长度,可选
substring() 参数1,截取的起始位置,必选;参数2,截取的结束位置,可选;与slice和substr的不同之处是substring()不接受负的参数
Global对象(全局对象)
属性:Infinity, NaN, Undefined,
方法:
encodeURI & encodeURIComponent 后者编码的字符范围大
decodeURI & decodeURIComponent
parseInt(string, radix)
parseFloat()
isFinite(number)
isNaN(number)
Number(object) 把对象的值转换成数字
String(object) 把对象的值转换成字符串
Math对象
常用方法:
Math.abs() 取绝对值
Math.ceil() 向上取整
Math.floor() 向下取整
Math.round() 四舍五入取整
Math.random() 生成0-1之间的随机数
Math.max(x,y) 取x,y中较大的那个
Math.min(x,y)
JSON对象
对象方法:
JSON.parse() 将字符串反序列化成对象
JSON.stringify() 将一个对象解析成JSON字符串