怎么判断两个对象相等?
1 、Object. is ( obj1, obj3)
2 、JSON. stringify(obj1)== JSON. stringify(obj2)
3 、函数传参利用object. keys()将函数转换为键值对数组,然后再判断两个数组长度是否相等,不相等return false ,相等继续用for in 值是否相等 相等return false
4 、递归也是利用keys转数组,然后在判断
JavaScript 中怎么获取当前日期的月份?(必会)
1 、Let math= date. getMonth ( ) + 1 ;
什么是类数组(伪数组),如何将其转化为真实的数组?(必会)
1 、有length 2 、有索引值 3 、但是没有数组的push方法
2 、转真数组
1 Array. from ( )
2 [ ] . slice. call ( eleArr)
3 Array. prototype. slice. call ( eleArr)
如何遍历对象的属性?
1 Object. keys ( ) 将对象的属性名转换为数组
2 For in
3 Object. getOwnPropertyNames ( )
4 for each
JavaScript 中的作用域、预解析与变量声明提升?
作用域 :
1 全局作用域 let var const 声明的变量就是全局作用域
2 局部作用域 函数声明的是局部
3 块级作用域 在()里面使用的变量就是块级,if 等
预解析:
1 把变量或函数的声明提升到当前作用域的最前面
2 先提升 function,在提升 var
变量提升 :
定义变量时,声明会被提升到作用域的最上面,变量的赋值不会
函数提升:JavaScript 解析器首先会把当前作用域的函数声明提前到整个作用域的最前面
变量提升与函数提升的区别?
代码执行前引擎会先进行预编译,期间会将变量声明与函数声明提升至对应作用域的最顶端,函数内声明的变量只会提升至该函数作用域最顶层,如果外面有相同变量,那么函数体内的这个变量就会被上升到最顶端
函数提升
函数提升只会提升函数声明式写法,函数表达式的写法不会
函数提升的优先级大于变量提升的优先级