前端面试问题总结之---JavaScript
js 有哪些基本类型?
- Undefined、Null、Boolean、Number、String;
- Object 是复杂数据类型,其本质是由一组无序的名值对组成的。
js 有哪些内置对象?
- Obiect 是 JavaScript 中所有对象的父对象;
- 数据封装类对象:Object、Array、Boolean、Number、String;
- 其它对象:Function、Argument、Math、RegExp、Error 等。
JavaScript原型,原型链 ? 有什么特点?
每个对象都会在其内部初始化一个属性,就是 prototype(原型),当我们访问一个对象的属性时,如果这个对象内部不存在这个属性,那么他就会去 prototype 里找这个属性,这个 prototype 又会有自己的 prototype ,于是这样一直找下去,也就是我们所说的原型链的概念。
特点:
JavaScript对象是通过引用来传递的,我们创建的每个新对象实体中并没有属于自己的原型副本,当我们修改原型时,与之相关的对象也会继承这一改变。
谈谈this对象的理解?
- this 总是指向函数的直接调用者(而非间接调用者);
- 如果有 new 关键字,this 指向 new 出来的那个对象;
- 在事件中,this 指向触发这个事件的对象,特殊的是,IE中的 attachEvent 中的 this 总是指向全局对象 Window。
什么是闭包(closure),为什么要用它?
- 闭包是指有权访问另一个函数作用域中变量的函数;
- 创建闭包的最常见的方式就是在一个函数内创建另一个函数,通过另一个函数访问这个函数的局部变量;
- 利用闭包可以突破作用链域,将函数内部的变量和方法传递到外部。
闭包的特性:
-
函数内再嵌套函数;
-
内部函数可以引用外层的参数和变量;
-
参数和变量不会被垃圾回收机制回收。
对JSON 的了解?
- JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式;
- 它是基于 JavaScript 的一个子集,数据格式简单, 易于读写, 占用带宽小。
undefined 与 null 之间的区别?
- undefined 表示"缺少值",就是此处应该有一个值,但是还没有定义;
- null 表示"没有对象",即该处不应该有值;
- undefined 的类型 (typeof) 是 undefined,null 的类型 (typeof) 是 object;
- undefined 转换数值时为NaN,null 转换数值时为0;
- js 将未赋值的变量默认值设为 undefined;js 从来不会将变量设为 null,它是用来表明某个用 var 声明的变量时没有值的。
document.write 和 innerHTML 的区别?
- document.write 只能重绘整个页面;
- innerHTML 可以重绘页面的一部分。
了解 JS 的事件吗?说说 JS 的事件?
-
JavaScript 使我们有能力创建动态页面,事件是可以被 JavaScript 侦测到的行为;
-
网页中的每个元素都可以产生某些可以触发 JavaScript 函数的事件,比方说,我们可以在用户点击某按钮时产生一个 onClick 事件来触发某个函数,事件在 HTML 页面中定义;
-
当用户进入或离开页面时就会触发 onload 和 onUnload 事件;
-
表单里面使用的onFocus、onBlur、onChange。
JS 绑定事件的方法?
1. 嵌入 dom:
1 <button onclick="open()">按钮</button> 2 <script> 3 function open(){ 4 alert(1); 5 } 6 </script>
2. 直接绑定:
1 <button id="btn">按钮</button> 2 <script> 3 document.getElementById('btn').onclick = function(){ 4 alert(1); 5 } 6 </script>
3. 事件监听:
1 <button id="btn">按钮</button> 2 <script> 3 document.getElementById('btn').addEventListener('click',function(){ 4 alert(1); 5 }) 6 document.getElementById('btn').attachEvent('click',function(){ 7 alert(1); 8 }) 9 </script>
Ajax 是什么? 如何创建一个Ajax?
- ajax的全称:Asynchronous Javascript And XML,即异步传输+ js + xml ;
- 所谓异步,简单解释就是:向服务器发送请求的时候,我们不必等待结果,而是可以同时做其他的事情,等到有了结果它自己会根据设定进行后续操作;与此同时,页面是不会发生整页刷新的,提高了用户体验。
-
创建 XMLHttpRequest 对象,也就是创建一个异步调用对象;
-
创建一个新的 HTTP 请求,并指定该 HTTP 请求的方法、URL 及验证信息;
-
设置响应 HTTP 请求状态变化的函数;
-
发送 HTTP 请求;
-
获取异步调用返回的数据;
-
使用 JavaScript 和 DOM 实现局部刷新。
同步和异步的区别?
- 同步强调的是顺序性,谁先谁后;异步则不存在这种顺序性;
- 同步:浏览器访问服务器请求,用户看得到页面刷新,重新发请求,等请求完,页面刷新,新内容出现,用户看到新内容,进行下一步操作;
- 异步:浏览器访问服务器请求,用户正常操作,浏览器后端进行请求;等请求完,页面不刷新,新内容也会出现,用户看到新内容。
如何解决跨域问题?
jsonp、iframe、window.name、window.postMessage、服务器上设置代理页面等。
JavaScript 异步加载的方式有哪些?
- 利用 setTimout 实现异步;
- 动态创建 script 标签;
- 利用 script 标签提供的 async;
- 使用 Promise 对象。
有哪些性能优化的方法?
- 减少 HTTP 请求次数,减少 DNS 查找;
- 用 innerHTML 代替 DOM 操作,减少 DOM 操作次数,优化 JavaScript 性能;
- 用 gzip 压缩内容,删除重复的脚本和样式;
- 将样式表在顶部,js 代码放在底部。

浙公网安备 33010602011771号