周末的时候跟后端大佬交流一下前端问题,其实是我单方面被碾压,根本不存在交流
1.alert(‘狗')弹出过程中发生了什么?
当我听到这个问题的时候一阵懵逼,发生了什么。。。现在alert都没怎么用了,我怎么知道他还发生了啥
这个问题重要吗,不管重不重要,还是查一查资料(百度一波)
alert是js弹出框,属于window对象的下的方法,因为window对象是浏览器中默认的全局执行环境,因此可以直接调用alert方法,alert(123)=== window.alert(123)
js总的来说包含三个部分:ecma 核心语法、Bom 浏览器对象模型、Dom 文档对象模型
ecma中包含了语句、流程控制、数据类型、数组及方法、对象及方法等等基础知识
Bom 提供与浏览器环境交互的接口:
window对象(alert、prompt、confirm、setTimeout、setInterval、cleartimeout、clearInterval)
location对象(location.href、location.path、浏览器地址相关操作,既是window对象也是document对象的属性)
navigator对象(navigator.userAgent)
history对象 (history.go()、history.back())
Dom提供与页面元素交互的接口,对html中的元素进行增删改查的操作
增:let div = document.createElement('div') ; document.body.append(div)
parent.appendChild(child) // 上面的方法存在一定兼容问题,且能追加一组dom对象或StringDom对象(文本节点) 没有返回值,下面的方法只能追加一个dom 节点,且返回该节点
删:parent.removeChild(child) //删除子节点 parent.remove() //删除自身
改(插入):parent.insertBefore(newChild,someChild)
查:document.getElementByTagName('div') =》类数组对象
document.getElementById('lynn') =》dom节点
document.getElementByClassName('lynn') =》类数组对象
document.querySlector('lynn') =》 dom节点
document.querySlectorAll('lynn') =>类数组对象
2.window和document对象的区别,都可以挂载属性吗?
在没有iframe框架的情况下,window对象和document对象基本没有区别,document对象是window对象的子对象,主要用于对html元素进行js层面的操作,两个对象都可以挂载属性,因为对象本来就是可以添加任意属性,但是window下的属性可以作为全局变量直接访问,而document不行
3.[ ] 和 new Array 有什么区别
字面量生命和new 声明没有太大的区别,都能使用array实例的方法,通过new Array(5)可以指定数组长度,而【】只能根据内容来确定数组长度
4.扩展字符(...)实现的原理
js中是es6新添加的 ... 扩展字符和剩余参数,将数组转为参数列表
原理我还没搞懂
5.为什么0.1+0.2 !== 0.3
因为计算机不能准确表达0.1,0.2这样的浮点数,存在精度误差,但也不是所有的浮点数都的表示都存在误差,比如0.5就不存在误差
6.异步的实现是为了解决什么问题,js中有哪些实现异步操作的方法
异步的实现是为了提高js执行的整体效率,单线程的js操作在有了异步以后,可以同时处理别的任务,不用卡在一个地方一直等待
js中实现异步的方法有:回调函数、async函数、promise对象
7.ajax的xhr是什么?怎样实现原生js手写一个ajax
ajax的xhr是xmlHttpRequest对象的实例,利用它进行数据传输
手写ajax简单版:
let xhr = new xmlHttlRequest() // ie6 以前需要做兼容
xhr.open(method,url,true||false)
xhr.onreadyStateChange = () => {
if(xhr.ready === 4 && xhr.status === 200) {
console.log(‘请求成功!’)
// 执行请求成功的操作
}
}
xhr.send(null || data)
8.数组的pop方法和shift有什么性能区别
pop方法,取出数组最后一个值,并返回该值;shift 取出数组第一个值,并返回
在一段连续内存地址中,去掉第一个,需要重新整理内存地址顺序,去掉最后一个则不用,因此,pop方法比shift方法性能高一点
9.对象在什么情况下,会被垃圾回收机制命中回收
js中,当一个变量、对象属性不需要了,可以delete name 删除,删除成功返回值为true 再次访问时值为undefined
⚠️:var function声明的变量因为有dontDelete 所以不能使用delete操作符删除 let const 同理 使用时返回false 删除失败
⚠️:原型链中的属性也不能被删除
当一个对象不需要了,将他的内存地址指向Null,或者代码中不存在被其他变量或对象引用的情况时,就会命中垃圾回收机制,收回栈中的内存空间
ps:具体的垃圾回收机制原理,下次再详细记录,见后文文章
10.json数据结构的弊端
json数据传输,仅需要json中某个字段时,传输整个json数据,就显得比较多余,且不利于性能
11.后台返回一个大量级的数据,前端应该怎么样做优化
当后台🐶不帮我们切片分页的时候,我们前端小仙女要学会自己分页鸭
自己实现滑屏自动加载下一页,或者一定时间内加载下一页数据