-
js中有几种数据类型, typeof 返回值有哪几个,如果判断一个对象是不是数组?
答:5种简单数据类型(基本数据类型)number、string、boolean、null、undefined,和1种复杂数据类型object。
typeof操作符的返回值有6种string、number、boolean、undefined、object、function(Null包含在object里返回)。
判断一个对象是否是数组:(1)Object.prototype.toString.call(obj)==='[object Array]'
(2)obj.constructor.name==="Array" ()
(3)obj instanceof Array;(instanceof只能用来判断对象和函数,不能用来判断字符串和数字等)
(4)Array.isArray(obj);(IE6,7,8不支持) -
toString()是一个怎样的方法?然而它是如何将一个值从一种类型转化为字符串类型的呢?
答:它是能将某一个值转化为字符串的方法。Object.prototype.toString.call(value)判断数据类型 -
caller和callee有什么区别?
答:caller返回一个函数的引用,这个函数调用了当前的函数,如果是顶层调用的话,返回null;
callee返回正在执行的函数本身的引用,它是arguments的一个属性。 -
简述js垃圾回收机制,请谈谈你在开发过程中遇到的内存泄露的情况,是如何解决的。
答:JS具有自动垃圾回收机制(GC),会周期性的找到那些不再使用的变量,然后释放其内存空间,例如函数执行完成后,会释放其中的局部变量的内存空间。垃圾回收器会跟踪内存中的变量,判断其他有没有用。最常见的是清除标记,即垃圾回收器在运行时会为内存中每个变量添加一个标记,然后,去除环境变量以及其所引用的变量的标记,再次之后再被添加上标记的变量视为将被删除的变量,最后进行内存清除,销毁那些带标记的值并回收其内存空间。此外,还有一种叫做引用计次的方式,因为循环引用的缺陷,很少被使用。
JS内存垃圾自动回收的机制下,内存泄露产生的原因往往和不需要的引用有关。下面是一些常见的内存泄露方式以及解决方案:
(1)意外的全局变量或者为this.属性赋值时意外将this指向了全局对象。
解决方案:使用”use strict”,在严格模式下编程。或者干脆雇佣一些高素质人才。
(2)在版本较老的浏览器DOM的循环引用或观察者对象变得不可达可能会导致内存泄露,比如:我为某个按钮绑定了事件,回调函数里引用了某个全局变量。之后我把那个按钮节点删除了。
解决方案:不使用老版本的浏览器(IE9一下);手动remove事件监听器;在不使用DOM节点后将其引用手动覆为null。
(3)被遗忘的定时器或回调函数,没有清理的DOM元素引用。
(4)闭包中无用的函数引用外层函数中的变量。 -
jquery的事件委托方法on、live、delegate之间有什么区别?
答:live和delegate在底层均调用on方法,它们的区别在于live方法将this.context(document)作为事件委托的对象,而delegate则可以供用户选择事件委托的对象。on方法是底层方法,bind方法也在底层调用on方法,on与其它时间委托方法的区别在于type和selector换了位置,如果没有指定selector的话,就将事件绑定到元素本身上。 -
请说说对MVC,MVP和MVVM的理解
答:MVC即model\view\controller,是最常见的软件架构模式。view是指用户界面,controller则处理业务逻辑,而model则用来存储数据。view传送指令到controller,controller完成业务逻辑后要求model改变状态,model将新数据发送给view,使用户得到反馈。各部分的通信都是单向的。
MVP将controller改为presenter,在这种模式中,各个部分之间的通信都是双向的。view与model不发送直接联系,都通过presenter传递。view非常薄,不部署任何业务逻辑,而presenter非常厚。
MVVM将presenter改为viewModel,和MVP模式非常相似,唯一的区别在于它是双向绑定,view改变,自动反应在viewModel上,反之亦然。 -
何为跨域?跨域请求资源有几哪种方式?
答:由于浏览器同源策略,凡是发送请求url的协议、域名、端口三者之间任意一个与当前页面地址不同即为跨域。
跨域请求资源的方式主要有:
(1)jsonp动态创建script标签
(2)Proxy代理
(3)CORS跨域 -
JS中错误类型有哪些?请简述一下
答:(1)syntaxError 语法错误 解析代码时发生错误
(2) referenceError 引用类型错误 当访问一个不存在的变量时发生的错误
(3)RangeError 是当一个值超出有效范围时发生的错误
(4)TypeError 是变量或参数不是预期类型时发生的错误。
(5)EvalError eval函数没有被正确执行时,会抛出EvalError错误。
(6)URIEror是URL相关函数的参数不正确时抛出的错误。 -
window.onload和DOMContentLoaded的区别?
答:当 onload 事件触发时,页面上所有的DOM,样式表,脚本,图片,flash都已经加载完成了。当 DOMContentLoaded 事件触发时,仅当DOM加载完成,不包括样式表,图片,flash。 -
实现数组的随机排序
答:
function randomSort(a){
var arr = a,
random = [],
len = arr.length;
for (var i = 0; i < len; i++) {
var index = Math.floor(Math.random()*(len - i));
random.push(a[index]);
arr.splice(index,1);
}
return random;
}var a = [1,2,3,4,5,6,7,8,9,10];
console.log(randomSort(a)); -
何时使用===何时使用==?
答:if(obj.a==null){ //这里相当于obj.a==bull||obj.a==undefined的简写形式 }
其余时候用=== -
用JS创建10个<a>标签,点击的时候弹出来对应的序号?
答: -
简述如何实现一个模块加载器,实现类似require.js的基本功能?
答:https://blog.csdn.net/xutongbao/article/details/78189667 -
JS中有哪些内置函数?
答:Object、Array、Boolean、Number、String、Function、Date、RegExp、Error -
JS变量按照存储方式区分为哪些数据类型
答:值类型Number\String\Boolean、引用类型Object\Function\Array(好几个变量共用一个内存) -
如何理解JSON
答:JSON是一种数据格式,JSON是一个提供了stringify和parse方法的内置对象,stringify将js对象转化为符合json标准的字符串,parse将符合json标准的字符串转化为js对象。
网友评论