1.操作dom元素有哪些方法?
createElement 创建一个标签节点
createTextNode 创建一个文本节点
cloneNode 复制一个节点
appendChild 追加子元素
insertBefore 将元素插入前面
removeChild 删除子元素
replaceChild 替换子元素
getAttribute 获取节点属性
createAttribute 创建属性
setAttribute 设置节点属性
romoveAttribute 删除节点属性
2.JS的作用域及作用域链
**在js中,作用域分为全局作用域和函数作用域**
全局作用域:代码在程序任何地方都可以访问。
函数作用域:在固定的代码段才能进行访问。
作用域链:如果在当前作用域内没有查到值,就会向上级作用域去查,直到查到全局作用域。
3.数组的splice 与 slice 的区别?
splice:splice(start,num,a,b):支持四个参数,从start索引开始,截取num个元素,并会吧a,b查到原数组内,影响到原数组。
slice:slice(start,end):支持两个参数,从start开始截取到end-1,如果没有end,则从start截取到最后。
4.substr 和 substring 的区别?
substr:substr(start,length):返回从start开始length长度的字符串
substring:substring(start,end):返回从start开始到end结束的字符串(不包含end)
5.什么是Promise?解决了什么问题?
有什么用呢?
1、解决回调地狱问题
2、代码可读性提高
3、你可以信任Promise,它的状态只会改变一次并且不可逆
6.什么是async/await?解决了什么问题?
用同步方法执行异步代码
7.JS延迟加载的方法有哪些?
1.给script标签加async属性,则加载和渲染后续文档元素的过程将和 script.js 的加载与执行并行进行(异步)
2.给script标签加defer属性,加载后续文档元素的过程将和 script.js 的加载并行进行(异步),但是 script.js 的执行要在所有元素解析完成之后,DOMContentLoaded 事件触发之前完成
3.动态创建script标签:等到DOMContentLoaded 事件触发时,生成一个script标签,渲染到页面上上
4.setTimeout定时器延迟代码执行
8.new操作符为什么能创建一个实例对象?
分析一下new的整个过程:
1、创建一个空对象
2、继承构造函数的原型
3、this指向obj,并调用构造函数
4、返回对象
function myNew (fn, ...args) {
// 第一步:创建一个空对象
const obj = {}
// 第二步:继承构造函数的原型
obj.__proto__ = fn.prototype
// 第三步:this指向obj,并调用构造函数
fn.apply(obj, args)
// 第四步:返回对象
return obj
}
9.宏任务与微任务有哪些?
宏任务:setTimeout,setInterval,setImmediate,requestAnimationFrame
微任务:Promise,prototype,then,catch,finally,nextTick
10.宏任务与微任务的执行顺序?说说EventLoop
setTimeout+Promise+Async输出顺序?很简单呀!
11.箭头函数与普通函数的区别?
1、箭头函数不可作为构造函数,不能使用new
2、箭头函数没有自己的this
3、箭头函数没有arguments对象
4、箭头函数没有原型对象
12.函数的length是多少?
13.JS中如何将页面重定向到另一个页面?
1、使用 location.href:window.location.href =“www.onlineinterviewquestions.com/”
2、使用 location.replace: window.location.replace(" www.onlineinterviewquestions.com/;");
3. 使用window.open