1.1 常用方法:
eval:将字符串形式的语句转换为对应的对象或者执行脚本输出,
如:eval(“document.title=‘我爱我家’”);//会执行设置文档标题为“我爱我家”
定义json对象串var strUser=‘{“user”:”dbadmin”,”name”:”管理员”}’;
var oUser=eval(‘(‘+ strUser +’)’);//注意两边要加上括号
JSON: 字符串与json的互相转换
var str1 = ‘{ “name”: “cxh”, “sex”: “man” }’;//字符串
var obj = eval(‘(’ + str + ‘)’); //字符串转对象
或者 var obj = str.parseJSON();
或者 var obj = JSON.parse(str);
var str = obj.toJSONString();//对象转字符串
或者var last=JSON.stringify(obj);
注:部分低版本浏览器只支持eval,兼容低版本需要引入json2.js
使用json2.js中JSON.parse(string)方法将json串转化为对象时必须外层用单引号,内层用双引号, 如果是
strUser=“{‘user’:’dbadmin’,’name’:’管理员’}”就报异常,
应该为strUser=‘{“user”:“dbadmin”,“name”:“管理员”}‘,
JSON.parse(string)这个方法也用的是eval
注:eval效率比较低
Json2.js下载地址:https://github.com/douglascrockford/JSON-js/blob/master/json2.js
(2)编码
escape: 编码一个字符串,常用于加密汉字 参数,该方法不会对 字母和数字进行编码,也不会对下面这些 符号进行编码: ± _ . *
解码是unescape
encodeURI:常用编码整个url,不编码的字符与escape不同,要多几个,为-.!~*\‘()
另对;/?: @&=+$,# 也不编码,解码是decodeURI
encodeURIComponent:常用加密一个url的参数,不加密的特殊字符有-.!~*\‘(),解码是decodeURIComponent
总结:如果只含有”#”字符,比如有些配注站站名会有”#”,可用escape加码;如果含有”+”,则只能用encodeURIComponent加码;escape加的码无论网站web.config中配置utf-8或者gb2312都会自动解码。
1.2 内置对象
1、Math数学对象
Math.floor:返回小于等于值的最大整数,如Math.floor(“3.56”)返回3,
Math.floor(“-3.56”)返回-4
Math.ceil:返回大于等于值的最小整数,如Math.ceil(“3.56”)返回4,
Math.floor(“-3.56”)返回-3
Math.round:四舍五入取整,Math.round(“3.56”)返回4
注:使用Math内置对象也可以用with单独声明使用域来使用,如
with(Math){ var iHm=floor(“3.53”);}
Math.random:返回返回位于 0 到 1 之间的随机函数,一般跟在网页地址后来解决缓存数据不更新问题
2、String字符串对象
toUpperCase:字符串转化为大写,如”fsdfs”. toUpperCase()返回”FSDFS”
toLowerCase:字符串转化为小写,如”ABcd”. toLowerCase()返回”abcd”
indexOf:返回某子串在母串中第一次出现的索引,常用来配合!=-1来确认字符串包含,如
if(“dbaf”.indexOf(‘db’)!=-1)//代表子串存在,否则不存在
lastIndexOf:返回某子串在母串中最后一次出现的索引
3、Date日期对象
初始化:var dNow=new Date(2014,7,8);//一定要用这种格式(年,月,日),其他格式不通用,各浏览器解释不一样。假定日期对象dNow为2014年7月8日,
getFullYear:返回年,如dNow.getFullYear()返回2014
getMonth:返回月,注意获取系统时间的月份要+1,月份是从0开始的,如new Date().getMonth()要用 getMonth()+1,其他的用getMonth()
getDate:返回日,如dNow.getDate()返回8
4、Array数组对象
声明:假设要创建长度为3的3名学生姓名的数组
第1种方式
var arrStu=new Array(3);
arrStu[0]=“张三”;
arrStu[1]=“李四”;
arrStu[2]=“王五”;
第2种方式
var arrStu=new Array(“张三”,“李四”,”王五”);
第3种方式
var arrStu=[“张三”,“李四”,”王五”];
下述以第3种方式介绍方法
join:将数组中元素合并为字符串,如果不加分隔符直接合并,如 arrStu.join(‘,’)返回张三,李四,王五 arrStu.join()返回张三李四王五
push:在数组的末尾加上一个或多个元素,并且返回新的数组长度值,如 alert(arrStu.push(“赵六”))弹出4(数组的新长度),数组变成[“张三”,“李四”,”王五”,“赵六”](push方法是最常用的)
pop:移除数组中的最后一个元素并返回该元素,如 alert(arrStu.pop())弹出王五(即数组的最后1个元素),
数组变成[“张三”,“李四”]
注:pop和push配对使用
unshift:为数组的开始部分加上一个元素,并且返回该数组的新长度,如 alert(arrStu.unshift(“赵六”))弹出4(数组的新长度),数组变成[“赵六”,“张三”,“李四”,”王五”]
shift:移除数组中的第一个元素并返回该元素,如alert(arrStu.shift())弹出张三
数组变成[“李四”,”王五”]
注:shift和unshift配对使用
总结:凡是移除元素(pop和shift)的会返回该元素,凡是增加元素(push和unshift)的会返回新数组长度,其实一般返回值用的地方很少
slice:以数组的形式返回数组的一部分,注意不包括 end 对应的元素,如果省略 end 将复制 start 之后的所有元素, alert(arrStu.slice(1, 2))
Concat:将多个数组(也可以是字符串,或者是数组和字符串的混合)连接为一个数组,返回连接好的新的数组
5、json对象
声明如{“属性1”:”值1”,“属性2”:”值2”…},可以解释为一组属性键值对的集合,属性也可以不加引号,值如果是字符串需要加引号,如{属性1:”值1”,属性2:值2…}
示例:
var oJson1={“name”:”张三”,”age”:20}
alert(oJson1.age);//弹出20
alert(oJson1.age+1)//弹出21
var oJson2={“name”:”张三”,”age”:“20”}
alert(oJson2.age);//弹出20
alert(oJson2.age+1)//弹出201,字符串拼接了
下面是常用操作
1.增加属性或者属性赋值
对象[“属性名”]=值 或 对象.属性名=值
如:var oJson1={“name”:“张三”,“age”:20,“dept” :“数据库”}
oJson1.dept=“技术部”;或者oJson1[“dept”]=“技术部”;
2.移除属性
delete 对象[“属性名”] 或者 delete 对象.属性名
如:delete oJson1.age 或 delete oJson1[“age”]
6、空对象
当变量a不为空,不是空串或者不是未定义执行某个操作,if(a){…}
不用复杂写法if(a!=null||a!=“”||a!=undefined)
1.3高级语法块
(1)for循环
1.array数组操作
假设声明数组为arrTest
普通写法:
for(var i=0;i<arrTest.length;i++) {…arrTest[i]…}
高级写法:
for(var i in arrTest){…arrTest[i]…}
2.json对象操作
假设声明json对象为oJson
for(var p in oJson){…oJson[p]…}
(2)try…catch{}异常捕获块
try{ … }catch(e){ alert(e.message); }
(3)自定义函数
function 函数名(属性1, 属性2,......属性N)
{
this.属性1=属性值1;
this.属性2=属性值2;
this.属性n=属性值n;
this.方法名1=函数名1;
this.方法名2=函数名2;
}
比如定义1个员工类,
function Employee(bno,name,dept,age)
{
this.bno=bno;//员工编号
this.name=name;//员工姓名
this.dept=dept;//员工部门
this.age=age;//员工年龄
this.GetBirthYear=function() //计算该员工的出生年份
{
var NowYear=new Date().getFullYear();
return NowYear-this.age;
}
this.BirthYear=this.GetBirthYear();//调用自身函数设置下出生年份
}
var employee1=new Employee(‘01’,‘张三’,‘技术部’,23);//声明1个员工对象
alert(employee1.BirthYear);//弹出1991
这种声明方法参数限制比较死,参数个数和顺序都比较固定,如果使用json格式就比较灵活。
function Employee(options){
this.options =
{
bno: ‘',
name: ‘’,
dept: ‘’,
age: 20
}
Object.nadExtend(this.options,options||{});//扩展默认的属性
…}
Object.nadExtend = function(destination, source) {//扩展
for (var property in source) {
destination[property] = source[property];
}
return destination;
}
//注意:这个方法并不是给Object扩展了个方法
内部方法也可以使用对象属性prototype(用来返回对象类型原型的引用)来动态添加
下面我们看两个经典的prototype属性的使用示例
1、4常用的Dom对象属性
childeNodes : 返回所有子节点对象
var mylist=document.getElementById(“mylist”). childNodes;
innerHTML:严格的讲它并不是DOM
document.getElementById(“aaa”).innerHTML= “您好";
Style:这是一个极其重要的属性,可以获取并修改每个单独的样式.
document.getElementById(“aaa”).style. backgroundColor="#cccccc“
firstChild 返回第一个子节点 lastChild 返回最后一个子节点
parentNode 返回父节点的对象 nextSibling 返回下一个兄弟节点的对象
previousSibling 返回前一个兄弟节点的对象 nodeName 返回节点的HTML标记名称,使用英文的大写字母,如P, FONT