/*http和https区别
-
HTTP 是不安全的,而 HTTPS 是安全的
-
HTTP 标准端口是80 ,而 HTTPS 的标准端口是443
-
在OSI 网络模型中,HTTP工作于应用层,而HTTPS 工作在传输层
-
HTTP 无法加密,而HTTPS 对传输的数据进行加密
-
HTTP无需证书,而HTTPS 需要CA机构颁发的SSL证书
DOM事件三个阶段
① 事件捕获阶段
② 处于目标阶段
③ 事件冒泡阶段
说下事件冒泡
在一个对象上触发某类事件,如果定义了处理此事件的程序,则调用程度处理,若没有定义或返回true,则会向父级传播,调用父级的处理,直到达到对象最顶层。
不是所有的事件都能冒泡。以下事件不冒泡:blur、focus、load、unload
事件代理
传统的事件处理中,你按照需要为每一个元素添加或者是删除事件处理器。然而,事件处理器将有可能导致内存泄露或者是性能下降,JavaScript事件代理则是一种简单的技巧,通过它你可以把事件处理器添加到一个父级元素上,这样就避免了把事件处理器添加到多个子级元素上。
ajax和JSONP
说到AJAX就会不可避免的面临两个问题,第一个是AJAX以何种格式来交换数据?第二个是跨域的需求如何解决?这两个问题目前都有不同的解决方案,比如数据可以用自定义字符串或者用XML来描述,跨域可以通过服务器端代理来解决。
首选的方案还是用JSON来传数据,靠JSONP来跨域。
1、ajax和jsonp这两种技术在调用方式上"看起来"很像,目的也一样,都是请求一个url,然后把服务器返回的数据进行处理,因此jquery和ext等框架都把jsonp作为ajax的一种形式进行了封装;
2、但ajax和jsonp其实本质上是不同的东西。ajax的核心是通过XmlHttpRequest获取非本页内容,而jsonp的核心则是动态添加<script>标签来调用服务器提供的js脚本。
列举JS数组中的方法:
1 shift()t:删除数组的第一个元素,返回删除的值。这里是0
2 unshift(3,4):把参数加载数组的前面,返回数组的长度。现在list:中是3,4,0,1,2
3 pop():删除数组的最后一个元素,返回删除的值。这里是2.
4 push(3):将参数加载到数组的最后,返回数组的长度,现在List中时:0,1,2,3
5 concat(3,4):把两个数组拼接起来。
6 splice(start,deleteCount,val1,val2,...):从start位置开始删除deleteCount项,并从该位置起插入val1,val2,...
7 reverse:将数组反序
8 sort(orderfunction):按指定的参数对数组进行排序
9 slice(start,end):返回从原数组中指定开始下标到结束下标之间的项组成的新数组
10 join(separator):将数组的元素组起一个字符串,以separator为分隔符,省略的话则用默认用逗号为分隔符
JavaScript模块
JavaScript和java比较
相同之处:
❶ 语法和C语言都很相似
❷ 都是面向对象的
❸ JavaScript在设计时参照了Java的命名规则
不同之处:
❶ JavaScript是动态类型语言,而Java是静态类型语言
❷ JavaScript是弱类型的,Java属于强类型
❸JavaScript的面向对象是基于原型(prototype),Java是基于类的(Class)
❹javascript采用动态联编,即javascript的对象引用在运行时进行检查。Java采用静态联编,即Java的对象引用必须在编译时的进行,以使编译器能够实现强类型检查。
Promise模式:
异步模式在 Web 编程中变得越来越重要,如何处理异步请求后的操作是一件麻烦事。Promise 是一种异步编程模型,术语称作 Deferred 模式,它通过一组API来规范化异
步操作,让异步操作的流程控制更加容易。
Promise 编程模式也被称为 thenable,可以理解为 延迟后执行。每个 Promise 都拥有一个叫做 then 的唯一接口,当 Promise 失败或成功时,它就会进行回调。
它代表了一种可能会长时间运行而且不一定必须完成的操作结果。这种模式不会阻塞和等待长时间的操作完成,而是返回一个代表了承诺的(promised)结果的对象。
当前的许多 JavaScript 库(如 jQuery 和 Dojo、AngularJS)均添加了这种称为 Promise 的抽象。通过这些库,开发人员能够在实际编程中使用 Promise 模式。
其实就是通过回调的方式提供容错支持。在某个操作成功或失败或任何情况下都执行对应的回调,尽量把某段逻辑可能出现的情况都 handle 住。
Promise实例具有then方法,也就是说,then方法是定义在原型对象Promise.prototype上的。它的作用是为Promise实例添加状态改变时的回调函数。前面说过,then方法
的第一个参数是Resolved状态的回调函数,第二个参数(可选)是Rejected状态的回调函数。
then方法返回的是一个新的Promise实例(注意,不是原来那个Promise实例)。因此可以采用链式写法,即then方法后面再调用另一个then方法。
getJSON("/posts.json").then(function(json) {
return json.post;
}).then(function(post) {
// ...
});
上面的代码使用then方法,依次指定了两个回调函数。第一个回调函数完成以后,会将返回结果作为参数,传入第二个回调函数。
采用链式的then,可以指定一组按照次序调用的回调函数。这时,前一个回调函数,有可能返回的还是一个Promise对象(即有异步操作),这时后一个回调函数,就会等待该Promise对象的状态发生变化,才会被调用。
getJSON("/post/1.json").then(function(post) {
return getJSON(post.commentURL);
}).then(function funcA(comments) {
console.log("Resolved: ", comments);
}, function funcB(err){
console.log("Rejected: ", err);
});
上面代码中,第一个then方法指定的回调函数,返回的是另一个Promise对象。这时,第二个then方法指定的回调函数,就会等待这个新的Promise对象状态发生变化。如果变为Resolved,就调用funcA,如果状态变为Rejected,就调用funcB。
下面是一个用Promise对象实现的Ajax操作的例子。
var getJSON = function(url) {
var promise = new Promise(function(resolve, reject){
var client = new XMLHttpRequest();
client.open("GET", url);
client.onreadystatechange = handler;
client.responseType = "json";
client.setRequestHeader("Accept", "application/json");
client.send();
function handler() {
if ( this.readyState !== 4 ) {
return;
}
if (this.status === 200) {
resolve(this.response);
} else {
reject(new Error(this.statusText));
}
};
});
return promise;
};
getJSON("/posts.json").then(function(json) {
console.log('Contents: ' + json);
}, function(error) {
console.error('出错了', error);
});
jQuery中Deferred对象的理解
deferred对象就是jQuery的回调函数解决方案;
$.ajax()操作完成后,如果使用的是低于1.5.0版本的jQuery,返回的是XHR对象,你没法进行链式操作;如果高于1.5.0版本,返回的是deferred对象,可以进行链式操作。
现在,新的写法是这样的:
$.ajax("test.html")
.done(function(){ alert("哈哈,成功了!"); })
.fail(function(){ alert("出错啦!"); });
deferred对象的一大好处,就是它允许你自由添加多个回调函数。
还是以上面的代码为例,如果ajax操作成功后,除了原来的回调函数,我还想再运行一个回调函数,怎么办?
很简单,直接把它加在后面就行了。
$.ajax("test.html")
.done(function(){ alert("哈哈,成功了!");} )
.fail(function(){ alert("出错啦!"); } )
.done(function(){ alert("第二个回调函数!");} );
deferred对象的另一大好处,就是它允许你为多个事件指定一个回调函数,这是传统写法做不到的。
请看下面的代码,它用到了一个新的方法$.when():
$.when($.ajax("test1.html"), $.ajax("test2.html"))
.done(function(){ alert("哈哈,成功了!"); })
.fail(function(){ alert("出错啦!"); });
这段代码的意思是,先执行两个操作$.ajax("test1.html")和$.ajax("test2.html"),如果都成功了,就运行done()指定的回调函数;如果有一个失败或都失败了,就执行fail()指定的回调函数。
deferred对象的最大优点,就是它把这一套回调函数接口,从ajax操作扩展到了所有操作。也就是说,任何一个操作----不管是ajax操作还是本地操作,也不管是异步操作还是同步操作----都可以使用deferred对象的各种方法,指定回调函数。
deferred.resolve()方法和deferred.reject()方法用于手动改变执行状态
deferred.promise()方法。它的作用是,在原来的deferred对象上返回另一个deferred对象,后者只开放与改变执行状态无关的方法(比如done()方法和fail()方法),屏蔽与改变执行状态有关的方法(比如resolve()方法和reject()方法),从而使得执行状态不能被改变。
总结:
(1) $.Deferred() 生成一个deferred对象。
(2) deferred.done() 指定操作成功时的回调函数
(3) deferred.fail() 指定操作失败时的回调函数
(4) deferred.promise() 没有参数时,返回一个新的deferred对象,该对象的运行状态无法被改变;接受参数时,作用为在参数对象上部署deferred接口。
(5) deferred.resolve() 手动改变deferred对象的运行状态为"已完成",从而立即触发done()方法。
(6)deferred.reject() 这个方法与deferred.resolve()正好相反,调用后将deferred对象的运行状态变为"已失败",从而立即触发fail()方法。
(7) $.when() 为多个操作指定回调函数。
除了这些方法以外,deferred对象还有二个重要方法,上面的教程中没有涉及到。
(8)deferred.then()
有时为了省事,可以把done()和fail()合在一起写,这就是then()方法。
$.when($.ajax( "/main.php" ))
.then(successFunc, failureFunc );
如果then()有两个参数,那么第一个参数是done()方法的回调函数,第二个参数是fail()方法的回调方法。如果then()只有一个参数,那么等同于done()。
(9)deferred.always()
这个方法也是用来指定回调函数的,它的作用是,不管调用的是deferred.resolve()还是deferred.reject(),最后总是执行。
$.ajax( "test.html" )
.always( function() { alert("已执行!");} );
CSS水平居中
1、div {margin-left: auto; margin-right: auto; }
2、div { margin:0px auto; }
3、父层设置浮动和相对定位以及 left:50%,子元素设置相对定位和 left:-50% 来实现水平居中、
CSS垂直居中
http://www.cnblogs.com/yjzhu/archive/2012/11/19/2773209.html
闭包的好处和坏处,举例说明
<table>相关的标签
<tr>
<td>
<th>
<caption>-----表格标题
<col>----为表格中一个或多个列定义属性值
<colgroup>
<thead>
<tfoot>
<tbody>
jQuery中所有API
call和apply
这两者都是调用一个对象的一个方法,用另一个对象替换当前对象。
相同点:两个方法产生的作用是完全一样的。
不同点:方法传递的参数不同。
透明色设置
CSS3:opacity:x x的取值从0到1
IE中专属filter:alpha(opacity=x) x取值从0到100
在JS中设置:
var alpha = 30;
div.style.filter='alpha(opacity:'+alpha+')'
div.style.opacity = alpha/100;
属性存在对象或原型中
使用in操作符和hasOwnProperty()方法可以判断一个属性在实例中,还是在原型中。
若in返回true,但hasOwnProperty()返回false,则说明在原型中。
若in返回true,hasOwnProperty()也返回true,则说明在实例中。
*/