关于Web面试的基础知识点(二)
1.如何将集合转化成数组?
- Array.form(arr, mapfn,thisArg)
用于将两类可以把对象转换为真正的数组:类似数组的对象和可遍历的对象(部署了Iterator接口的,String,ES6新增的Map和Set)。可以传3个参数,其中第一个是数组,必传;第二个是一个函数(类似map函数),对数组元素进行操作后再返回数组,可选;第三个是对于this关键字的指向,可选。
- slice()
可从已有的数组中返回选定的元素。 返回值:返回一个新的数组,包含从
start
到end
(不包括该元素)的arrayObject
中的元素。
请注意:该方法并不会修改数组,而是返回一个子数组。如果想删除数组中的一段元素,应该使用方法Array.splice()
。 所以在这里就是对集合A应用slice,返回一个新的数组,不对数组做任何改变。
- 展开运算符
把A集合的元素展开后,用数组[]承载,返回新的数组。
-
map()
返回一个新数组,数组中的元素为原始数组元素调用函数处理后的值。
map() 方法按照原始数组元素顺序依次处理元素。
注意:
(1)map()不会对空数组进行检测。
(2) map() 不会改变原始数组。
所以map方法返回了一个新的数组,并且数组中每个元素是A里面的元素。
var ary = [12,23,24,42,1];
var res = ary.map(function (item,index,input) {
return item*10;
})
console.log(res);//-->[120,230,240,420,10]; 原数组拷贝了一份,并进行了修改
console.log(ary);//-->[12,23,24,42,1]; 原数组并未发生变化
2.Event Loop - 1
求运行结果:
console.log("one")
setTimeout(function(){
console.log("two")
},0)
console.log("three")
个人理解:在定时器中设置的时间为0毫秒,输出结果应为:one three two
Note :Event Loop
JavaScript语言就采用Event Loop机制,来解决单线程运行带来的一些问题。
JS 在执行的过程中会产生执行环境,这些执行环境会被顺序的加入到执行栈中。如果遇到异步的代码,会被挂起并加入到 Task(有多种 task) 队列中。一旦执行栈为空,Event Loop 就会从 Task 队列中拿出需要执行的代码并放入执行栈中执行,所以本质上来说 JS 中的异步还是同步行为
回调时,被回调的函数会被放在event loop里,等待线程里的任务执行完后才执行event loop里的代码。
因此,上述代码会先把线程里的执行完后,再执行event loop里的setTimeout函数。
借鉴资料 : 阮一峰的网络日志
3.Event Loop - 2
求运行结果:
console.log(1);
let a = setTimeout(() => {console.log(2)}, 0);
console.log(3);
Promise.resolve(4).then(b => {
console.log(b);
clearTimeout(a);
});
console.log(5);
Output:
执行顺序是先执行同步的任务–输出1,3,5
在执行异步任务:其中异步任务分为宏任务和微任务,微任务优先级高于宏任务。promise.then执行的微任务,输出4,然后clearTimeout(a)清除了定时器,于是不再打印2。
结果输出:1,3,5,4
4.不支持冒泡的事件
UI事件:
load unload scroll resize
焦点事件
blur focus
鼠标事件
mouseleave mouseenter
5. 如何阻止事件冒泡
6.比较Ajax和Flash的优劣
Ajax
优势:
1.可搜索性
2.开放性
3.费用
4.易用性
5.易于开发。
劣势:
1.它可能破坏浏览器的后退功能
2.使用动态页面更新使得用户难于将某个特定的状态保存到收藏夹中
不过这些都有相关方法解决。
Flash
优势:
1.多媒体处理
2.兼容性
3.矢量图形
4.客户端资源调度
劣势:
1.二进制格式
2.格式私有
3.flash 文件经常会很大,用户第一次使用的时候需要忍耐较长的等待时间
4.性能问题
7.Promise的状态
一个Promise可能有三种状态:
等待(pending
)、已完成(fulfilled
)、已拒绝(rejected
)
一个promise的状态只可能从“等待”转到“完成”态或者“拒绝”态,不能逆向转换,同时“完成”态和“拒绝”态不能相互转换。
promise必须实现then
方法(可以说,then就是promise的核心),而且then
必须返回一个promise,同一个promise的then
可以调用多次,并且回调的执行顺序跟它们被定义时的顺序一致。
then
方法接受两个参数,第一个参数是成功时的回调,在promise由“等待”态转换到“完成”态时调用,另一个是失败时的回调,在promise由“等待”态转换到“拒绝”态时调用。同时,then
可以接受另一个promise传入,也接受一个“类then”的对象或方法,即thenable
对象。
推荐阅读
-
关于Android开发中需要掌握的基础知识点讲述
-
python web学习笔记二---Django框架应用和基本运行方式(基础的用户登录)
-
Java基础-关于session的详细解释(二) Java应用服务器Weblogic浏览器Tomcat
-
Java基础-关于session的详细解释(二) Java应用服务器Weblogic浏览器Tomcat
-
Java基础篇——线程、并发编程知识点全面介绍(面试、学习的必备索引文档)
-
ado.net Web前端:关于JavaScript知识点的简单梳理(七)
-
R语言关于非线性最小二乘的知识点实例
-
关于C++的基础知识点(二)
-
关于前后端交互的一些基础知识点
-
关于Web面试的基础知识点(二)