2一、如何判断一个对象是否属于某个类?html
使用instanceofhtml5
if(a instanceof Person){java
alert('yes');node
}jquery
2二、new操做符具体干了什么呢?web
(1)建立一个空对象,而且 this 变量引用该对象,同时还继承了该函数的原型。ajax
(2)属性和方法被加入到 this 引用的对象中。json
(3)新建立的对象由 this 所引用,而且最后隐式的返回 this 。后端
var obj = {};跨域
obj.__proto__ = Base.prototype;
Base.call(obj);
2三、Javascript中,有一个函数,执行时对象查找时,永远不会去查找原型,这个函数是?
hasOwnProperty
javaScript中hasOwnProperty函数方法是返回一个布尔值,指出一个对象是否具备指定名称的属性。此方法没法检查该对象的原型链中是否具备该属性;该属性必须是对象自己的一个成员。
使用方法:
object.hasOwnProperty(proName)
其中参数object是必选项。一个对象的实例。
proName是必选项。一个属性名称的字符串值。
若是 object 具备指定名称的属性,那么JavaScript中hasOwnProperty函数方法返回 true,反之则返回 false。
2四、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);
[].forEach.call($$("*"),function(a){a.style.outline="1pxsolid #"+(~~(Math.random()*(1<<24))).toString(16)}) 能解释一下这段代码的意思吗?
2五、js延迟加载的方式有哪些?
defer和async、动态建立DOM方式(用得最多)、按需异步载入js
2六、Ajax 是什么? 如何建立一个Ajax?
ajax的全称:AsynchronousJavascript And XML。
异步传输+js+xml。
所谓异步,在这里简单地解释就是:向服务器发送请求的时候,咱们没必要等待结果,而是能够同时作其余的事情,等到有告终果它本身会根据设定进行后续操做,与此同时,页面是不会发生整页刷新的,提升了用户体验。
(1)建立XMLHttpRequest对象,也就是建立一个异步调用对象
(2)建立一个新的HTTP请求,并指定该HTTP请求的方法、URL及验证信息
(3)设置响应HTTP请求状态变化的函数
(4)发送HTTP请求
(5)获取异步调用返回的数据
(6)使用JavaScript和DOM实现局部刷新
2七、Ajax 解决浏览器缓存问题?
(1)在ajax发送请求前加上anyAjaxObj.setRequestHeader("If-Modified-Since","0")。
(2)在ajax发送请求前加上anyAjaxObj.setRequestHeader("Cache-Control","no-cache")。
(3)在URL后面加上一个随机数: "fresh=" + Math.random();。
(4)在URL后面加上时间搓:"nowtime=" + new Date().getTime();。
(5)若是是使用jQuery,直接这样就能够了 $.ajaxSetup({cache:false})。这样页面的全部ajax都会执行这条语句就是不须要保存缓存记录。
2八、同步和异步的区别?
同步的概念应该是来自于OS中关于同步的概念:不一样进程为协同完成某项工做而在前后次序上调整(经过阻塞,唤醒等方式).同步强调的是顺序性.谁先谁后.异步则不存在这种顺序性.
同步:浏览器访问服务器请求,用户看获得页面刷新,从新发请求,等请求完,页面刷新,新内容出现,用户看到新内容,进行下一步操做。
异步:浏览器访问服务器请求,用户正常操做,浏览器后端进行请求。等请求完,页面不刷新,新内容也会出现,用户看到新内容。
2九、如何解决跨域问题?
jsonp、 iframe、window.name、window.postMessage、服务器上设置代理页面
30、模块化开发怎么作?
当即执行函数,不暴露私有成员
var module1 = (function(){
var_count = 0;
var m1 =function(){
//...
};
var m2 =function(){
//...
};
return {
m1 :m1,
m2 : m2
};
})();
3一、AMD(Modules/Asynchronous-Definition)、CMD(CommonModule 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()
// ...
})
3二、异步加载JS的方式有哪些?
(1)defer,只支持IE
(2)async:
(3)建立script,插入到DOM中,加载完毕后callBack
3三、documen.write和 innerHTML的区别
document.write只能重绘整个页面
innerHTML能够重绘页面的一部分
3四、DOM操做——怎样添加、移除、移动、复制、建立和查找节点?
(1)建立新节点
createDocumentFragment() //建立一个DOM片断
createElement() //建立一个具体的元素
createTextNode() //建立一个文本节点
(2)添加、移除、替换、插入
appendChild()
removeChild()
replaceChild()
insertBefore() //在已有的子节点前插入一个新的子节点
(3)查找
getElementsByTagName() //经过标签名称
getElementsByName() //经过元素的Name属性的值(IE容错能力较强,会获得一个数组,其中包括id等于name值的)
getElementById() //经过元素Id,惟一性
3五、.call() 和 .apply() 的区别?
例子中用 add 来替换 sub,add.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);
3六、jquery.extend 与jquery.fn.extend的区别?
* jquery.extend 为jquery类添加类方法,能够理解为添加静态方法
* jquery.fn.extend:
源码中jquery.fn= jquery.prototype,因此对jquery.fn的扩展,就是为jquery类添加成员函数
使用:
jquery.extend扩展,须要经过jquery类来调用,而jquery.fn.extend扩展,全部jquery实例均可以直接调用。
3七、Jquery与jQuery UI 有啥区别?
*jQuery是一个js库,主要提供的功能是选择器,属性修改和事件绑定等等。
*jQuery UI则是在jQuery的基础上,利用jQuery的扩展性,设计的插件。
提供了一些经常使用的界面元素,诸如对话框、拖动行为、改变大小行为等等
3八、jquery 中如何将数组转化为json字符串,而后再转化回来?
jQuery中没有提供这个功能,因此你须要先编写两个jQuery的扩展:
$.fn.stringifyArray = function(array) {
return JSON.stringify(array)
}
$.fn.parseArray = function(array) {
return JSON.parse(array)
}
而后调用:
$("").stringifyArray(array)
3九、针对 jQuery 的优化方法?
*基于Class的选择性的性能相对于Id选择器开销很大,由于需遍历全部DOM元素。
*频繁操做的DOM,先缓存起来再操做。用Jquery的链式调用更好。
好比:varstr=$("a").attr("href");
*for (var i = size; i < arr.length; i++){}
for 循环每一次循环都查找了数组(arr) 的.length 属性,在开始循环的时候设置一个变量来存储这个数字,可让循环跑得更快:
for(var i = size, length = arr.length; i < length; i++) {}
40、如何判断当前脚本运行在浏览器仍是node环境中?(阿里)
this === window ? 'browser' : 'node';
经过判断Global对象是否为window,若是不为window,当前脚本没有运行在浏览器中
4一、jQuery 的 slideUp动画 ,若是目标元素是被外部事件驱动, 当鼠标快速地连续触发外部元素事件, 动画会滞后的反复执行,该如何处理呢?
jquery stop(): 如:$("#div").stop().animate({width:"100px"},100);
4二、那些操做会形成内存泄漏?
内存泄漏指任何对象在您再也不拥有或须要它以后仍然存在。
垃圾回收器按期扫描对象,并计算引用了每一个对象的其余对象的数量。若是一个对象的引用数量为 0(没有其余对象引用过该对象),或对该对象的唯一引用是循环的,那么该对象的内存便可回收。
setTimeout 的第一个参数使用字符串而非函数的话,会引起内存泄漏。
闭包、控制台日志、循环(在两个对象彼此引用且彼此保留时,就会产生一个循环)
4三、JQuery一个对象能够同时绑定多个事件,这是如何实现的?
* 多个事件同一个函数:
$("div").on("click mouseover", function(){});
* 多个事件不一样函数
$("div").on({
click: function(){},
mouseover: function(){}
});
4四、知道什么是webkit么? 知道怎么用浏览器的各类工具来调试和debug代码么?
Chrome,Safari浏览器内核。
4五、用js实现千位分隔符?
function commafy(num) {
return num && num
.toString()
.replace(/(\d)(?=(\d{3})+\.)/g, function($0, $1) {
return $1 + ",";
});
}
console.log(commafy(1234567.90));//1,234,567.90
4六、检测浏览器版本版本有哪些方式?
功能检测、userAgent特征检测
好比:navigator.userAgent
//"Mozilla/5.0 (Macintosh; Intel MacOS X 10_10_2) AppleWebKit/537.36
(KHTML, like Gecko) Chrome/41.0.2272.101 Safari/537.36"
4七、What is a Polyfill?
polyfill 是“在旧版浏览器上复制标准 API 的 JavaScript 补充”,能够动态地加载JavaScript 代码或库,在不支持这些标准 API 的浏览器中模拟它们。
例如,geolocation(地理位置)polyfill 能够在 navigator 对象上添加全局的 geolocation 对象,还能添加 getCurrentPosition 函数以及“坐标”回调对象,
全部这些都是 W3C 地理位置 API 定义的对象和函数。由于 polyfill 模拟标准 API,因此可以以一种面向全部浏览器将来的方式针对这些 API 进行开发,
一旦对这些 API 的支持变成绝对大多数,则能够方便地去掉 polyfill,无需作任何额外工做。
4八、作的项目中,有没有用过或本身实现一些polyfill 方案(兼容性处理方案)?
好比: html5shiv、Geolocation、Placeholder
4九、使用JS实现获取文件扩展名?
function getFileExtension(filename) {
return filename.slice((filename.lastIndexOf(".") - 1>>> 0) + 2);
}
String.lastIndexOf() 方法返回指定值(本例中的'.')在调用该方法的字符串中最后出现的位置,若是没找到则返回 -1。
对于'filename'和'.hiddenfile',lastIndexOf的返回值分别为0和-1无符号右移操做符(»>) 将-1转换为4294967295,将-2转换为4294967294,这个方法能够保证边缘状况时文件名不变。
String.prototype.slice() 从上面计算的索引处提取文件的扩展名。若是索引比文件名的长度大,结果为""。