200+道JavaScript基础面试题(上)

640?wx_fmt=png 来源 |  前端程序员面试秘籍


在此之前,我也跟大家分享过很多的面试题,今天我要跟大家分享的这个JavaScript的面试一共有200多道,均来源于张容铭的《前端程序员面试秘籍》,这个是一本前端面试类型的图书,适用于前端学习与前端求职者,面试刷题,里面涵盖的内容比较广,今天我只是分享了此书中的JavaScript内容中的一部分面试题。
01、JavaSript有哪些垃圾回收机制?

标记清除( mark and sweep ) 这是JavaScr i pt 最常见的垃圾回收方式。当变量进入执行环境的时候,比如在函数 中声明一个变量,垃圾回收器将其标记为“进入环境” 。 当变量离开环境的时候(函数执 行结束),将其标记为“离开环境”。 垃圾回收器会在运行的时候给存储在内存中的所有变量加上标记,然后去掉环境中 的变量,以及被环境中变量所引用的变量(闭包)的标记。在完成这些之后仍然存在的 标记就是要删除的变量。 引用计数( reference counting) 在低版本的IE 中经常会发生内存泄漏,很多时候就是因为它采用引用计数的方式进 行垃圾回收。引用计数的策略是跟踪记录每个值被使用的次数。当声明了一个变量并将一个引用类型赋值给该变量的时候, 这个值的引用次数就加1 。如果该变量的值变成了另外一个,则这个值的引用次数就减1 。 当这个值的引用次数变为0 的时候,说明没有变量在使用,这个值没法被访问。 因此, 可以将它占用的空间回收,这样垃圾回收器会在 运行的时候清理引用次数为0 的值占用的空间。 在IE中虽然JavaScript 对象通过标记清除的方式进行垃圾回收,但是BOM 与DOM 对象 是用引用计数的方式回收垃圾的。也就是说, 只要涉及BOM 和DOM , 就会出现循环引用问题。


02、列举几种类型的DO M 节点 有以下几类DOM 节点。 • 整个文档是一个文档( Document )节,点。 • 每个HTML 标签是一个元素( E l ement )节点。 • 每一个HTML 属性是一个属性( Attribute )节点。. 包含在HTML 元素中的文本是文本( Text )节点。


03、谈谈JavaSript 标签中defer 和async 属性的区别。 ( 1 ) defer 属性规定是否延迟执行脚本,直到页面加载为止。async 属性规定脚本一旦可用,就异步执行。 ( 2) defer 并行加载JavaScript 文件, 会按照页面上script 标签的顺序执行。async 并 行加载JavaScript 文件,下载完成立即执行,不会按照页面上JavaScript 标签的顺序执行。


04、说说你对闭包的理解。 使用闭包主要是为了设计私有的方法和支量。闭包的优点是可以避免全局变量 的污染;缺点是闭包会常驻内存, 增加内存使用量,使用不当很容易造成内存泄漏。在 JavaScript 中,函数即闭包,只有函数才会产生作用域。 闭包有3 个特性。 ( I )函数嵌套函数。 ( 2 )在函数内部可以引用外部的参数和支量。 ( 3 )参数和变量不会以垃圾回收机制回收。


05、解释一下unshift ()方法。 该方法在数组启动时起作用,与push ()不同。它将参数成员添加到数组的顶部。 下面给出一段示例代码。
 
 
var name= [ ” ] ohn ” ]	
name unshift (”char lie”);	
name unshi ft ( ” ] oseph”,” Jane " ) ;	
cons ole log (name );	
输出生口下所示。	
[ ” joseph H ,” Jane ”,” char lie ”,” john ” ]


06、encodeURI ()和decodeURI ()的作用是什么? encodeURI()用于将URL 转换为十六进制编码。而decodeURI()用于将编码的URL 转换回正常URL 。


07、为什么不建议在JavaScript 中使用innerHTML? 通过innerHTML 修改内容, 每次都会刷新,因此很慢。在innerHTML 中没有 验证的机会, 因此更容易在文档中插入错误代码,使网页不稳定。


08、如何在不支持JavaScript 的旧浏览器中隐藏JavaScrpit 代码? 在<script>标签之后的代码中添加“<!一” , 不带引号。 在</script>标签之前添加“刀…>”,代码中没有引号。 旧浏览器现在将JavaScript 代码视为一个长的HTML 注释, 而支持JavaScript 的浏 览器则将“< !一” 和“// …>” 作为一行注释。


09、在DOM 操作中怎样创建、添加、移除、替换、插入和查找节点? 具体方法如下。 ( 1 ) 通过以下代码创建新节点。 createDocurnentFragrnent ()      // 创建一个DOM 片段 createElernent()            // 创建一个具体的元素 creat eTextNode( )          //创建一个文本节点


( 2 ) 通过以下代码添加、移除、替换、插入节,点。 appendChild() removeChild ( ) replaceChild () insertBefore () //并没有inse r tAf t er ()
( 3 )通过以下代码查找节点。 getElernentsByTagNarne()       //通过标签名称查找节点 getE l erne 口tsByNarne ()       //通过元素的name 属性的值查找节点( IE 容错能力较强, 会得到一个数                                              //组, 其中包括id 等于name 值的节点) getElernentByid()                   //通过元素 Id 查找节点, 具有唯一性


10、如何实现浏览器内多个标签页之间的通信? 调用Jocalstorge 、cookie 等数据存储通信方式。


11、null 和undefined 的区别是什么? null 是一个表示“无”的对象, 转为数值时为O; undefined 是一个表示“元” 的原始千直, 转为主丈千直时为NaN 。 当声明的变量还未初始化时,变量的默认值为undefined , null 用来表示尚未存在的对象,常用来表示函数企图返回一个不存在的对象。 undefined 表示“缺少值”, 即此处应该有一个值,但是还没有定义,典型用法是如下。 ( 1 )如果变量声明了,但没有赋值,它就等于undefined 。 ( 2 )当调用函数时,如果没有提供应该提供的参数,该参数就等于undefined 。 ( 3 )如果对象没有赋值,该属性的值为undefined 。 ( 4 )当函数没有返回值时, 默认返回undefined 。 null 表示“ 没有对象” , 即此处不应该有值,典型用法是如下。 ( 1 )作为函数的参数, 表示该函数的参数不是对象。 ( 2 )作为对象原型链的终点。


12、new 操作符的作用是什么? 作用如下。 ( l )创建一个空对象。 ( 2 )由this 变量引用该对象。 ( 3 )该对象继承该函数的原型(更改原型链的指向)。 ( 4 )把属性和方法加入到thi s 引用的对象中。 ( 5 )新创建的对象由this 引用,最后隐式地返回this ,过程如下。 var obj = {}; obj._proto_=Base.prototype; Base.call(obj);


13、JavaScript 延迟加载的方式有哪些? 包括defer 和async 、动态创建DOM (创建script , 插入DOM 中,加载完毕后 回调、按需异步载入JavaScript 。


14、call()和apply ()的区别和作用是什么? 作用都是在函数执行的时候,动态改变函数的运行环境( 执行上下文)。 call 和apply 的第一个参数都是改变运行环境的对象。 区别如下: call 从第二个参数开始,每一个参数会依次传递给调用函数;apply 的第二个参数是 数组,数组的每一个成员会依次传递给调用函数。 如: func . call(funcl , varl , var2, var3) 对应的apply 写法为: func . apply(funcl, [varl, var2 , var3])
15、哪些操作会造成内存泄漏? 内存泄漏抬不再拥有或需要任何对象( 数据)之后,它们仍然存在于内存中。 提示:垃圾回收器定期扫描对象,并计算引用了每个对象的其他对象的数量。如果 一个对象的引用数量为0 (没有其他对象引用过该对象),或对该对象的唯一引用是循环的,那么该对象占用的内存立即被回收。 如果setTimeout 的第一个参数使用字符串而非函数,会引发内存泄漏。 闭包、控制台日志、循环(在两个对象彼此引用且彼此保留时,就会产生一个循环) 等会造内存泄漏。


16、列举I E 与finefox 的不同之处。 不同之处如下。 ( 1 ) IE 支持currentStyle; Firefox 使用getComputStyle 。 ( 2) IE 千史用innerText· Firefox 千史用textContent 。 ( 3 )在透明度滤镜方面, IE 使用自lter:alpha(opacity= num); Firefox 使用-moz-opacity:num。 ( 4 )在事件方面, IE 使用a ttachEv ent: Firefox 使用addEventListener。 ( 5 )对于鼠标位直:IE 使用event.clientX; Firefox 使用event.pageX 。 ( 6) IE 千史用event.srcElement· Firefox 千史用event . target 。 ( 7) 要消除list 的原点, IE 中仅须使margin:O 即可达到最终效果;Firetox 中需要设直 margin:O 、padding:O 和list” style:none 。 ( 8 ) css 圆角:IE7 以下不支持圆角。


17、讲解一下JavaScript 对象的几种创建方式。 有以下创建方式。 ( 1 ) Object 构造函数式。 ( 2 )对象字面量式。 ( 3 )工厂模式。 ( 4 )安全工厂模式。 ( 5 )构造函数模式。 ( 6 )原型模式。 ( 7) 混合构造函数和原型模式。 ( 8 )动态原型模式。 ( 9 )寄生构造函数模式。 ( 10 )稳妥构造函数模式。


18、如何实现异步编程? 具体方法如下。 方法1 ,通过回调函数。优点是简单、容易理解和部署· 缺点是不利于代码的阅读 和维护,各个部分之间高度相合( Coupling ),流程混乱,而且每个任务只能指定一个回调函数。 方法2 ,通过事件监听。可以绑定多个事件,每个事件可以指定多个回调函数,而 且可以“去搞合”( Decoupling ),有利于实现模块化;缺点是整个程序都要变成事件驱动型,运行流程会变得很不清晰。 方法3 ,采用发布/订阅方式。性质与“事件监听”类似, 但是明显优于后者。 方法4 ,通过Promise 对象实现。Promise 对象是CommonJS 工作组提出的一种规范, 旨在为异步编程提供统一接口。它的思想是,每一个异步任务返回一个Promise 对象,该对象有一个then 方法,九许指定回调函数。


19、请解释一下JavaScript的同源策略。 同源策略是客户端脚本(尤其是JavaScript )的重要安全度量标准。它最早出自 Netscape Navigator 2.0 ,目的是防止某个文档或脚本从多个不同源装载。这里的同源策略指的是协议、域名、端口相同。同源策略是一种安全协议。指一段脚本只能读取来自同一来源的窗口和文档的属性。


20、为什么要有同源限制? 我们举例说明。比如一个黑客, 他利用I frame 把真正的银行登录页面嵌到他的 页面上,当你使用真实的用户名、密码登录时,他的页面就可以通过JavaScript 读取到你表羊上input 中的内容,这样黑客就会轻松得到你的用户名和密码。


21、在JavaScript中,为什么说函数是第一类对象? 第一类函数即JavaScript 中的函数。这通常意味着这些函数可以作为参数传递给其 他函数,作为其他函数的值返回,分配给变量,也可以存储在数据结构中。


22、什么是事件?I E 与F irefo×的事件机制有什么区别?如何阻止冒泡? 事件是在网页中的某个操作(有的操作对应多个事件)。例如,当羊击一个按钮 时, 就会产生一个事件,它可以被JavaScr巾t 侦测到。 在事件处理机制上, IE 支持事件冒泡;F i refox 同时支持两种事件模型,也就是捕获 型事件和冒泡型事件。 阻止方法是ev. stopPropagation () 。注意旧版IE 中的方法ev. ca n ce!Bub bl e =true.


23、函数声明与函数表达式的区别? 在JavaScript 中,在向执行环境中加载数据时, 解析器对函数声明和函数表达式 并非是一视同仁的。解析器会首先读取函数声明,并使它在执行任何代码之前可用(可以 访问)。至于函数表达式,则必须等到解析器执行到它所在的代码行, 才会真正解析和执行它。


24、如何删除一个cookie? 为了删除cookie ,要修改exp i res ,代码如下。 document . cookie = user=icketang ; expires = '+new Date(0 )


25、编写一个方法,求一个字符串的长度( 单位是字节) 假设一个英文字符占用一字节, 一个中文字符占用两字节:
 
 
function  GetBytes (str ) {	
        var len = str . length ;	
        var bytes = len ;	
       for (var i=0 ; i<len ; i++) {	
         if ( str . charCodeAt ( 工) > 255 ) bytes++ ;	
     }	
     retu rn bytes ; 	
}	
alert(GetBytes ( ” hello 爱创课堂!” ) );


26、对于元素, attribute 和 property 的区别是什么? attribute 是DOM 元素在文档中作为HTML 标签拥有的属性;property 就是DOM 元素在JavaScr中t 中作为对象拥有的属性。 对于HTML 的标准属性来说, attribute 和property 是同步的,会自动更新,但是对 于自定义的属性来说,它们是不同步的。


27、解释延迟脚本在JavaScript 中的作用。 默认情况下,在页面加载期间, HTML 代码的解析将暂停, 直到脚本停止执行。 这意味着,如果服务器速度较慢或者脚本特别“沉重”,则会导致网页延迟。在使用 Deferred 时,脚本会延迟执行,直到HTML 解析器运行。这缩短了网页的加载时间,并 且它们的显示速度更快。


28、什么是闭包( closure ) ? 为了说明闭包,创建一个闭包。
 
 
function hello () {   //函数执行完毕, 变量仍然存在	
var num = 100 ;	
var showResu l t= function ( ) { alert (num ); }	
num++ ;	
return showResult ;	
}	
var showResult= hello ();	
showResult ( )// 执行结果: 弹出10 1

执行hello ()后, hello ()闭包内部的变量会存在,而闭包内部函数的内部变量不会存 在,使得JavaScript 的垃圾回收机制不会收回hello ()占用的资源,因为h e llo ()中内部函数的执行需要依赖hello ()中的变量。


29、如何判断一个对象是否属于某个类? 使用instanceof 关键字,判断一个对象是否是类的实例化对象;使用constructor 属性,判断一个对象是否是类的构造函数。


30、JavaScript 中如何使用事件处理程序? 事件是由用户与页面的交互(例如羊击链接或填写表单) 导致的操作。需要一 个事件处理程序来保证所有事件的正确执行。事件处理程序是对象的额外属性。此属性 包括事件的名称和事件发生时采取的操作。


31、在JavaScript中有-个函数,执行直接对象查找时,它始终不会查找 原型,这个函数是什么? hasOwnPrope。


32、在JavaScript中如何使用DOM? DOM 代表文档对象模型,并且负责文档中各种对象的相王文互。DOM 是开发 网页所必需的,其中包括诸如段落、链接等对象。可以操作这些对象,如添加或删除等。为此, DOM 还需要向网页添加额外的功能。


33、documen.wn怡和innerHTML 的区别是什么? document.write 重绘整个页面;innerHTML 可以重绘页面的一部分。


34、在JavaScript中读取文件的方法是什么? 可以通过如下方式读取服务器中的文件内容。
 
 
function read.P.jaxFile (url) {	
//创建xhr	
var xhr = new XMLHttpRequest() ;	
//监听状态	
xhr . onreadysta techange = function () {	
//监听状态值是4	
if (xhr . readyState === 4 晶晶xhr.status === 200) {	
console . log(xhr . responseText)	
       }	
}	
//打开请求	
xhr . open ( ’ GET ', url , true)	
// 发送数据	
xhr . send(null) 	
}


可以通过如下方式读取本地计算机中的内容。
 
 
function readinputFile (id) {	
var file= document . getElementByid(id) . files[O] ;	
// 实例化FileReader	
var reader= new FileReader ();	
// 读取文件	
reader . readAsText(file)	
// 监听返回	
reader . on load = function (data) {	
console . log(data , this . result)	
     }	
}

35、如何分配对象属性? 将属性分配给对象的方式与赋值给变量的方式相同。例如,表羊对象的操作值 以下列方式分配给” submit ”:docume nt.form.action = ” submit ” 。


36、请说几条书写JavaSc 「ipt 语句的基本规范。 基本规范如下。 ( 1 )不要在同一行声明多个变量。 ( 2 )应使用===/ !==来比较t rue /false 或者数值。 ( 3 )使用对象字面量替代n ew Array 这种形式。 ( 4 )不要使用全局函数。 ( 5 ) switch 语句必须带有defau lt 分支。 ( 6 )函数不应该有时有返回值,有时没有返回值。 ( 7 ) for 循环必须使用大括号括起来。 ( 8 ) i f 语句必须使用大括号括起来。 ( 9 ) for-in 循环中的变量应该使用var 关键字明确限定的作用域,从而避免作用域污染。


37、eval 的功能是什么? 它的功能是把对应的字符串解析成JavaScript 代码并运行。 应该避免使用eval ,它会造成程序不安全,非常影响性能(执行两次, 一次解析成 JavaScript 语句, 一次执行)。


38、["1","2","3"] . map(parselnt)的执行结果是多少? [1, NaN, NaN] ,因为parselnt 需要两个参数( val, radix ), 其中radix 表示解析时用的 基数(进制); map 传递了3 个参数( item, index, array ),对应的radix 不合法导致解析失败。


39、谈谈你对this 对象的理解。 this 是JavaScript 的一个关键字,随着函数使用场合的不同, this 的值会发生变 化。但是有一个总原则, 即this 指的是调用函数的那个对象。 一般情况下, this 是全局对象Global , 可以作为方法调用。


40、web-garden 和web-farm 有什么不同? web-garden 和web-farm 都是网络托管系统。唯一的区别是web-garden 是在单个 服务器中包含许多处理器的设直,而web ”farm 是使用多个服务器的较大设置。


41、说一下document.write ()的用法。 docume旺write()方法可以用在两个地方,页面载入过程中用实时脚本创建页面 内容,以及用延时脚本创建本窗口或新窗口的内容。 document. write 只能重给整个页面, innerHTML 可以重给页面的一部分。


42、在JavaScript中什么是类(伪) 数组?如何将类(伪) 数组转化为标准数组? 典型的类(伪)数组是函数的argument 参数, 在调用getE lementsByTagName 和docum e nt.childNodes 方法时,它们返回的NodeList 对象都属于伪数组。可以使用Array.prototype.slice.call ( fakeArray )将数组转化为真正的Array 对象。


43、JavaScript 中callee 和caller的作用是什么? 品:caller 返回一个关于函数的引用,该函数调用了当前函数;callee 返回正在执行 的函数,也就是指定的function 对象的正文。


44、讲一下手写数组快速排序的步骤。 “快速排序”的思想很简单,整个排序过程只需要3 步。 ( 1 )在数据集之中,选择一个元素作为“基准”( pivot ) 。 ( 2 )将所有小于“基准”的元素,都移到“基准”的左边;将所有大于“基准”的 元素,都移到“基准”的右边。 ( 3 )对“基准”左边和右边的两个子集, 不断重复第( 1 )步和第( 2 )步, 直到所 有子集只剩下一个元素为止。


45、如何统计字符串飞aaabbbccccddfgh ”中字母的个数或统计最多的字母数? 具体代码如下。
 
 
var str = ” aaaabbbccccddfgh ”;	
function dealStr (str) {	
var obj = {) ;	
for (var i = 0 ; i < str. l ength; i++ ) {	
var v = str . charAt {i );	
if (obj[v] && ob][ v) . value===v ) {	
++ob][ v] . count	
) else {	
obj[v] = {	
count : 1 ,	
value : v	
                     }	
      }	
return obj ;	
}	
var obj= dealStr (str) ;	
for (key in obj) {	
console . log(obj[key) . value + ’ = ’ + obj [key] . count)	
}


46、写一个function ,清除字符串前后的空格(兼容所有浏览器) 。 具体代码如下。
 
 
function trim(str) {	
if (str && typeof str == =” s tring ” ){	
return str . replace ( /^\ s+ l \s +$/ g , ”” ) ;	
//去除前后空白符	
}	
}


47、列出不同浏览器中关于JavaScript 兼容性的两个常见问题。 ( 1 )事件绑定兼容性问题。 IE8 以下的浏览器不支持用addEventListener 来绑定事件,使用attach event 可以解决这个问题。 ( 2 ) stopPropagation 兼容性问题。 IE8 以下的浏览器不支持用巳.stopPropagation () 来阻止事件传播,使用e .return Value = false 可以解决这个问题。


48、闭包的优缺点是什么? 优点:不产生全局变量,实现属性私有化。 缺点:是闭包中的数据会常驻内存,在不用的时候需要删除,否则会导致内存溢出(内 存泄漏) 。


49、用JavaScript 实现一个数组合并的方法(要求去重)。 代码如下
 
 
var arrl = ['a ' ];	
var arr2 = [ ' b ' ,'c' ] ;	
var arr3 = [ 'C ', [ 'd ' ] ,' e ' , undefined , null];	
var concat = (function () {	
// 去重合并arrl 和arr2	
var concat = function (arrl , arr2) {	
for (var i = 0, len = arr2 . length J 工< len ; i++) {	
~arrl . indexOf (arr2 [ i]) || arrl . push (arr2 [i])	
}	
// 返回数组去重合并方法	
return function () {	
var result = [] ;	
for (var i = 0 , len = arguments length ; i < len; i++) {	
_concat(result , arguments[i])	
}	
return result	
}	
})()	
执行co ncat (arrl, arr2 , arr3 )后, 会返回[' a ', null, undefined,' e ',[’d '],'c ' , 'b'] 。


50、说明正则表达式给所有string 对象添加去除首尾空白符的方法( trim 方法)。 代码如下
 
 
prototype . trim = function () {	
return this . replace (/^\s+ | \s+$/g ,"" ) ;


51、说明用JavaScrpit 实现一个提取电话号码的方法。 代码如下
 
 
var str = ” 12345678901 010 - 12345678 爱创课堂0418 - 1234567 13812345678 ”;	
var reg=/(l\d{lO)) I (0\d{2 , 3)\ - \d{7 , 8J)/g ;	
alert(str . match(reg) ;	
测试“ 1234567890 1 010- 12345678 爱创课堂0418-1234567 13812345678 ”,得到的结果应该是:[ 12345678901 , 010-12345678, 0418-1234567, 13812345678 ] 。


52、JavaScript 中常用的逻辑运算符有哪些? “and”(&&)运算符、“or”( ||) 运算符和“not”(!)运算符,它们可以在JavaScript 中千史用。


53、什么是事件代理(事件委托)? 事件代理( Event Delegation ),又称为事件委托,是JavaScript 中绑定事件的常用技 巧。顾名忠义,“事件代理”就是把原本需要绑定的事件委托给父元素,让父元素负责事件监听。事件代理的原理是DOM 元素的事件冒泡。使用事件代理的好处是可以提高性能。


54、什么是JavaScript? JavaScript 是客户端和服务器端的脚本语言,可以插入HTML 页函中, 并且是目前较热门的Web 开发语言。同时, JavaScript 也是面向对象的编程语言。


55、列举Java 和JavaScript的不同之处。 Java 是一门十分完整、成熟的编程语言。相比之下, JavaScript 是一个可以被引入HTML 页面的编程语言。这两种语言并不完全相互依赖,而是针对不同的意图而设计的。Java 是一种面向对象编程( OOP )或结构化编程语言,类似的语言有C ++;而JavaScript是客户端脚本语言,它称为非结构化编程。


56、JavaScript 和ASP 脚本相比,哪个更快? JavaScript 史快。JavaScript 是一种客户端语言,因此它不需要Web 服务器的协助就可以执行;ASP 是服务器端语言,因此它总是比JavaScript 慢。值得注意的是,JavaScript 现在也可用于服务器端语言( Node .js ) 。


57、什么是负无穷大? Infinity 代表了超出JavaScript 处理范围的数值。也就是说, JavaScript 无法处理的数值都是In白nity , 实践证明, JavaScript 所能处理的最大值( N umber.MAX_VALUE )是1.797 693 134 862 315 7e+308 ,超过该数则为正无穷大;而最小值( Number.MIN VALUE)是如-324 ,小于该数则为0 。所以负无穷大代表的是小于-Number.MAX VALUE 的数字,JavaScript 中对应静态变量Number.NEGATIVE一卧JFINITY ,


58、如何将JavaSc 「ipt 代码分解成几行? 在字符串语句中可以通过在第一行末尾使用反斜杠“ \ ”来完成’例如, document. writ巳("This is \a program") 。 如果不是在字符串语句中更改为幸斤行,那么JavaScript 会忽略行中的断点。下面的代码是完美的,但并不建议这样做,因为阻碍了调试。
 
 
var x=l, y=2 ,	
z=	
x+y ;


59、什么是未声明和未定义的变量? 未声明的变量是程序中不存在且未声明的变量。如果程序尝试读取未声明变量的值,则会在运行时遇到错误。未定义的变量是在程序中声明但尚未给出任何值的变量。如果程序尝试读取未定义变量的值, 则返回未定义的值。


60、如何编写可动态添加新元素的代码? 下面给出一段示例代码。
 
 
< ! DOCTYPE html>	
<html lang="en" >	
<head>	
<meta charset=" UTF-8" >	
<title >爱创课堂一一专业前端技术培训II 学校</ title>	
</head>	
<body>	
<p id= " ickt ">ickt</p>	
<script type=” text/javascript ">	
function addNode () {	
var p = document . createElement ( 'p ’ );	
var textNode = document . createTextNode ( ’ 爱创课堂’ );	
p . appendChild(textNode) ;	
document . getElementByid ( ’ ickt ') . appendCh 工ld(p)	
addNode ()	
</script>	
</body>	
</html>


61、什么是全局变量?这些变量如何声明?使用全局变量有哪些问题? 全局变量是整个代码中都可用的变量, 也就是说,这些变量没有任何作用域。var 关键字用于声明局部变量, 如果~-略var 关键字,则声明一个全局变量。使用全局变量面临的问题是局部交量和全局变量名称的冲突。此外,很难调试和测试依赖于全局变量的代码。


62、解释JavaScript 中定时器的工作,并说明使用定时器的缺点 定时器用于在设定的时间执行一段代码, 或者在给定的时间间隔内重复该代码。这通过使用函数setTi meout 、setlnterval 和clearinterval 来完成。
  • setTimeout (如nction , delay )函数用于启动在所属延迟之后调用特定功能的定时器。
  • setlnterval ( function , delay )函数用于在捉到的延迟中重复执行给定的功能,只有在取消时才停止。
  • cl earl nte r飞1 al ( id )函数指示定时器停止。
定时器在一个线程内运行,因此事件可能需要排队等待执行。


63、ViewState 和SessionState 有什么区别? ViewState 特定于会话中的页面;Session State 特定于可在Web 应用程序中的所 有页面上访问的用户特定数据。


64、什么是===运算符? ===称为严格等式运算符,当两个操作数具有相同的值和类型时,该运算符返回true 。


65、说明如何使用JavaScript 提交表单。 要使用JavaScript 提交表羊,可以使用以下代码。 document . form [0] submit ();


66、元素的样式/类如何改变? 可以通过以下方式改变元素的样式。
 
 
document . getElementByid (”myText ” ) . style . fontSize = "20? ;
可以通过以下方式改变元素的类。
 
 
document . getElementByid (”myText ”) . c l assName = ”anyclass ”;


67、JavaScript 中的循环结构都有哪些? for 、while 、do ... wh il e 、for_in, for of ( E创新增的)。


68、如何在JavaScript 中将base 字符串转换为integer? parseint()函数解析一个字符串参数,并返回一个指定基数的整数。parselnt()将要转换的字符串作为其第一个参数,第二个参数是给定字符串的转换进制基数。 为了将4F (基数16 )转换为整数,可以使用代码parselnt ("4F ",16)。


69、说明“= = ”和“ === ”的区别。 "=="仅检查值相等性,而"==="用于更严格的等式判定。如果两个变量的值或类型不同,则后者返回false 。


70、3 + 2 +“ 7”的结果是什么? 由于3 和2 是整数,它们将直接相加,同时由于“ 7”是一个字符串,将会被直接连接, 因此结果将是57 。


71、如何检测客户端机器上的操作系统? 为了检测客户端机器上的操作系统,应使用navigator.叩pVersion 字符串(属性)。


72、JavaScript 中的null 表示什么? null 用于表示无值或无对象。它意味着没有对象或空字符串,没有有效的布尔值,没有数值和数组对象。


73、delete 操作符的功能是什么? delete 操作符用于删除对象中的某个属性,但不能删除变量、函数等。


74、JavaScript 中有哪些类型的弹出框? alert 、confirm 和prompt 。


75、void ( 0 )的作用是什么? void 操作符使表达式的运算结果返回undefined , void ( 0 )用于防止页面刷新,并在调用时传递参数“。” 。 void ( 0 )用于调用另一种方法而不刷新页面。


76、如何强制页面加载JavaScript 中的其他页面? 必须插入以下代码才能达到预期效果。
 
 
<script language=" JavaScript" type=" text/javascript ">	
< 1-- location . href =" http : //newhost/newpa th/newfile . htm l " ; //-- >	
</script>


77、转义字符是用来做什么的? 当使用特殊字符(如羊引号、双引号、撒号和&符号)时,将使用特义字符(反斜 杠) 。在字符前放置反斜杠,使其显示。 下面给出两个示例。
 
 
document . write " I m a " good " boy "	
document . write " I m a \ " good \ "boy "


78、什么是JavaScript cookie? cookie 是存储在访问者计算机中的变量。每当一台计算机通过浏览器请求某个页面时,就会发送这个cookie , 可以使用JavaScript 来创建和获取cook ie 的值。


79、解释JavaScript中的pop()方法。 pop ()方法与shift ()方法类似, 但不同之处在于shift ()方法在数组的开头工作。此外, pop ()方法将最后一个元素从给定的数组中取出并返回,然后改变被调用的数组。 例如:
 
 
var colors = [ "red ","blue ","green" ] ;	
colors . pop ();	
// colors : [ " red ","blue" ]


80、在JavaScript中使用innerHTML 的缺点是什么? 缺点如下: ( 1 )内容随处可见。 ( 2 )不能像“追加圭1J innerHTML ” 一样使用。 ( 3 )即使使用+=,如“ innerHTML = inner HTML + ‘ html ’”,旧的内容仍然会被HTML替换。 ( 4 ) 整个innerHTML 内容被重新解析并构建成元素, 因此它的速度要使得多。 ( 5 ) inn e rHTML 不提供验证,因此可能会在文档中插入具有破坏性的HTML 并将其中断。


81、break 和continue 语句的作用是什么? break 语句从当前循环中退出;continue 语句继续下一个循环语句。


82、在JavaScript 中, datatypes 的两个基本组是什么? 两个基本组是原始类型和引用类型。 原始类型包括数字和布尔类型。引用类型包括更复杂的类型,如字符串和日期。


83、如何创建通用对象? 通用对象可以通过以下代码创建。 var o =new Object () 。


84、typeof 是用来做什么的? typeof 是一个运算符,用于返回变量类型的字符串描述。


85、哪些关键字用于处理异常? try... catch ... finally 用于处理JavaScript 中的异常。
 
 
try{	
执行代码	
) catch (exp ) {	
抛出错误提示信息	
) finally {	
无论try /catch 的结果如何都会执行	
}


86、JavaScript 中不同类型的错误有几种? 有3 种类型的错误。
  • Load time errors ,该错误发生于加载网页时,例如出现语法错误等状况,称为加载时间错误,并且会动态生成错误。
  • Run time errors , 由于在HTML 语言中滥用命令而导致的错误。
  • Logical Errors ,这是由于在具有不同操作的函数上执行了错误逻辑而发生的错误。


87、在JavaScript 中, push 方法的作用是什么? pu sh 方法用于将一个或多个元素添加或附加到数组的末尾。使用这种方法,可以通过传递多个参数来附加多个元素。


88、在JavaScript中, unshift 方法的作用是什么? unshift 方法就像在数组开头工作的push 方法。该方法用于将一个或多个元素添加到数组的开头。


89、如何为对象添加属性? 为对象添加属性有两种常用语法。
  • 中括号语法,比如obj [" class "] = 12 。
  • 点语法, 比如obj.class= 12 。


90、获得CheckBox 状态的方式是什么? alert ( docurnent.getElementByld (’checkbox l' ) .checked) ; 如果CheckBox 选中, 此警告将返回TRUE 。


91、解释一下window. onload 和onDocumentReady 。 在载入页面的所有信息之前,不运行window.on load 。这导致在执行任何代码之前会出现延迟。 window.onDocumentReady 在加载DOM 之后加载代码。这九许代码史早地执行(早于window.onlonad ) 。


92、如何理解JavaScript 中的闭包? 闭包就是能够读取其他函数内部变量的函数。 闭包的用途有两个, 一是可以读取函数内部的变量,二是让这些变量的值始终保持在内存中。


93、如何把一个值附加到数组中? 可以在数纽末尾处添加成员arr [arr.length] = value;或者调用push 方法arr.push(value) 。


94、解释一下for-in 循环。 for-in 循环用于循环对象的属性。 for-in 循环的语法如下。 f or (var iable name 工n obje c t) { ) 在每次循环中,来自对象的一个属性与变量名相关联, 循环继续,直到对象的所有属性都被迫历。


95、描述一下JavaScript 中的匿名函数。 被声明为没有任何命名标识符的函数称为匿名函数。一般来说,匿名函数在声 明后无法访问。 匿名函数声明示例如下。
 
 
var anon=function( ) {	
a lert ( ’ I am a nonymous ’);	
}	
a non();


96、IE 和DOM 事件流的区别是什么? 区别如下。 ( 1 )执行顺序不一样。 ( 2 )参数不一样。 ( 3 ) 事件名称是否加o n 不一样。 ( 4 ) t hi s 指向问题不一样。


97、阐述一下事件冒泡。 JavaScript 九许DOM 元素嵌套在一起。在这种情况下,如果单击子级的处理程序,父级的处理程序也将执行同样的工作。


98、JavaScript 里函数参数arguments是数组吗? 在函数代码中,使用特殊对象arguments , 开发者无须明确指出参数名,使用下标就可以访问相应的参数。 arguments 虽然有数组的性质,但其并非真正的数组。它只是一个类数组对象,并没有数组的方法,不能像真正的数纽那样调用.join ()、.con cat () 、. pop ()等方法。


99、什么是构造函数?它与普通函数有什么区别? 构造函数是一种特殊的方法,主要用来创建对象时初始化对象,经常与new 运算符一起使用,创建对象的语句中构造函数的名称必须与类名完全相同。与普通函数相比,区别如下。 ( I )构造函数只能由new 关键字调用。 ( 2 )构造函数可以创建实例化对象。 ( 3 )构造函数是类的标志。


100、请解释一下JavaScript 和css 阻塞。 JavaScript 的阻塞特性是所有浏览器在下载JavaScript 代码的时候, 会阻止其他一切活动,比如其他资源的下载, 内容的呈现等,直到JavaScript 代码下载、解析、执行完毕后才开始继续并行下载其他资源并渲染内容。 为了提高用户体验, 新一代浏览器都支持并行下载JavaScript 代码,但是Java Script 代码的下载仍然会阻塞其他资源的下载 (例如图片、css 文件等) 。 为了防止JavaScript 修改DOM 树,浏览器需要重新构建DOM 积仁所以就会阻塞其他资源的下载和渲染。 嵌入的JavaScr ipt 代码会阻塞所有内容的呈现,而外部JavaScript 代码只会阻塞其后内容的显示,两种方式都会阻塞其后资源的下载。也就是说,外部脚本不会阻塞外部脚本的力口载,但会阻塞外部脚本的执行。 css 本来是可以并行加载的,但是当css 后面跟着嵌入的JavaScript 代码的时候,该css 就会阻塞后面资源的下载。 而当把嵌入的JavaScript 代码放到 css 前面时,就不会出现阻塞的情况了(在IE6 下css 都会阻塞加载)。 根本原因是因为浏览器会维持HTML 中css 和JavaScript 代码的顺序,样式表必须在嵌入的JavaScript 代码执行前先加载、解析完。 而嵌入的JavaScript 代码会阻塞后面的资源力口载,所以就会出现css 阻塞资源、加载的情况。 本文内容来源图书《前端程序员面试秘籍》,如果你想更快的去学习更多内容,可以购买此图书。里面主要是前端面试题集,附有答案可以供学习与参考。


640?wx_fmt=jpeg 640?wx_fmt=jpeg


  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值