一、typeof运算符和instanceof运算符以及isPrototypeOf()方法的区别?
答:typeof是一个运算符,用于检测数据的类型,比如基本数据类型null、undefined、string、number、boolean,以及引用数据类型object、function,但是对于正则表达式、日期、数组这些引用数据类型,它会全部识别为object;instanceof同样也是一个运算符,它就能很准确的识别数据具体是哪一种引用数据类型,它与isPrototypeOf的区别就是它用来检测构造函数的原型是否存在于指定对象的原型链当中;而isPrototypeOf是用来检测调用此方法的对象是否存在于指定对象的原型链中,返回true,否则返回false,所以本质上就是检测目标不同。
二、call()和apply()的区别?
答:实际上,apply和call的功能是一样的,只是传入的参数列表形式不同,apply传入的是数组。
三、全局函数eval()有什么作用?
答:eval()只是一个参数,如果传入的参数不是字符串,它直接返回这个参数,如果参数是字符串,它会把字符串当成javascript代码进行编译,如果编译失败则抛出一个语法错误(syntaxError)异常。如果编译成功,则开始执行这段代码,并返回字符串中的最后一个表达式语句的值,如果最后一个表达式或语句中没有值,则最终返回undefined。如果字符串抛出一个异常,这个异常将把该点用传递给eval()。
四、描述一下变量的区别null、undefined或undeclared?
答:null表示“没有对象”,即该处不应该有值,转为数值时为0。典型用法是:
(1)、做为函数的参数,表达该函数的参数不是对象。
(2)、做为对象原型链的终点。
undefined表示“缺少值”,就是此处应该有一个值,但是还没有定义,转为数值时为NaN。典型用法是:
(1)、变量被声明了,但是没有赋值时,就等于undefined。
(2)、调用函数时,应该提供的参数没有提供,该参数等于undefined。
(3)、对象没有赋值的属性,该属性为undefined。
(4)、函数没有返回值时、默认返回undefined。
undeclared.js语法错误,没有声明直接使用,js无法找到对应的上下文。
五、==和===有什么区别?
答:首先,==equality同等,===identity恒等,==,两边值类型不同的时候,要先进行类型转换再比较,===不做类型转换,类型不同一定不等。
六、同步异步?
答:1、进程同步,就是在发出一个功能调用时,在没有等到结果之前,该调用就不返回。也就是必须一件事一件事的做,等前一件事做完才能做下一件。
2、异步的概念和同步相反,当一个异步过程调用发出后,调用者不能立刻得到结果。实际处理这个调用的部件在完成后通过状态,通知和回调来通知调用者。
七、什么是事件代理/事件委托?
答:事件代理/事件委托是利用事件冒泡的特性,将本该绑定在多个元素上的事件绑定在他们的祖先元素上,尤其在动态添加子元素的时候,可以非常方便的提高程序性能,减小内存空间。
八、什么是事件冒泡?什么是事件捕获?
答:冒泡型事件:事件按照从最特定的事件目标到最不特定的事件目标(document对象)的顺序触发。
捕获型事件:事件从最不精确的对象(document对象)开始出发,然后到最精确(也可以在窗口级别捕获事件,不过必须由开发人员特别指定)。
支持W3C标准的浏览器在添加事件时用addEventListener(event.fn.useCaptrue)方法,其中第三个参数useCapture是一个boolean值,用来设置事件捕获时执行还是事件冒泡时执行。而不兼容W3C的浏览器(IE)用attachEvent()方法,此方法还没有相关设置,不过IE的事件模型默认是在事件冒泡时执行,也就是在useCaptrue等于false的时候执行,所以把在处理事件时把useCaptrue设置为false是比较安全的,也实现兼容浏览器的效果。
九、如何阻止冒泡?
答:w3c的方法是e.stopPropagetion(),IE则是使用e.cancelBubble = true。例如wlndow.event?window.event.cancelBubble = true : e.stopPropagetion();return false 也可以阻止冒泡。
十、简述javascript中this的指向。
答:第一准则是:this永远指向函数运行时所在的对象,而不是函数被创建时所在的对象。
1、普通的函数调用,函数被谁调用,this就是谁。
2、构造函数的话,如果不是new操作符而直接调用,this指向window,用new操作符生成的对象实例后,this指向新生成的对象。
3、匿名函数或不处于任何对象中的函数this指向window。
4、如果时call、apply等,指定的this是谁就是谁。
十一、原生对象和宿主对象?
答:原生对象是ECMAScript规定的对象,所有内置对象都是原生对象,比如Array、Date、RegExp等。
宿主对象是宿主环境比如浏览器规定的对象,用于完善ECMAScript的执行环境,比如Document、Location、Navigator等。
十二、基本数据类型和引用数据类型
答:基本数据类型有5种:null、undefined、string、number、boolean,引用数据类型:object、function、array、date、regexp等。
十三、主要区别
答:1、声明变量时不同的内存分配,基本数据类型由于占据空间大小固定且较小,会被存储在栈当中,也就是变量访问的位置。引用数据类型存储在堆当中,变量访问其实是一个指针,它指向存储对象的内存地址。
2、也正是因为内存分配不同,在复制变量时也不一样,基本数据类型复制后2个变量是独立的,因为是把值拷贝了一份,引用数据类型是复制了一个指针,两个变量指向的值时该指针所指向的内容,一旦一方修改,另一方也会收到影响。
3、参数传递不同,虽然函数的参数都是按照值传递的,但是引用值传递的值是一个内存地址,实参和形参指向的是同一个对象,所以函数内部对这个参数修改会体现在外部,原始值只是把变量里的值传递给参数,之后参数和这个变量互不影响。
十四、ajax的工作原理
答:ajax简单的来说是通过XmlHttpRequest对象来向服务器发送异步请求,从服务器获得数据,然后用javascript来操作DOM而更新页面。
ajax的优点:1、最大的一个是页面无刷新,在页面内与服务器通信,给用户的体验非常好。2
使用异步的方式与服务器通讯,不需要打断客户的操作,具有更迅速的相应能力。3、可以把以前一些服务器负担的工作转嫁到客户端,利于客户端闲置的能力来处理,减轻服务器和宽带的负担,节约空间和宽带租用成本,ajax的原则是“按需取数据”,可以最大程度的减少冗余请求。4
基于标准化并被广泛支持的技术,不需要下载插件或小程序。
ajax的缺点:1、ajax对浏览器后退机制造成了破坏,也就是说用户无法通过浏览器的后腿按钮回到前一次操作的页面。虽然有些浏览器解决了这个问题,但也并不能改变ajax的机制,他所带来的开发成本是非常高的,和ajax框架所要求的快速开发是相背离的,这是ajax所带来的一个非常严重的问题。2、安全问题,技术同时也对it
企业带来了新的安全威胁,ajax技术就如同对企业数据建立了一个直接的通道,这使得开发者在不经意间会暴露比以前更多的数据和服务器逻辑,3、对搜索引擎的支持比较弱。4、破坏了程序异常机制,至少从目前看来,想ajax.dll,ajaxpro.dll这些ajax框架是会破坏程序的异常机制的。
网友评论