js部分知识

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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值