干货,2016最新的WEB前端开发工程师面试题(JavaScript部分)3网页前端/web开发工程师

/ 闽江学院经济学院网页前端/web开发工程师 / 2017-04-08

WEB前端开发,WEB前端开发工程师,汇鱼人才

1、JSON 的了解?

JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式。

它是基于JavaScript的一个子集。数据格式简单, 易于读写, 占用带宽小

如:{"age":"12", "name":"back"}

 

JSON字符串转换为JSON对象:

var obj =eval('('+ str +')');

var obj = str.parseJSON();

var obj = JSON.parse(str);

 

JSON对象转换为JSON字符串:

var last=obj.toJSONString();

var last=JSON.stringify(obj);

 

2js延迟加载的方式有哪些?

deferasync、动态创建DOM方式(用得最多)、按需异步载入js

 

3Ajax 是什么? 如何创建一个Ajax

ajax的全称:Asynchronous Javascript And XML

异步传输+js+xml

所谓异步,在这里简单地解释就是:向服务器发送请求的时候,我们不必等待结果,而是可以同时做其他的事情,等到有了结果它自己会根据设定进行后续操作,与此同时,页面是不会发生整页刷新的,提高了用户体验。

 

(1)创建XMLHttpRequest对象,也就是创建一个异步调用对象

(2)创建一个新的HTTP请求,并指定该HTTP请求的方法、URL及验证信息

(3)设置响应HTTP请求状态变化的函数

(4)发送HTTP请求

(5)获取异步调用返回的数据

(6)使用JavaScriptDOM实现局部刷新

 

4同步和异步的区别?

同步的概念应该是来自于OS中关于同步的概念:不同进程为协同完成某项工作而在先后次序上调整(通过阻塞,唤醒等方式).同步强调的是顺序性.谁先谁后.异步则不存在这种顺序性.

同步:浏览器访问服务器请求,用户看得到页面刷新,重新发请求,等请求完,页面刷新,新内容出现,用户看到新内容,进行下一步操作。

异步:浏览器访问服务器请求,用户正常操作,浏览器后端进行请求。等请求完,页面不刷新,新内容也会出现,用户看到新内容。

 

5如何解决跨域问题?

jsonpiframewindow.namewindow.postMessage、服务器上设置代理页面

 

6AMDModules/Asynchronous-Definition)、CMDCommon Module Definition)区别?

Asynchronous Module Definition,异步模块定义,所有的模块将被异步加载,模块加载不影响后面语句运行。所有依赖某些模块的语句均放置在回调函数中。

 

 区别:

 

    1. 对于依赖的模块,AMD 是提前执行,CMD 是延迟执行。不过 RequireJS 2.0 开始,也改成可以延迟执行(根据写法不同,处理方式不同)。CMD 推崇 as lazy as possible.

    2. CMD 推崇依赖就近,AMD 推崇依赖前置。看代码:

 

// CMD

define(function(require, exports, module) {

    var a = require('./a')

    a.doSomething()

    // 此处略去 100

    var b = require('./b') // 依赖可以就近书写

    b.doSomething()

    // ...

})

 

// AMD 默认推荐

define(['./a', './b'], function(a, b) { // 依赖必须一开始就写好

    a.doSomething()

    // 此处略去 100

    b.doSomething()

    // ...

})

 

documen.writeinnerHTML的区别

document.write只能重绘整个页面

 

innerHTML可以重绘页面的一部分

 

7DOM操作——怎样添加、移除、移动、复制、创建和查找节点?

1)创建新节点

  createDocumentFragment()    //创建一个DOM片段

  createElement()   //创建一个具体的元素

  createTextNode()   //创建一个文本节点

2)添加、移除、替换、插入

  appendChild()

  removeChild()

  replaceChild()

  insertBefore() //在已有的子节点前插入一个新的子节点

3)查找

  getElementsByTagName()    //通过标签名称

  getElementsByName()    //通过元素的Name属性的值(IE容错能力较强,会得到一个数组,其中包括id等于name值的)

  getElementById()    //通过元素Id,唯一性

 

call() .apply() 的区别?

  例子中用 add 来替换 subadd.call(sub,3,1) == add(3,1) ,所以运行结果为:alert(4);

 

  注意:js 中的函数其实是对象,函数名是对 Function 对象的引用。

 

    function add(a,b)

    {

        alert(a+b);

    }

 

    function sub(a,b)

    {

        alert(a-b);

    }

 

    add.call(sub,3,1);

 

8JqueryjQuery UI 有啥区别?

*jQuery是一个js库,主要提供的功能是选择器,属性修改和事件绑定等等。

 

*jQuery UI则是在jQuery的基础上,利用jQuery的扩展性,设计的插件。

 提供了一些常用的界面元素,诸如对话框、拖动行为、改变大小行为等等

 

9jquery 中如何将数组转化为json字符串,然后再转化回来?

jQuery中没有提供这个功能,所以你需要先编写两个jQuery的扩展:

    $.fn.stringifyArray = function(array) {

        return JSON.stringify(array)

    }

 

    $.fn.parseArray = function(array) {

        return JSON.parse(array)

    }

 

    然后调用:

    $("").stringifyArray(array)

 

10如何判断当前脚本运行在浏览器还是node环境中?(阿里)

通过判断Global对象是否为window,如果不为window,当前脚本没有运行在浏览器中

 

11些操作会造成内存泄漏?

内存泄漏指任何对象在您不再拥有或需要它之后仍然存在。

垃圾回收器定期扫描对象,并计算引用了每个对象的其他对象的数量。如果一个对象的引用数量为 0(没有其他对象引用过该对象),或对该对象的惟一引用是循环的,那么该对象的内存即可回收。

 

setTimeout 的第一个参数使用字符串而非函数的话,会引发内存泄漏。

闭包、控制台日志、循环(在两个对象彼此引用且彼此保留时,就会产生一个循环)

 

12检测浏览器版本版本有哪些方式?

功能检测、userAgent特征检测

 

比如:navigator.userAgent

//"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_2) AppleWebKit/537.36

  (KHTML, like Gecko) Chrome/41.0.2272.101 Safari/537.36"

 

13What is a Polyfill?

polyfill 在旧版浏览器上复制标准 API JavaScript 补充”,可以动态地加载 JavaScript 代码或库,在不支持这些标准 API 的浏览器中模拟它们。

例如,geolocation(地理位置)polyfill 可以在 navigator 对象上添加全局的 geolocation 对象,还能添加 getCurrentPosition 函数以及坐标回调对象,

所有这些都是 W3C 地理位置 API 定义的对象和函数。因为 polyfill 模拟标准 API,所以能够以一种面向所有浏览器未来的方式针对这些 API 进行开发,

一旦对这些 API 的支持变成绝对大多数,则可以方便地去掉 polyfill,无需做任何额外工作。

 

14做项目中,有没有用过或自己实现一些 polyfill 方案(兼容性处理方案)?

比如: html5shivGeolocationPlaceholder

 

想了解更多关于WEB前端开发工程师的内容敬请关注汇鱼人才



公众号,微信

汇鱼网海峡创乐汇
汇鱼网海峡创乐汇