1. js刷新当前页面
-
reload() 方法:
location.reload();
reload()方法用于刷新当前文档。
reload() 方法类似于你浏览器上的刷新页面按钮。 -
replace() 方法:
window.location.replace("http://www.runoob.com")
replace() 方法可用一个新文档取代当前文档。 -
页面自动刷新:
代码加入<head>区域中:<meta http-equiv="refresh" content="5">
2. 数组中的forEach和map的区别
相同点:
- 都是循环遍历数组中的每一项
- forEach和map方法里每次执行匿名函数都支持3个参数,参数分别是item(当前每一项),index(索引值),arr(原数组)
- 匿名函数中的this都是指向window
- 只能遍历数组
- 都不会改变原数组
区别:
- map方法返回一个新的数组,数组中的元素为原始数组调用函数处理后的值。
- map方法不会对空数组进行检测,map方法不会改变原始数组。
array.map(function(item,index,arr){},thisValue)
- forEach方法用来调用数组的每个元素,将元素传给回调函数
- forEach对于空数组是不会调用回调函数的。
Array.forEach(function(item,index,arr){},this)
- 无论arr是不是空数组,forEach返回的都是undefined。这个方法只是将数组中的每一项作为callback的参数执行一次。
3.浅拷贝Object.assign:Object.assign(target, ...sources)
主要是将所有可枚举属性的值从一个或多个源对象复制到目标对象,同时返回目标对象。浅拷贝就是拷贝第一层的基本类型值,以及第一层的引用类型地址。
4.JS遍历自身属性的方法
for...in
循环遍历对象自身的和继承的可枚举属性(不含 Symbol 属性)。Object.keys(obj)
返回一个数组,包括对象自身的(不含继承的)所有可枚举属性(不含 Symbol 属性)的键名。Object.getOwnPropertyNames(obj)
返回一个数组,包含对象自身的所有属性(不含 Symbol 属性,但是包括不可枚举属性)的键名。Reflect.ownKeys(obj)
返回一个数组,包含对象自身的所有键名,不管键名是 Symbol 或字符串,也不管是否可枚举。Object.getOwnPropertySymbols(obj)
返回一个数组,包含对象自身的所有 Symbol 属性的键名。
5.大量插入dom元素的性能优化问题
若使用循环,由于渲染回流,在for循环内部多次appendChild会造成多次渲染,从而出现卡、闪屏的现象。
javascript提供了一个文档碎片
DocumentFragment
的机制。
如果将文档中的节点添加到文档片段中,就会从文档树中移除该节点。
把所有要构造的节点都放在文档片段中执行,这样可以不影响文档树,也就不会造成页面渲染。
当节点都构造完成后,再将文档片段对象添加到页面中,这时所有的节点都会一次性渲染出来,这样就能减少浏览器负担,提高页面渲染速度
6.typeof instanceof
- typeof方法只能判断基本类型类型(number, string, undefined,boolean),它返回值是一个字符串,该字符串说明运算数的类型。(typeof 运算符返回一个用来表示表达式的数据类型的字符串。 )
//判断变量是否存在
typeof a!="undefined"
- instanceof是通过原型链来判断的 ,A instanceof B,在A的原型链中层层查找,是否有原型等于B.prototype,如果一直找到A的原型链的顶端(null,即Object.prototype.proto),仍然不等于B,那么返回false,否则返回true。
instanceof 运算符用来测试一个对象在其原型链中是否存在一个构造函数的 prototype 属性。
7.for…in for…of区别
- for…in 语句用于遍历数组或者对象的属性(对数组或者对象的属性进行循环操作)。
let arr = [1, 2, 3];
for (let i in arr) {
console.log(i) //0 1 2
}
let obj = {
name: 'wuxiaodi',
age: 18,
};
for (let i in obj) {
console.log(i) // name age
}
- for…of是遍历数组的value
let arr = [1, 2, 3];
for (let i of arr) {
console.log(i) // 1 2 3
}
8.JS异步处理
- 回调函数
- 事件监听
- promise
- async/await
9. 相等操作符(==)
- 若有一个操作数为布尔值,则在比较之前先将其转换为数值,false转换为0,true转换为1.
- 若一个操作数为字符串,另一个操作数为数值,在先将字符串转换为数值。
- 若一个操作数为对象,另一个操作数不是,则调用对象的valueOf()方法,用得到的基本类型值进行比较。
注:
undefined == 0 false
null == 0 false
NaN == NaN false
null == undefined true