继续浏览精彩内容
慕课网APP
程序员的梦工厂
打开
继续
感谢您的支持,我会继续努力的
赞赏金额会直接到老师账户
将二维码发送给自己后长按识别
微信支付
支付宝支付

面试题汇总 JS篇 (一)

恩言
关注TA
已关注
手记 41
粉丝 316
获赞 3231

js中有几种数据类型, typeof 返回值有哪几个,如果判断一个对象是不是数组?

js中数据类型有7种,分别是:string\number\boolean\null\undefined\object\array
(注:w3c网站将数组单独列出来算一种数据类型)

typeof返回字符串,其中包括string\number\boolean\undefined\object\function

判断对象是否为数组主要有两种方式:

(1)Object.prototype.toString().call(obj) === ‘[Object Array]’;

(2)Array.isArray(obj);

caller和callee有什么区别?

callee是arguments对象的一个属性,它是正在执行的函数的引用。

caller是该正在执行的函数的调用函数的引用,如果为(顶层)对象,则返回null。

简述js垃圾回收机制,请谈谈你在开发过程中遇到的内存泄露的情况,是如何解决的。

JS具有自动垃圾回收机制(GC),会周期性的找到那些不再使用的变量,然后释放其内存空间。例如函数执行完成后,会释放其中局部变量的内存空间。垃圾回收器会跟踪内存中的变量,判断其有没有用。最常见的方式是清除标记,即垃圾回收器在运行时会为内存中每个变量添加一个标记,然后,去除环境变量以及其所引用的变量的标记,再次之后再被添加上标记的变量视为将被删除的变量,最后进行内存清除,销毁那些带标记的值并回收其内存空间。此外,还有一种叫做引用计次的方式,因为循环引用的缺陷,很少被使用。

JS内存垃圾自动回收的机制下,内存泄露产生的原因往往和不需要的引用有关。下面是一些常见的内存泄露方式以及解决方案:

(1)意外的全局变量或者为this.属性赋值时意外将this指向了全局对象。

解决方案:使用”use strict”,在严格模式下编程。或者干脆雇佣一些高素质人才。

(2)在版本较老的浏览器DOM的循环引用或观察者对象变得不可达可能会导致内存泄露,比如:我为某个按钮绑定了事件,回调函数里引用了某个全局变量。之后我把那个按钮节点删除了。

解决方案:不使用老版本的浏览器(IE9一下);手动remove事件监听器;在不使用DOM节点后将其引用手动覆为null。

(3)被遗忘的定时器或回调函数,没有清理的DOM元素引用。

(4)闭包中无用的函数引用外层函数中的变量。

jquery的事件委托方法on、live、delegate之间有什么区别?

live和delegate在底层均调用on方法,它们的区别在于live方法将this.context(document)作为事件委托的对象,而delegate则可以供用户选择事件委托的对象。on方法是底层方法,bind方法也在底层调用on方法,on与其它时间委托方法的区别在于type和selector换了位置,如果没有指定selector的话,就将事件绑定到元素本身上。

请说说对MVC,MVP和MVVM的理解

MVC即model\view\controller,是最常见的软件架构模式。view是指用户界面,controller则处理业务逻辑,而model则用来存储数据。view传送指令到controller,controller完成业务逻辑后要求model改变状态,model将新数据发送给view,使用户得到反馈。各部分的通信都是单向的。

MVP将controller改为presenter,在这种模式中,各个部分之间的通信都是双向的。view与model不发送直接联系,都通过presenter传递。view非常薄,不部署任何业务逻辑,而presenter非常厚。

MVVM将presenter改为viewModel,和MVP模式非常相似,唯一的区别在于它是双向绑定,view改变,自动反应在viewModel上,反之亦然。

何为跨域?跨域请求资源有几哪种方式?

由于浏览器同源策略,凡是发送请求url的协议、域名、端口三者之间任意一与当前页面地址不同即为跨域。

跨域请求资源的方式主要有:

(1)JSONP 动态创建script标签

但缺点是只支持get请求,并且很难判断请求是否失败(一般通过判断请求是否超时)。

(2)Proxy代理

这种方式首先将请求发送给后台服务器,通过服务器来发送请求,然后将请求的结果传递给前端。

(3)CORS跨域

是现代浏览器提供的一种跨域请求资源的方法,需要客户端和服务器端的同时支持。整个CORS通信过程,都是浏览器自动完成,不需要用户参与。对于开发者来说,CORS通信与同源的AJAX通信没有差别,代码完全一样。浏览器一旦发现AJAX请求跨源,就会自动添加一些附加的头信息,有时还会多出一次附加的请求,但用户不会有感觉。因此,实现CORS通信的关键是服务器。只要服务器实现了CORS接口,就可以跨源通信。

JS中错误类型有哪些?请简述一下

(1)syntaxError 语法错误 解析代码时发生的错误

(2)referenceError 引用类型错误 当访问一个不存在的变量时发生的错误

(3)RangeError是当一个值超出有效范围时发生的错误。比如把数组长度为负数,number超出范围(1.7976931348623157e+308),以及函数堆栈超过最大值。

(4)TypeError是变量或参数不是预期类型时发生的错误。比如,对字符串、布尔值、数值等原始类型的值使用new命令,就会抛出这种错误。

(5)EvalError eval函数没有被正确执行时,会抛出EvalError错误。该错误类型已经不再在ES5中出现了,只是为了保证与以前代码兼容,才继续保留。

(6)URIError是URI相关函数的参数不正确时抛出的错误,比如encodeUri

打开App,阅读手记
58人推荐
发表评论
随时随地看视频慕课网APP

热门评论

应该是Object.prototype.toString.call(obj) === '[Object Array]'; 

文章里多了对括号,还有引号也不对

应该是Object.prototype.toString.call(obj) === '[Object Array]'; 

文章里多了对括号,还有引号也不对

查看全部评论