JSON是什么?
JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式。它是基于JavaScript的一个子集。数据格式简单, 易于读写, 占用带宽小。
格式:采用键值对,例如:{'age':'12', 'name':'back'}
js有哪些数据类型?
- 字符串、数字、布尔、数组、对象、Null、Undefined
深拷贝、浅拷贝是什么?
浅拷贝:仅仅复制对象的引用,而不是对象本身。
深拷贝:复制对象所引用的全部对象。
谈谈对this的理解
参考 这儿
什么是事件委托?jQuery中怎么实现事件委托?
什么是事件委托:通俗的讲,事件就是onclick,onmouseover,onmouseout,等就是事件,委托呢,就是让别人来做,这个事件本来是加在某些元素上的,然而你却加到别人身上来做,完成这个事件。
也就是:利用冒泡的原理,把事件加到父级上,触发执行效果。
-
好处:
- (1)提高性能(比如要给ul元素下的所有li元素绑定某个事件,可以使用for来循环绑定,但最好的方法是给ul绑定事件)
- (2)给使用js添加的元素绑定事件。
jQuery中使用on方法来处理事件委托,用法是$(elems).on(events, selector, data, fn);
事件冒泡和事件捕获是什么?怎么阻止事件冒泡?
事件冒泡是一个从子节点向祖先节点冒泡的过程 ( 子级元素的某个事件被触发,它的上级元素的该事件也被递归执行 ) ;
事件捕获刚好相反,是从祖先节点到子节点的过程。
具体参考 这儿
谈谈对闭包、原型、原型链的理解
参考 这儿
new一个对象,发生了什么?
(1)创建一个新对象var obj = {};
(2)把这个对象obj作为this去调用构造函数
(3)把这个对象的ptoto属性设置为构造函数的prototype
(4)返回obj(如果构造函数有显式返回对象类型的,则是构造函数返回的这个对象)
HTTP状态码知道哪些?
100 Continue 继续,一般在发送post请求时,已发送了http header之后服务端将返回此信息,表示确认,之后发送具体参数信息
200 OK 正常返回信息
201 Created 请求成功并且服务器创建了新的资源
202 Accepted 服务器已接受请求,但尚未处理
301 Moved Permanently 请求的网页已永久移动到新位置。
302 Found 临时性重定向。
303 See Other 临时性重定向,且总是使用 GET 请求新的 URI。
304 Not Modified 自从上次请求后,请求的网页未修改过。
400 Bad Request 服务器无法理解请求的格式,客户端不应当尝试再次使用相同的内容发起请求。
401 Unauthorized 请求未授权。
403 Forbidden 禁止访问。
404 Not Found 找不到如何与 URI 相匹配的资源。
500 Internal Server Error 最常见的服务器端错误。
503 Service Unavailable 服务器端暂时无法处理请求(可能是过载或维护)。
js是单线程的吗?
JS中其实是没有线程概念的,所谓的单线程也只是相对于多线程而言。JS的设计初衷就没有考虑这些,针对JS这种不具备并行任务处理的特性,我们称之为“单线程”。
-
Javascript是单线程的
- JS运行在浏览器中,是单线程的,每个window一个JS线程,既然是单线程的,在某个特定的时刻只有特定的代码能够被执行,并阻塞其它的代码。而浏览器是事件驱动的(Event driven),浏览器中很多行为是异步(Asynchronized)的,会创建事件并放入执行队列中。javascript引擎是单线程处理它的任务队列。所以当多个事件触发时,会依次放入队列,然后一个一个响应。(所以上面的代码是5ms后把输出second的任务加入队列,而当前有任务,所以只能等1000000个first输出完后才会输出second)
-
浏览器是多线程的
- 虽然JS运行在浏览器中,是单线程的,但浏览器不是单线程的。浏览器中很多异步行为都是由浏览器新开一个线程去完成。javascript引擎线程是浏览器多个线程中的一个,它本身是单线程的。浏览器还包括很多其他线程,如界面渲染线程,浏览器事件触发线程,Http请求线程等。
所以,所谓的javascript是单线程的,是指javascript运行在浏览器中是单线程的,叫做javascript引擎线程。
事件循环机制是什么?
- 参考 这儿