当前位置: 首页 > news >正文

天津建设厅 注册中心网站wordpress 推送 微信

天津建设厅 注册中心网站,wordpress 推送 微信,网站 主办单位性质 个人,动漫制作专业论文三、JavaScript部分 1、谈谈你对Ajax的理解#xff1f;(概念、特点、作用) AJAX全称为“Asynchronous JavaScript And XML”#xff08;异步JavaScript和XML#xff09; 是指一种创建交互式网页应用的开发技术、改善用户体验#xff0c;实现无刷新效果。 优点a、不需要插件…三、JavaScript部分 1、谈谈你对Ajax的理解(概念、特点、作用) AJAX全称为“Asynchronous JavaScript And XML”异步JavaScript和XML 是指一种创建交互式网页应用的开发技术、改善用户体验实现无刷新效果。 优点a、不需要插件支持b、优秀的用户体验c、提高Web程序的性能d、减轻服务器和带宽的负担缺点a、浏览器对XMLHttpRequest对象的支持度不足几乎所有浏览器现在都支持b、破坏浏览器“前进”、“后退”按钮的正常功能可以通过简单的插件弥补c、对搜索引擎的支持不足 2、说说你对延迟对象deferred的理解? deferred对象是从jQuery 1.5.0版本开始引入的一个新功能。a、什么是deferred对象开发网站的过程中我们经常遇到某些耗时很长的javascript操作。其中既有异步的操作比如ajax读取服务器数据也有同步的操作比如遍历一个大型数组它们都不是立即能得到结果的。通常的做法是为它们指定回调函数callback。即事先规定一旦它们运行结束应该调用哪些函数。但是在回调函数方面jQuery的功能非常弱。为了改变这一点jQuery开发团队就设计了deferred对象。简单说deferred对象就是jQuery的回调函数解决方案。在英语中defer的意思是延迟所以deferred对象的含义就是延迟到未来某个点再执行。它解决了如何处理耗时操作的问题对那些操作提供了更好的控制以及统一的编程接口。b、它的主要功能可以归结为四点(1)、实现链式操作(2)、指定同一操作的多个回调函数(3)、为多个操作指定回调函数(4)、普通操作的回调函数接口 3、什么是跨域如何实现跨域访问? 跨域是指不同域名之间相互访问。JavaScript同源策略的限制A域名下的JavaScript无法操作B或是C域名下的对象 实现(1)、JSONP跨域利用script脚本允许引用不同域下的js实现的将回调方法带入服务器返回结果时回调。(2)、跨域资源共享CORS跨域资源共享CORS是一种网络浏览器的技术规范它为Web服务器定义了一种方式允许网页从不同的域访问其资源。CORS与JSONP相比:a、 JSONP只能实现GET请求而CORS支持所有类型的HTTP请求。b、 使用CORS开发者可以使用普通的XMLHttpRequest发起请求和获得数据比起JSONP有更好的错误处理。c、 JSONP主要被老的浏览器支持它们往往不支持CORS而绝大多数现代浏览器都已经支持了CORS。 4、为什么要使用模板引擎 a、模板引擎这里特指用于Web开发的模板引擎是为了使用户界面与业务数据内容分离而产生的它可以生成特定格式的文档用于网站的模板引擎就会生成一个标准的HTML文档。b、在一些示例中javascript有大量的html字符串html中有一些像onclick样的javascript这样javascript中有htmlhtml中有javascript代码的偶合度很高不便于修改与维护使用模板引擎可以解决问题。 5、JavaScript是一门什么样的语言它有哪些特点 JavaScript 是一种脚本语言官方名称为 ECMAScript因定义语言的标准为 ECMA-262。JS 的主要特点a、语法类似于常见的高级语言如 C 和 Javab、脚本语言不需要编译就可以由解释器直接运行c、 变量松散定义属于弱类型语言d、面向对象的。JS 最初是为网页设计而开发的现在也是Web 开发的重要语言。它支持对浏览器浏览器对象模型BOM和HTML 文档文档对象模型DOM进行操作而使网页呈现动态的交互特性。严格的说JS只是ECMAScript 的一种实现是ECMAScript和BOM、DOM组成的一种Web 开发技术。 6、JavaScript的数据类型有哪些 基本数据类型字符串 String、数字 Number、布尔Boolean复合数据类型数组 Array、对象 Object特殊数据类型Null 空对象、Undefined 未定义 7、已知ID的Input输入框如何获取这个输入框的输入值(不使用第三方框架) document.getElementById(ID).value 8、根据你的理解,请简述JavaScript脚本的执行原理? JavaScript是一种动态、弱类型、基于原型的语言通过浏览器可以直接执行。 当浏览器遇到script 标记的时候浏览器会执行之间的javascript代码。嵌入的js代码是顺序执行的每个脚本定义的全局变量和函数都可以被后面执行的脚本所调用。 变量的调用必须是前面已经声明否则获取的变量值是undefined。 9、DOM操作怎样添加、移除、移动、复制、创建和查找节点? 1创建新节点 createDocumentFragment() //创建一个DOM片段 createElement() //创建一个具体的元素 createTextNode() //创建一个文本节点 2添加、移除、替换、插入 appendChild() removeChild() replaceChild() insertBefore() //在已有的子节点前插入一个新的子节点 3查找 getElementsByTagName() //通过标签名称 getElementsByName() //通过元素的Name属性的值(IE容错能力较强会得到一个数组其中包括id等于name值的) getElementById() //通过元素Id唯一性 10、说说你对json的理解? 回答一a、JSON对象以“{”开始以“}”结束里面则是一系列的键key值value对键和值用“:”分开每对键值对之间用“,”分开。参考以下语法结构{key1:value1,key2:value2,key3:value3…}其中键key是字符串而值value可以是字符串数值true,false,null,对象或数组也就是说某个键key的值value可以是一个数组数组里面又是一些JSON对象这种表示稍微复杂一些但是参照这些理解可以很容易分辨出来。b、JSON数组以”[”开始”]”结束如同程序语言一样例如C#Button[] btnArray,则BtnArray是一个Button类型的数组里面就存放Button类型的对象那么JSON数组也一样里面存放的也是JSON对象.回答二a、JSON 指的是 JavaScript 对象表示法JavaScript Object Notationb、JSON 是轻量级的文本数据交换格式并不是编程语言c、JSON 独立于语言存在d、JSON 具有自我描述性更易理解e、JSON 可以将 JavaScript 对象中表示的一组数据转换为字符串然后就可以在函数之间轻松地传递这个字符串或者在异步应用程序中将字符串从 Web 客户机传递给服务器端程序。这个字符串看起来有点儿古怪但是JavaScript很容易解释它而且 JSON 可以表示比名称 / 值对更复杂的结构。例如可以表示数组和复杂的对象而不仅仅是键和值的简单列表回答三JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式。它是基于JavaScript的一个子集。数据格式简单, 易于读写, 占用带宽小.json简单说就是javascript中的对象和数组所以这两种结构就是对象和数组两种结构通过这两种结构可以表示各种复杂的结构。(1)、对象对象在js中表示为“{}”括起来的内容数据结构为 {keyvalue,keyvalue,...}的键值对的结构在面向对象的语言中key为对象的属性value为对应的属性值所以很容易理解取值方法为 对象.key 获取属性值这个属性值的类型可以是 数字、字符串、数组、对象几种。(1)、数组数组在js中是中括号“[]”括起来的内容数据结构为 [java,javascript,vb,...]取值方式和所有语言中一样使用索引获取字段值的类型可以是数字、字符串、数组、对象几种。经过对象、数组2种结构就可以组合成复杂的数据结构了。 11、ionic和angularjs的区别? a、ionic是一个用来开发混合手机应用的开源的免费的代码库。可以优化html、css和js的性能构建高效的应用程序而且还可以用于构建Sass和AngularJS的优化。b、AngularJS通过新的属性和表达式扩展了HTML。AngularJS可以构建一个单一页面应用程序SPAsSingle Page Applications。c、Ionic是一个混合APP开发工具它以AngularJS为中间脚本工具(称为库似乎又不恰当)所以你如果要使用Ionic开发APP就必须了解AngularJS。 12、谈谈你对闭包的理解? (1)、使用闭包主要是为了设计私有的方法和变量。闭包的优点是可以避免全局变量的污染缺点是闭包会常驻内存会增大内存使用量使用不当很容易造成内存泄露。(2)、闭包有三个特性a、函数嵌套函数b、函数内部可以引用外部的参数和变量c、参数和变量不会被垃圾回收机制回收 13、谈谈你This对象的理解? 回答一(1)、js的this指向是不确定的也就是说是可以动态改变的。call/apply 就是用于改变this指向的函数这样设计可以让代码更加灵活复用性更高(2)、this 一般情况下都是指向函数的拥有者。(3)、在函数自执行里this 指向的是 window 对象。扩展关于this还有一个地方比较让人模糊的是在dom事件里通常有如下3种情况a、使用标签属性注册事件此时this指向的是window对象。b、对与a要让this指向input可以将this作为参数传递。c、使用addEventListener等注册事件。此时this也是指向 input。回答二(1)、处于全局作用域下的this this;/*window*/ var a {name: this}/*window*/ var b [this];/*window*/ 在全局作用域下this默认指向window对象。(2)、处在函数中的this又分为以下几种情况a、一般定义的函数然后一般的执行 var a function(){ console.log(this); } a();/*window*/ this还是默认指向window。b、一般定义用new调用执行 var a function(){ console.log(this); } new a();/*新建的空对象*/ 这时候让this指向新建的空对象我们才可以给空对象初始化自有变量c、作为对象属性的函数调用时 var a { f:function(){ console.log(this) } } a.f();/*a对象*/ 这时候this指向调用f函数的a对象。(3)、通过call()和apply()来改变this的默认引用 var b {id: b}; var a { f:function(){ console.log(this)} } a.f.call(b);/*window*/ 所有函数对象都有的call方法和apply方法它们的用法大体相似f.call(b);的意思 是执行f函数并将f函数执行期活动对象里的this指向b对象这样标示符解析时this就会是b对象了。不过调用函数是要传参的。所以f.call(b, x, y); f.apply(b, [x, y]);好吧以上就是用call方法执行f函数与用apply方法执行f函数时传参方式它们之间的差异大家一目了然apply通过数组的方式传递参数call通过一个个的形参传递参数。(4)、一些函数特殊执行情况this的指向问题a、setTimeout()和setInverval(): var a function(){ console.log(this); } setTimeout(a,0);/*window*/ setInterval()类似。b、dom模型中触发事件的回调方法执行中活动对象里的this指向该dom对象。 14、JavaScript对象的几种创建方式? (1) var obj new Object(); (1) 工厂模式 function Parent(){ var Child new Object(); Child.name欲泪成雪; Child.age20; return Child; }; var x Parent(); 引用该对象的时候这里使用的是 var x Parent()而不是 var x new Parent();因为后者会可能出现很多问题前者也成为工厂经典方式,后者称之为混合工厂方式不推荐使用new的方式使用该对象(2)构造函数方式 function Parent(){this.name欲泪成雪;this.age20; }; var x new Parent(); (3) 原型模式 function Parent(){ }; Parent.prototype.name欲泪成雪; Parent.prototype.age20; var x new Parent(); (4)混合的构造函数原型方式推荐 function Parent(){this.name欲泪成雪;this.age22; }; Parent.prototype.levfunction(){return this.name; }; var x new Parent(); (5)动态原型方式 function Parent(){this.name欲泪成雪;this.age22; ; if(typeof Parent._levundefined){ Parent.prototype.levfunction(){return this.name; } Parent._levtrue; } }; var x new Parent(); 15、get和post的区别,何时使用post? (1)、get 是从服务器上获取数据post 是向服务器传送数据。 get 请求返回 request - URI 所指出的任意信息。Post 请求用来发送电子邮件、新闻或发送能由交互用户填写的表格。这是唯一需要在请求中发送body的请求。使用Post请求时需要在报文首部 Content - Length 字段中指出body的长度。(2)、get 是把参数数据队列加到提交表单的ACTION属性所指的URL中值和表单内各个字段一一对应在URL中可以看到。post是通过HTTP post机制将表单内各个字段与其内容放置在HTML HEADER内一起传送到ACTION属性所指的URL地址用户看不到这个过程。(3)、对于 get 方式服务器端用Request.QueryString获取变量的值对于 post 方式服务器端用Request.Form获取提交的数据。(4)、get 传送的数据量较小不能大于2KB。post 传送的数据量较大一般被默认为不受限制。但理论上IIS4中最大量为80KBIIS5中为100KB。 用IIS过滤器的只接受get参数所以一般大型搜索引擎都是用get方式。(5)get安全性非常低post 安全性相对较高。如果这些数据是中文数据而且是非敏感数据那么使用get如果用户输入的数据不是中文字符而且包含敏感数据那么还是使用 post 为好。 16、null和undefined的区别 (1)、null是一个表示无的对象转为数值时为0undefined是一个表示无的原始值转为数值时为NaN。当声明的变量还未被初始化时变量的默认值为undefined。(2)、null用来表示尚未存在的对象常用来表示函数企图返回一个不存在的对象。(3)、undefined表示缺少值就是此处应该有一个值但是还没有定义。典型用法是a、变量被声明了但没有赋值时就等于undefined。b、调用函数时应该提供的参数没有提供该参数等于undefined。c、对象没有赋值的属性该属性的值为undefined。d、函数没有返回值时默认返回undefined。(4)、null表示没有对象即该处不应该有值。典型用法是a、作为函数的参数表示该函数的参数不是对象。b、作为对象原型链的终点。 17、请写出js内存泄漏的问题? 回答一(1)、IE7/8 DOM对象或者ActiveX对象循环引用导致内存泄漏a、多个对象循环引用b、循环引用自己(2)、基础的DOM泄漏当原有的DOM被移除时子结点引用没有被移除则无法回收。(3)、timer定时器泄漏这个时候你无法回收buggyObject,解决办法先停止timer然后再回收回答二内存泄漏指任何对象在您不再拥有或需要它之后仍然存在。垃圾回收器定期扫描对象并计算引用了每个对象的其他对象的数量。如果一个对象的引用数量为 0没有其他对象引用过该对象或对该对象的惟一引用是循环的那么该对象的内存即可回收。setTimeout 的第一个参数使用字符串而非函数的话会引发内存泄漏。闭包、控制台日志、循环在两个对象彼此引用且彼此保留时就会产生一个循环也会引发内存泄漏问题。 18、哪些地方会出现css阻塞哪些地方会出现js阻塞 js的阻塞特性所有浏览器在下载JS的时候会阻止一切其他活动比如其他资源的下载内容的呈现等等。直到JS下载、解析、执行完毕后才开始继续并行下载其他资源并呈现内容。为了提高用户体验新一代浏览器都支持并行下载JS但是JS下载仍然会阻塞其它资源的下载例如.图片css文件等。由于浏览器为了防止出现JS修改DOM树需要重新构建DOM树的情况所以就会阻塞其他的下载和呈现。嵌入JS会阻塞所有内容的呈现而外部JS只会阻塞其后内容的显示2种方式都会阻塞其后资源的下载。也就是说外部样式不会阻塞外部脚本的加载但会阻塞外部脚本的执行。CSS怎么会阻塞加载CSS本来是可以并行下载的在什么情况下会出现阻塞加载了(在测试观察中IE6下CSS都是阻塞加载当CSS后面跟着嵌入的JS的时候该CSS就会出现阻塞后面资源下载的情况。而当把嵌入JS放到CSS前面就不会出现阻塞的情况了。根本原因因为浏览器会维持html中css和js的顺序样式表必须在嵌入的JS执行前先加载、解析完。而嵌入的JS会阻塞后面的资源加载所以就会出现上面CSS阻塞下载的情况。JS应该放在什么位置(1)、放在底部虽然放在底部照样会阻塞所有呈现但不会阻塞资源下载。(2)、如果嵌入JS放在head中请把嵌入JS放在CSS头部。(3)、使用defer只支持IE(4)、不要在嵌入的JS中调用运行时间较长的函数如果一定要用可以用setTimeout来调用Javascript无阻塞加载具体方式将脚本放在底部。link还是放在head中用以保证在js加载前能加载出正常显示的页面。script标签放在/body前。成组脚本由于每个script标签下载时阻塞页面解析过程所以限制页面的script总数也可以改善性能。适用于内联脚本和外部脚本。非阻塞脚本等页面完成加载后再加载js代码。也就是在window.onload事件发出后开始下载代码。1defer属性支持IE4和fierfox3.5更高版本浏览器2动态脚本元素文档对象模型DOM允许你使用js动态创建HTML的几乎全部文档内容。代码如下 script var scriptdocument.createElement(script); script.typetext/javascript; script.srcfile.js; document.getElementsByTagName(head)[0].appendChild(script); /script 此技术的重点在于无论在何处启动下载文件额下载和运行都不会阻塞其他页面处理过程。即使在head里除了用于下载文件的http链接。 19、对比Flash与ajax哪个好,在使用中如何取舍 Ajax的优势(1)、可搜索性普通的文本网页会更有利于SEO。文本内容是搜索引擎容易检索的而繁琐的swf字节码却是搜索引擎不愿触及的。虽然Google等一些大型的搜索引擎可以检索SWF内部的内容但是仍然有很多麻烦存在。(2)、开放性Flash常年以来被Macromedia看的很死。包括Flex、FMS等辅佐技术一直都需要昂贵的安装、维护费用。而JS则没有这样的麻烦。没有人愿意承担法律和版权的风险。费用Flash开发是很昂贵的因为FlashIDE等环境都是要收费的而Ajax则不同虽然有一些便宜的生成swf的工具但是他们的工能实在无法满足复杂需求。(3)、易用性Ajax程序有更好的易用性。由于中间有一层Flashplayer代理层因此许多辅助功能无法被Flash灵活利用。而且Flash在一些方面有着不好的口碑。比如弹出广告、比如恶意代码。awflasher.com个人认为这八成是乱上xx网站造成的(4)、易于开发人们开发复杂的Ajax和Flash应用程序时都会借助一些高级的开发工具。普遍来说Ajax的开发包比Flash简便、容易。Flash的优势(1)、多媒体处理Flash在音频、视频等多媒体领域相比HTML有绝对的优势。现在几乎所有的网站都包含有Flash内容。(2)、兼容性兼容性好由于通过了唯一的FlashPlayer“代理”。人们不必像调试JS那样在不同的浏览器中调试程序。(3)、矢量图型这是Flash最大的优势同样处在这一领域的SVG、Canvas element以及Direct完全不能与Flash相比。(4)、客户端资源调度Flash能够更容易的调用浏览器以外的外部资源。比如摄像头、麦克风等。然而这是普通的HTML无法完成的。但是这也许是一个缺点为什么呢Ajax的劣势(1)、它可能破坏浏览器的后退功能 (2)、使用动态页面更新使得用户难于将某个特定的状态保存到收藏夹中 不过这些都有相关方法解决。Flash的劣势(1)、二进制格式 (2)、格式私有(3)、flash 文件经常会很大用户第一次使用的时候需要忍耐较长的等待时间 (4)/性能问题ajax与flash各有利弊到底哪个好这取决于你的需求 20、请你解释一下事件冒泡机制? a、在一个对象上触发某类事件比如单击onclick事件如果此对象定义了此事件的处理程序那么此事件就会调用这个处理程序如果没有定义此事件处理程序或者事件返回true那么这个事件会向这个对象的父级对象传播从里到外直至它被处理父级对象所有同类事件都将被激活或者它到达了对象层次的最顶层即document对象有些浏览器是window。b、冒泡型事件事件按照从最特定的事件目标到最不特定的事件目标(document对象)的顺序触发c、js冒泡机制是指如果某元素定义了事件A如click事件如果触发了事件之后没有阻止冒泡事件那么事件将向父级元素传播触发父类的click函数。 //阻止冒泡时间方法兼容ie(e.cancleBubble)和ff(e.stopProgation) function stopBubble(e){ var evt e||window.event; evt.stopPropagation?evt.stopPropagation():(evt.cancelBubbletrue);//阻止冒泡 evt.preventDefault 21、请你说说split()与join() 函数的区别? 前者是切割成数组的形式后者是将数组转换成字符串 Join 函数获取一批字符串然后用分隔符字符串将它们联接起来从而返回一个字符串。Split 函数获取一个字符串然后在分隔符处将其断开从而返回一批字符串。但是这两个函数之间的主要区别在于 Join 可以使用任何分隔符字符串将多个字符串连接起来而 Split 只能使用一个字符分隔符将字符串断开。简单地说如果你用split是把一串字符根据某个分隔符分成若干个元素存放在一个数组里。而Join是把数组中的字符串连成一个长串可以大体上认为是split的逆操作。 22、说说你对Promise的理解? ES6 原生提供了 Promise 对象。所谓 Promise就是一个对象用来传递异步操作的消息。它代表了某个未来才会知道结果的事件通常是一个异步操作并且这个事件提供统一的 API可供进一步处理。Promise 对象有以下两个特点。(1)、对象的状态不受外界影响。Promise 对象代表一个异步操作有三种状态Pending进行中、Resolved已完成又称 Fulfilled和 Rejected已失败。只有异步操作的结果可以决定当前是哪一种状态任何其他操作都无法改变这个状态。这也是 Promise 这个名字的由来它的英语意思就是「承诺」表示其他手段无法改变。(2)、一旦状态改变就不会再变任何时候都可以得到这个结果。Promise 对象的状态改变只有两种可能从 Pending 变为 Resolved 和从 Pending 变为 Rejected。只要这两种情况发生状态就凝固了不会再变了会一直保持这个结果。就算改变已经发生了你再对 Promise 对象添加回调函数也会立即得到这个结果。这与事件Event完全不同事件的特点是如果你错过了它再去监听是得不到结果的。 有了 Promise 对象就可以将异步操作以同步操作的流程表达出来避免了层层嵌套的回调函数。此外Promise 对象提供统一的接口使得控制异步操作更加容易。 Promise 也有一些缺点。首先无法取消 Promise一旦新建它就会立即执行无法中途取消。其次如果不设置回调函数Promise 内部抛出的错误不会反应到外部。第三当处于 Pending 状态时无法得知目前进展到哪一个阶段刚刚开始还是即将完成。 23、谈谈你对Javascript垃圾回收机制的理解 (1)、标记清除mark and sweep这是JavaScript最常见的垃圾回收方式当变量进入执行环境的时候比如函数中声明一个变量垃圾回收器将其标记为“进入环境”当变量离开环境的时候函数执行结束将其标记为“离开环境”。垃圾回收器会在运行的时候给存储在内存中的所有变量加上标记然后去掉环境中的变量以及被环境中变量所引用的变量闭包在这些完成之后仍存在标记的就是要删除的变量了(2)、引用计数(reference counting)在低版本IE中经常会出现内存泄露很多时候就是因为其采用引用计数方式进行垃圾回收。引用计数的策略是跟踪记录每个值被使用的次数当声明了一个 变量并将一个引用类型赋值给该变量的时候这个值的引用次数就加1如果该变量的值变成了另外一个则这个值得引用次数减1当这个值的引用次数变为0的时 候说明没有变量在使用这个值没法被访问了因此可以将其占用的空间回收这样垃圾回收器会在运行的时候清理掉引用次数为0的值占用的空间。在IE中虽然JavaScript对象通过标记清除的方式进行垃圾回收但BOM与DOM对象却是通过引用计数回收垃圾的也就是说只要涉及BOM及DOM就会出现循环引用问题。 24、说说你对原型prototype理解? JavaScript是一种通过原型实现继承的语言与别的高级语言是有区别的像javaC#是通过类型决定继承关系的JavaScript是的动态的弱类型语言总之可以认为JavaScript中所有都是对象在JavaScript中原型也是一个对象通过原型可以实现对象的属性继承JavaScript的对象中都包含了一个 prototype内部属性这个属性所对应的就是该对象的原型。 prototype作为对象的内部属性是不能被直接访问的。所以为了方便查看一个对象的原型Firefox和Chrome内核的JavaScript引擎中提供了__proto__这个非标准的访问器ECMA新标准中引入了标准对象原型访问器Object.getPrototype(object)。 原型的主要作用就是为了实现继承与扩展对象。 25、typeof与instanceof的区别是什么 在 JavaScript 中判断一个变量的类型可以用typeof(1)、数字类型 typeof 返回的值是 number。比如说typeof(1)返回值是number(2)、字符串类型 typeof 返回的值是 string。比如typeof(123)返回值是string。 (3)、布尔类型 typeof 返回的值是 boolean 。比如typeof(true)返回值是boolean。(4)、对象、数组、null 返回的值是 object 。比如typeof(window)typeof(document)typeof(null)返回的值都是object。(5)、函数类型返回的值是 function。比如typeof(eval)typeof(Date)返回的值都是function。(6)、不存在的变量、函数或者undefined将返回undefined。比如typeof(abc)、typeof(undefined)都返回undefined。在 JavaScript 中,instanceof用于判断某个对象是否被另一个函数构造。使用 typeof 运算符时采用引用类型存储值会出现一个问题无论引用的是什么类型的对象它都返回 object。ECMAScript 引入了另一个 Java 运算符 instanceof 来解决这个问题。instanceof 运算符与 typeof 运算符相似用于识别正在处理的对象的类型。与 typeof 方法不同的是instanceof 方法要求开发者明确地确认对象为某特定类型。 26、说说你对node.js的理解? a、Node.js 是一个基于Google Chrome V8 引擎的 JavaScript 运行环境。Node.js 使用了一个事件驱动、非阻塞式 I/O 的模型使其轻量又高效。Node.js 的包管理器 npm是全球最大的开源库生态系统。b、能方便地搭建响应速度快、易于扩展的网络应用Node.js 使用事件驱动 非阻塞I/O 模型而得以轻量和高效非常适合在分布式设备上运行的数据密集型的实时应用。c、简单说Node.js就是运行在服务器端的JavaScript是现在流行的语言中能同时运行在前端与后台的程序语言 27、NPM(包管理器)作用是什么? NPM是随同NodeJS一起安装的包管理工具能解决NodeJS代码部署上的很多问题常见的使用场景有以下几种a、允许用户从NPM服务器下载别人编写的第三方包到本地使用。b、允许用户从NPM服务器下载并安装别人编写的命令行程序到本地使用。c、允许用户将自己编写的包或命令行程序上传到NPM服务器供别人使用。 28、请简要说说你对Javascript面向对象的理解? 为了说明 JavaScript 是一门彻底的面向对象的语言首先有必要从面向对象的概念着手 , 探讨一下面向对象中的几个概念a、一切事物皆对象b、对象具有封装和继承特性c、对象与对象之间使用消息通信各自存在信息隐藏以这三点做为依据C 是半面向对象半面向过程语言因为虽然他实现了类的封装、继承和多态但存在非对象性质的全局函数和变量。Java、C# 是完全的面向对象语言它们通过类的形式组织函数和变量使之不能脱离对象存在。但这里函数本身是一个过程只是依附在某个类上。然而面向对象仅仅是一个概念或者编程思想而已它不应该依赖于某个语言存在。比如 Java 采用面向对象思想构造其语言它实现了类、继承、派生、多态、接口等机制。但是这些机制只是实现面向对象编程的一种手段而非必须。换言之一门语言可以根据其自身特性选择合适的方式来实现面向对象。所以由于大多数程序员首先学习或者使用的是类似 Java、C 等高级编译型语言Java 虽然是半编译半解释但一般做为编译型来讲解因而先入为主地接受了“类”这个面向对象实现方式从而在学习脚本语言的时候习惯性地用类式面向对象语言中的概念来判断该语言是否是面向对象语言或者是否具备面向对象特性。这也是阻碍程序员深入学习并掌握 JavaScript 的重要原因之一。实际上JavaScript 语言是通过一种叫做 原型prototype的方式来实现面向对象编程的。下面就来讨论 基于类的class-based面向对象和 基于原型的 (prototype-based) 面向对象这两种方式在构造客观世界的方式上的差别。 基于类的面向对象和基于原型的面向对象方式比较在基于类的面向对象方式中对象object依靠类class来产生。而在基于原型的面向对象方式中对象object则是依靠 构造器constructor利用 原型prototype构造出来的。举个客观世界的例子来说明二种方式认知的差异。例如工厂造一辆车一方面工人必须参照一张工程图纸设计规定这辆车应该如何制造。这里的工程图纸就好比是语言中的 类 (class)而车就是按照这个 类class制造出来的另一方面工人和机器 ( 相当于 constructor) 利用各种零部件如发动机轮胎方向盘 ( 相当于 prototype 的各个属性 ) 将汽车构造出来。事实上关于这两种方式谁更为彻底地表达了面向对象的思想目前尚有争论。但笔者认为原型式面向对象是一种更为彻底的面向对象方式理由如下(1)、首先客观世界中的对象的产生都是其它实物对象构造的结果而抽象的“图纸”是不能产生“汽车”的也就是说类是一个抽象概念而并非实体而对象的产生是一个实体的产生(2)、其次按照一切事物皆对象这个最基本的面向对象的法则来看类 (class) 本身并不是一个对象然而原型方式中的构造器 (constructor) 和原型 (prototype) 本身也是其他对象通过原型方式构造出来的对象。(3)、再次在类式面向对象语言中对象的状态 (state) 由对象实例 (instance) 所持有对象的行为方法 (method) 则由声明该对象的类所持有并且只有对象的结构和方法能够被继承而在原型式面向对象语言中对象的行为、状态都属于对象本身并且能够一起被继承参考资源这也更贴近客观实际。(4)、最后类式面向对象语言比如 Java为了弥补无法使用面向过程语言中全局函数和变量的不便允许在类中声明静态 (static) 属性和静态方法。而实际上客观世界不存在所谓静态概念因为一切事物皆对象而在原型式面向对象语言中除内建对象 (build-in object) 外不允许全局对象、方法或者属性的存在也没有静态概念。所有语言元素 (primitive) 必须依赖对象存在。但由于函数式语言的特点语言元素所依赖的对象是随着运行时 (runtime) 上下文 context变化而变化的具体体现在this指针的变化。正是这种特点更贴近“万物皆有所属宇宙乃万物生存之根本”的自然观点。在 程序清单 1中 window 便类似与宇宙的概念。 29、你对JavaScript函数的理解是? javascript中的函数就是对象对象就是“键/值”对的集合并拥有一个连接到原型对隐藏连接。 (1)、参数对象 arguments第一个函数中有一个默认对象叫arguments类似数组但不是数组该对象是传递给函数的参数。(2)、构造函数在javascript中对象构造函数可以创建一个对象。(3)、函数调用a、call调用一个对象的一个方法以另一个对象替换当前对象b、apply应用某一对象的一个方法用另一个对象替换当前对象与call类似。c、caller在一个函数调用另一个函数时被调用函数会自动生成一个caller属性指向调用它的函数对象。如果该函数当前未被调用或并非被其他函数调用则caller为null。d、Callee当函数被调用时它的arguments.callee对象就会指向自身也就是一个对自己的引用。 30、简要说说什么是IIFE它有什么作用? IIFE即Immediately-Invoked Function Expression立即执行函数表达式 立即执行的函数表达式的执行括号应该写在外包括号内。虽然写在内还是写在外都是有效的但写在内使得整个表达式看起来更像一个整体因此推荐这么做。 //最常用的两种写法 (function(){ /* code */ }()); // 老师推荐写法 (function(){ /* code */ })(); // 当然这种也可以// 括号和JS的一些操作符如 || ,等可以在函数表达式和函数声明上消除歧义 // 如下代码中解析器已经知道一个是表达式了于是也会把另一个默认为表达式 // 但是两者交换则会报错 var i function(){ return 10; }(); true function(){ /* code */ }(); 0, function(){ /* code */ }();// 如果你不怕代码晦涩难读也可以选择一元运算符 !function(){ /* code */ }(); ~function(){ /* code */ }(); -function(){ /* code */ }(); function(){ /* code */ }();// 你也可以这样 new function(){ /* code */ } new function(){ /* code */ }() // 带参 IIFE的作用(1)、提高性能减少作用域查找时间。使用IIFE的一个微小的性能优势是通过匿名函数的参数传递常用全局对象window、document、jQuery在作用域内引用这些全局对象。JavaScript解释器首先在作用域内查找属性然后一直沿着链向上查找直到全局范围。将全局对象放在IIFE作用域内提升js解释器的查找速度和性能。(2)、压缩空间通过参数传递全局对象压缩时可以将这些全局对象匿名为一个更加精简的变量名3)、避免冲突匿名函数内部可以形成一个块级的私有作用域。(4)、依赖加载可以灵活的加载第三方插件当然使用模块化加载更好AMD,CMD 31、谈谈你对Function与Object的理解? Function函数就是对象,代表函数的对象就是函数对象。所有的函数对象是被Function这个函数对象构造出来的。Function是最顶层的构造器。它构造了系统中所有的对象包括用户自定义对象系统内置对象甚至包括它自已。这也表明Function具有自举性(自已构造自己的能力)。这也间接决定了Function的call和constructor逻辑相同。每个对象都有一个 constructor 属性,用于指向创建其的函数对象。a、函数与对象具有相同的语言地位b、没有类,只有对象c、函数也是一种对象,所谓的函数对象d、对象是按引用来传递的Object对于Object它是最顶层的对象所有的对象都将继承Object的原型但是你也要明确的知道Object也是一个函数对象所以说Object是被Function构造出来的。 JavaScript 原型链 32、$.extend与$.fn.extend区别是什么? $.extend在jQuery根命名空间下直接调用的方法可以认为是jQuery的静态方法或属性常常使用方法名来调用使用.方法名来调用使用.extend这个静态方法可以完成两个功能:a、扩展属性或方法给jQueryb、扩展对象$.fn.extend.fn就是jQuery的原型.fn等于jQuery.prototype是jQuery的别名。.fn.extend方法的作用是用于扩展jQuery实例对象也就是我们从页面中获得的jQuery对象。.fn扩展了jQuery的原型让所有的jQuery实例对象都得到的扩展的方法其它也可以直接修改jQuery.prototype来实现.fn是jQuery.prototype的简写 33、什么是链式编程? 几乎在所有基于“类型”的语言中如果调用一个方法后将对象作为方法参数返回则就会形成链式编程链式编程是将多个操作多行代码通过点号.链接在一起成为一句代码。 链式代码通常要求操作有返回值 但对于很多操作大都是void型什么也不返回这样就很难链起来了 当然也有解决办法可能不太优雅。 链式编程的新思想在jQuery中已流行使用 示例: return $.each(this, function(index, obj) {$(span/).html().css(cursor, pointer).click(function() {$(obj).width($(obj).width() length);}).insertAfter(obj);}); 上面的示例中当$.each循环完成后返回this对象返回的仍然是一个jQuery对象所以可以继续jQuery编程。 $(button).SuperPlus(10).height(26).width(100).css(color,blue); 34、请指出 JavaScript中的本地对象、内置对象、宿主对象的区别 (1)、本地对象ECMA-262 把本地对象native object定义为“独立于宿主环境的 ECMAScript 实现提供的对象”。再来看一下“本地对象”包含哪些内容Object、Function、Array、String、Boolean、Number、Date、RegExp、Error、EvalError、RangeError、ReferenceError、SyntaxError、TypeError、URIError由此可以看出简单来说本地对象就是 ECMA-262 定义的类引用类型。(2)、内置对象ECMA-262 把内置对象built-in object定义为“由 ECMAScript 实现提供的、独立于宿主环境的所有对象在 ECMAScript 程序开始执行时出现”。这意味着开发者不必明确实例化内置对象它已被实例化了。同样是“独立于宿主环境”。根据定义我们似乎很难分清“内置对象”与“本地对象”的区别。而ECMA-262 只定义了两个内置对象即 Global 和 Math 它们也是本地对象根据定义每个内置对象都是本地对象。如此就可以理解了。内置对象是本地对象的一种。而其包含的两种对象中Math对象我们经常用到可这个Global对象是啥东西呢Global对象是ECMAScript中最特别的对象因为实际上它根本不存在但大家要清楚在ECMAScript中不存在独立的函数所有函数都必须是某个对象的方法。类似于isNaN()、parseInt()和parseFloat()方法等看起来都是函数而实际上它们都是Global对象的方法。(3)、宿主对象由ECMAScript实现的宿主环境提供的对象即我们网页的运行环境操作系统和浏览器所有的BOM和DOM都是宿主对象。 宿主环境提供的全局方法 alert、confirm、prompt、write、writeln(后面的两种是document的方法)内置对象是本地对象的一种本地对象时由官方定义的而宿主对象相当于由自己定义的对象、DOM对象和BOM对象组成的 35、请解释一下变量声明提升? a、变量定义可以使用var定义变量变量如果没有赋值那变量的初始值为undefined。b、变量作用域变量作用域指变量起作用的范围。变量分为全局变量和局部变量。全局变量在全局都拥有定义而局部变量只能在函数内有效。 在函数体内同名的局部变量或者参数的优先级会高于全局变量。也就是说如果函数内存在和全局变量同名的局部变量或者参数那么全局变量将会被局部变量覆盖。 所有不使用var定义的变量都视为全局变量。 36、内容还会不断补充。。。 博客数据来源声明本博客大部分数据来源于各大网站的收集整理改编主要有GitHub(https://github.com)、题来了(http://www.tilaile.com)、牛客网(https://www.nowcoder.com)、一些英文网站还有一些论坛、博客、IT招聘等网站。还有少部分数据时来源于本人自己整理添加添加的内容主要是本人认为比较重要知识点面试时可能会问到的题目自己整理题目以及参考答案答案仅供参考答案可能存有错误或不足欢迎大家批评指正或补充更好的答案。好让我及时更正以免误导其他人。本博客仅提供参考作用。转载于:https://www.cnblogs.com/SeeYouBug/p/6189118.html
http://www.pierceye.com/news/623288/

相关文章:

  • 做隐私的网站大型网站制作报价
  • 保康网站建设psd转wordpress主题
  • 网站开发远程服务器如何设置三河市网站建设
  • 网站开发与运营方向已经有域名 怎么做网站
  • 绍兴网站建设专业的公司整站优化网站报价
  • 揭阳网站制作套餐邯郸市建设局网站材料下载入口
  • 整站seo公司做盗版小说网站赚钱嘛
  • 网站文章优化怎么做网站快速备案安全吗
  • dede网站本地访问速度慢哪个app可以免费下载ppt模板
  • 网站改版方案流程龙华网站建设主要工作
  • 福田网站制作报价百度推广工作怎么样
  • 常熟智能网站开发蚌埠市建设工程质监站网站
  • 网站做水印有没有影响吗怎么设计公司网页
  • 做视频推广有哪几个网站wordpress 多重筛选插件
  • 电脑网站怎样给网页做适配官方正版浏览器
  • php 可以自己做网站吗网站建设尾款如何做会计分录
  • app开发哪家公司好东莞网站优化多少钱
  • 企业网站最重要的访问对象是谈一谈对网站开发的理解
  • 国外网站做问卷怎么做免费公司网站
  • 内容型网站有哪些企业网站常见问题
  • 毕节市住房和城乡建设局网站做wordpress总结
  • 桐城市建设局网站wordpress主题美容
  • 海阳市城建设局网站深圳高端设计公司名单
  • 高端网站制作系统网站开发的背景和意义
  • 假电影网站做注册长春seo代理计费
  • 网站代运营公司怎么做vip电影网站
  • 南京网站南京网站设计制作公司提高工作效率
  • 大连网站制作最好的公司萍乡商城网站建设
  • 做网站有2个前提条件_一个是网站班级优化大师app下载学生版
  • 自己做网站广告法wordpress自带评论表情