1、怎么判断两个对象相等?
1、Object.is(obj1, obj3) //true
2、JSON.stringify(obj1)==JSON.stringify(obj2)//true
3、函数传参利用object.keys()将函数转换为键值对数组,然后再判断两个数组长度是否相等,不相等return false,相等继续用for in 值是否相等 相等return false
4、递归也是利用keys转数组,然后在判断
2、JavaScript 中怎么获取当前日期的月份?(必会)
1、Let math= date.getMonth() + 1;
3、什么是类数组(伪数组),如何将其转化为真实的数组?(必会)
1、有length 2、有索引值 3、但是没有数组的push方法
2、转真数组
1 Array.from()
2 [].slice.call(eleArr)
3 Array.prototype.slice.call(eleArr)
4、如何遍历对象的属性?****
1 Object.keys() 将对象的属性名转换为数组
2 For in
3 Object.getOwnPropertyNames()
4 for each
5、JavaScript 中的作用域、预解析与变量声明提升?
作用域 :****
1 全局作用域 let var const 声明的变量就是全局作用域
2局部作用域 函数声明的是局部
3 块级作用域 在()里面使用的变量就是块级,if等
预解析 :****
1 把变量或函数的声明提升到当前作用域的最前面
2 先提升 function,在提升 var
变量提升 :****
定义变量时,声明会被提升到作用域的最上面,变量的赋值不会
函数提升:JavaScript 解析器首先会把当前作用域的函数声明提前到整个作用域的最前面
6、变量提升与函数提升的区别?****
代码执行前引擎会先进行预编译,期间会将变量声明与函数声明提升至对应作用域的最顶端,函数内声明的变量只会提升至该函数作用域最顶层,如果外面有相同变量,那么函数体内的这个变量就会被上升到最顶端
7、函数提升
函数提升只会提升函数声明式写法,函数表达式的写法不会
函数提升的优先级大于变量提升的优先级
8、什么是作用域链?
默认情况下,js代码会处于全局作用域(顶级/0级),当声明函数之后就会开辟一个局部作用域(1级)不同的作用域可以有相同的声明。在函数里还可以开辟函数空间(2级作用域)依次类推下去,这种就叫作用域链
9、如何延长作用域链?
有些语句可以在作用域链的前端临 时增加一个变量对象,该变量对象会在代码执行后被移除
1 try - catch:会创建一个新的变量对象,包含的是被抛出的错误对象的声明
2 with 语句:with 语句会将指定的对象添加到作用域链中
10、判断一个值是什么类型有哪些方法?
typeof ,instanceof 、Object.prototype.toString.call
11、如何实现数组的随机排序?
1 函数,for循环和while循环
2 Math.random() - 0.5
12、src 和 href 的区别是?(了解)
src(source)指向外部资源的位置,请求资源时会将其指向的资源下载并应用到文档中
Href:指向网络资源所在位置,建立和当前元素(锚点)