JavaScript
1. JavaScript的基本数据类型及转化为boolean的值
数据类型 | 转换为true的值 | 转换为false的值 |
Boolean | true | false |
String | 非空字符串 | 空字符串 |
Number | 任何非零数字 | 0和null |
Object | 任何对象 | null |
undefined | undefined |
- object是所有对象的父对象
- 数据封装类对象:Object、Array、Boolean、Number、String
- 其它对象:function、Argument、Math、Date、Error、RegExp
3. JavaScript基本规范:
- 不要再同一行声明多个变量
- 不要使用!==和===来比较true、false或数值
- 不要使用全局函数
- 函数不应该有时候有返回值,有时候没有
- if、for循环必须有大括号
- for-in循环的变量,应该使用var关键字明确限定作用域,避免做用域污染
4. 原型、原型链
- 原型:每个js对象都有一个原型对象,这个对象在不同解释器下实现不同,普通对象无prototype属性,只有隐藏的__proto__属性,函数对象两者都有。prototype属性指向函数对象的原型对象,对象的__proto__属性是创建实例对象的时候对应的函数对象的原型对象。原型对象的值是在函数创建时创建了一个它的实例对象并赋值给它的prototype。
- 原型链:当我们访问一个对象的属性时,如果这个对象内部不存在这个属性,那么就会去prototype里找,这个prototype也会有自己的prototype,于是一直找下去。
5. 移动浏览器中,触摸一下屏幕,会依次触发:
- touchstart:触摸开始时触发
- touchmove:手指在屏幕上滑动时触发
- touchend:触摸结束时触发
6. Ajax:
- 定义:asynchronous javascript and xml。异步就是向服务器发送请求的时候,不必等待结果,可以同时做其他事情。等有结果自己会根据设定进行后续操作。与此同时,页面不会发生整页刷新,提高用户体验。
- 过程:
1)创建一个XMLHttpRequest对象,创建一个异步调用对象
2)创建一个新的Http请求的方法,url及验证信息
3)设置响应HTTP请求状态变化的函数
4)发送HTTP请求
5)获取异步调用返回的数据
6)使用js和DOM实现局部刷新
- 状态值:ajax.readyState
0:未初始化,还没调用send()
1:载入,已调用,正在发送请求
2:载入完成,send()方法执行完成,已经接受到全部响应
3:交互,正在解析响应的内容
4:完成响应内容解析完成,可以在客户端调用
- 状态码:ajax.status,无论Ajax访问是否成功,由http协议根据所提交的信息,服务器所返回的HTTP头部信息代码。
- ajax vs jsonp
1)相同点:请求同一个url
2)不同点:ajax的核心是通过XMLHttpRequest获取内容;jsonp则动态添加<script>调用服务器js脚本
- ajax请求:get和post的区别:
1)get:用于信息获取,使用url传递参数,对所发送的信息数量有限制,2000字符。使用Request, QueryString来获取变量值,地址栏传值。
2)post:一般用于修改服务器上的资源,对所发送信息无限制,提交表单传值。
必须使用post:
a)无法使用缓存文件(更新服务器上的文件或DB)
b)向服务器发送大量数据(post无数据量限制)
c)发送包含未知字符的用户输入时,post比get更可靠
7. JavaScript全局函数:
decodeURI(), decodeURIComponent(), encodeURI(), encodeURIComponent(), escape():可对字符串进行编码,这样就可以在素有的计算机上读取该字符串
, eval(), isFinite(), isNaN(), Number(), parseFloat(), parseInt(), String(), unescape()
8. call、apply
- call([thisObj[, arg1[,arg2], [, argN]]]):调用一个对象的方法,以另一个对象替换当前对象。call方法可以替代另一个对象调用方法,call方法可以将一个函数的对象上下文从初始的上下文改为由thisObj指定的新对象。如没有提供thisObj参数,那么Global对象被调用做thisObj。第一个参数与apply相同,但是传递给函数的参数必须列出来。
- apply([thisObj[, argArray]]):应用某一对象的一个方法,用另一个对象替换当前对象。如argArray不是一个有效数组或不是arguments对象,那么将导致一个TypeError,如没提供argArray和thisObj任何一个参数,那么Global对象将被用于thisObj,并且无法被传递任何参数。
9. History对象:
- back回到浏览器载入历史URL地址列表的当前url的前一个url
- forward转到浏览器载入历史url地址列表的当前url下一url
- length保存历史url地址列表的长度信息
10. this
- new调用时指的是被构造的对象
- call、apply调用时指向指定对象
- 对象调用时,如执行obj.b()指向obj
- 默认的指向window
11. new
- 创建一个空对象,并且this变量引用该对象,同时继承了该函数的原型
- 属性和方法被加入到this引用的对象中
- 新创建的对象由this所引用,并且最后隐式返回this
12. 事件委托:利用事件冒泡,只指定一个时间处理程序,就可以管理某一类型的所有事件。
使用原因:添加到页面上的时间处理程序数量将直接关系到页面的整体运行性能。需要不断与DOM节点进行交互。使用事件委托,将所有操作放到js程序中,与DOM的操作只需交互一次,减少与DOM的交互次数。