1.Object类型
创建Object实例有两种方法。第一种使用new关键字。比如:
var person=new Object();
person.name="geograous";
person.age=25;
另一种方式是使用对象字面量表示法。比如:
var person={
name:"geograous",
age:25
};
这里创建了一个person对象,包含两个属性。一个属性是name,值为字符串类型“geograous”。另一个属性是age,值为数值类型25。
或者:
var person={
"name":"geograous",
"age":25,
5:true
};
这里创建的person有name,age和5三个属性,其中数值类型的5会转化为字符串类型。
第三种:
var person={};
person.name="geograous";
person.age=25;
注意:在通过对象字面量定义对象时,实际上不会调用Object构造函数。
访问对象属性有两种方法。一种是使用.运算符,另一种是使用[]运算符。当属性名称不符合变量定义的规范时,比如以数字开头,中间有空格等,使用[]的方式。比如,访问person对象中的name属性可以使用这两种方式:
person.name;
//得到geograous
person["name"];
//得到geograous
或者也可以这样:
var type="name";
person[type]; //等同于person["name"];
2.Array类型
创建Array实例的方法:
var colors=new Array(); //创建一个空数组
var colors=new Array(3); //创建一个长度为3的数组
var colors=new Array("red","yellow","green");
//创建一个数组,包含red,yellow,green。
//使用字面量表示,也可以这样:
var colors=Array(3);
var names=Array("greg");
//简写形式
var colors=["red","yellow","green"];
var colors=[];
colors[colors.length]="blue"; //在数组末尾增加一项“blue”
colors.length=3; //设置数组长度为3,把第三项之后的数据删除。
colors[5]="orange"; //结果为:"red","yellow","green",undifined,“orange”
检测数组:
if(value instanceof Array){} //ecmascript3
if(Array.isArray(value)){} //ecmascript5检测数组:
toString,toLocalString,valueOf方法:
var person1={
toLocalString:function(){
return "georas";
},
toString:function(){
return "geograous";
}
};
var person2={
toLocalString:function(){
return "greg";
},
toString:function(){
return "grigorios";
}
};
var people=[person1,person2];
alert(people); //geograous,grigorios
alert(people.toString()); //geograous,grigorios
alert(people.toLocalString());
//georas,greg
var colors=["red","blue"];
alert(people.join(",")); //结果为:"red,blue"
alert(people.join("||")); //结果为:"red||blue"
如果数组中的某一项值是null或者undefined,那么该值在join(),toLocalString(),toString()和valueOf()方法中以空字符串表示。
堆栈方法:
var colors=["blue","yellow"]; //创建一个空数组;
var length=colors.push("red");
//往数组的末尾中插入一项,返回数组长度。数组为["blue","yellow","red"],length的值为1;
var color=colors.pop(); //删除数组中最后一个元素,并返回。color为red,colors为["blue","yellow"];
var length=colors.unshift("red"); //往数组中的首部插入一项,返回数组长度。
数组为["red","blue","yellow"],length的值为1;
var color=colors.shift(); //删除数组中的一个元素,并返回。color为red,colors为["blue","yellow"];
排序方法(sort,reverse):
var values=[1,2,3,5,4];
values.sort(); //values为[1,2,3,4,5];
values.sort(cmp);
values.revrese(); //values为[5,4,3,2,1];
function cmp(val1,val2){
if(val1<val2){
return 1;
}else if(val1>val2){
return -1;
}else{ return 0;}
}
操作方法(concat,slice,splice):
concat(value...)方法:原数组不变,返回对原数组扩大后的数组。参数如果是数组,则把数组中的每一项添加到原数组中,否则把该项添加到原数组中。
slice(ind1,ind2)方法:原数组不变,返回对原数组做切割后的数组。两个参数表示前闭后开空间,如果只有一个参数,则表示第二项为数组长度。
splice(ind,num,val...)方法:对原数组做增加删除操作,并返回原数组中删除的项。含义为从ind开始,向后删除num项,并向数组中添加val...,返回删除的num项。
var colors=["red","green"];
//返回对原数组添加blue,black,brown后的数组
var colors=colors.concat("blue",["black","brown"]); //结果为["red","green","blue","black","brown"];
//截取下标为1,到3的元素,并返回。
var colors2=colors.slice(1,4); //结果为["red","green","blue"];
var color=colors2.splice(1,1,"black"); //color为green,colors2为["red","black","blue"];
位置方法(indexOf,lastIndexOf)
迭代方法(every,some,filter,forEach,map)
every(function)方法类似集合中的并集,返回数组中每一项的函数返回值的并集,some(function)方法类似于集合中的交集,返回数组中每一项的函数返回值的交集。function(value,ind,array)函数:value为当前值,ind为下标,array为数组。
filter(function)方法返回原数组中满足函数function的项。
map(function)方法返回原数组中的每一项的函数返回值。
forEach(function)方法没有返回值,对原数组中的没一项进行函数操作。
var nums=[1,2,3,4,5];
nums.every(function(value,ind,array){
return value>3;
});
//false;
nums.some((function(value,ind,array){
return value>3;
});
//true;
nums.filter(function(value,ind,array){
return value>3;
});
//[4,5];
nums.map(
function(value,ind,array){
return value*2;
});
//[2,4,6,8,10];
nums.forEach(function(value,ind,array){
value=value+1;
});
//nums=[2,3,4,5,6];
归并方法(reduce,reduceRight)
reduce(function),reduceRight(function)方法分别为左规约和右归约。
function(prev,cur,ind,array)函数:prev为之前计算结果,cur为当前值,ind为当前下标,array为数组。
var nums=[1,2,3,4,5];
nums.reduce(function(prev,cur,ind,array){
return prev+cur;
});
//15
3.Date类型
var now=new Date();
//now为当前时间。
var someDate=new Date(Date.parse("May 25,2004")); //
var someDate1=new Date("May 25,2004");
//以上两者等价。
var y2k=new Date(Date.UTC(2000,0));
var allFives=new Date(Date.UTC(2005,4,5,17,55,55));
//2005年5月5日,下午5点55分55秒。
var y2k1=new Date(2000,0);
//以上两者等价。
获取时间差:
var start=Date.now();
var start1=+new Date();
//以上两者等价。对于不兼容的浏览器,使用此方法
//dosomething
var end=Date.now();
var res=end-start;
当然Date类型也可以比较大小。
4.RegExp类型
创建规则:
var expression=/pattern/flags;
flags:
g:表示全局模式(global)
i:表示不区分大小写(case-insensitive)
m:表示对行(multiline)模式。
//匹配所有的“at”实例
var pattern1=/at/g;
//不区分大小写匹配第一个bat或者cat
var pattern2=/[bc]at/i;
var pattern21=new RegExp("[bc]at","i"); //以上两者等价
//不区分大小写匹配所有以at结尾的实例。
var pattern3=/.at/gi;
正则表达式原字符:(){}[]\.$^|?*+. 如果用到这些字符的“原始意义”时需要转义符\。
//匹配第一个[bc]at,不区分大小写
var pattern4=/\[bc\]at/i;
//匹配所有“.at”,不区分大小写
var pattern5=/\.at/gi;
RegExp实例属性
global:全局模式。
ignoreCase:忽略大小写。
lastIndex:起始下标。
multiline:多行模式。
source:字符串。
var pattern1=/\[bc\]at/i;
pattern1.global; //false;
pattern1.ignoreCase; //true;
pattern1.lastIndex; //0;
pattern1.multiline; //false;
pattern1.source; //"\[bc\]at"
RegExp实例方法
exec()方法。
var text="mon and dad and baby";
var pattern=/mon (and dad (and baby)?)?/ig;
var matches=pattern.exec(text);
matches.index;
//0
matches.input; //
"mon and dad and baby"
matches[0]; //
"mon and dad and baby"
matches[1];
//"and dad and baby"
matches[2];
//"and baby"
ie的javascript实现在lastIndex属性上存在偏差,即使在非全局模式下,lastIndex属性每次也会发生变化。
test()方法
var text="mon and dad and baby";
var pattern=/mon (and dad (and baby)?)?/ig;
if(pattern.test(text)){
alert("ok!!!");
}
RegExp构造函数属性
input:$_,输入。
lastMatch:$&,最近匹配。
lastParen:$+,最近匹配组。
leftContext:$`,最近匹配的左边部分。
multiline:$*,多行匹配。
rightContext:$',最近匹配的右边部分。
var text="this has been a short summer";
var pattern = /(.)hort/g;
if(pattern.exec(text)){
alert(RegExp.input); //"this has been a short summer";
alert(RegExp.leftContext);
//this has been a
alert(RegExp.rightContext);
//summer
alert(RegExp.lastMatch); //short
alert(RegExp.lastParen); //s
alert(RegExp.multiline); //false
}
RegExp.$1...RegExp.$9表示第1-9个捕获组。
var text="this has been a short summer";
var pattern = /(.)hor(.)/g;
if(pattern.exec(text)){
alert(RegExp.$1); //s
alert(RegExp.$2); //t
}
5.Function类型
定义函数的方法:
function sum(num1,num2){
return num1+num2;
}
var sum=function(num1,num2){
return num1+num2;
}
var sum=new Function("num1","num2","return num1+num2;");
作为值得函数
因为ecmascript中函数名本身就是变量,所以函数也可以作为值来使用。也就是说,不仅可以像传递参数一样把一个函数传递给另一个函数,而且可以将一个函数作为另一个函数的结果返回。
function add10(num){
return num+10;
}
function callSomeFunc(func,arg){
return func(arg);
}
//以函数名为参数,调用函数
callSomeFunc(add10,10); //20
//返回一个比较函数
function createCmpFunc(prop){
return function(obj1,obj2){
var val1=obj1[prop];
var val2=obj2[prop];
if(val1>val2){
return -1;
}else if(val1<val2){
return 1;
}else{
return 0;
}
}
}
内部属性
arguments,this,callee,caller
//两个函数等价
//使用函数名
function factorial (num){
if (num<= 1 ){
return 1 ;
} else {
return num* factorial (num- 1 ) ;
}
}
//使用callee属性
function factorial1 (num){
if (num<= 1 ){
return 1 ;
} else {
return num* this . callee (num- 1 ) ;
}
}
//使用函数名
function factorial (num){
if (num<= 1 ){
return 1 ;
} else {
return num* factorial (num- 1 ) ;
}
}
//使用callee属性
function factorial1 (num){
if (num<= 1 ){
return 1 ;
} else {
return num* this . callee (num- 1 ) ;
}
}
//this属性
window . color = "red" ;
var o={ color : "blue" } ;
function sayColor (){
alert ( this . color ) ;
}
sayColor () ;
o. sayColor = sayColor ;
o. sayColor () ;
window . color = "red" ;
var o={ color : "blue" } ;
function sayColor (){
alert ( this . color ) ;
}
sayColor () ;
o. sayColor = sayColor ;
o. sayColor () ;
函数的名字仅仅是一个包含指针的变量而已。因此,即使是在不同的环境中执行,全局的sayColor()与o.sayColor()指向的任然是同一个函数。
函数的属性和方法
length、prototype
function
sayName
(name){
alert
(name)
;
}
function sum (num1 , num2){
return num1+num2 ;
}
function sayHi (){
alert ( "hi" ) ;
}
sayName . length ; //1
sum . length ; //2
sayHi . length ; //0
}
function sum (num1 , num2){
return num1+num2 ;
}
function sayHi (){
alert ( "hi" ) ;
}
sayName . length ; //1
sum . length ; //2
sayHi . length ; //0
var
o={}
;
o. num1 = 1 ;
o. num2 = 2 ;
var o1={} ;
o1. num1 = 3 ;
o1. num2 = 4 ;
function sumThis (){
return this . num1 + this . num2 ;
}
sumThis . call (o) ; //3(=1+2)
sumThis . call (o1) ; //7(=3+4)
var sumO= sumThis . bind (o) ;
alert (sumO()) ; //3(=1+2)
o. num1 = 1 ;
o. num2 = 2 ;
var o1={} ;
o1. num1 = 3 ;
o1. num2 = 4 ;
function sumThis (){
return this . num1 + this . num2 ;
}
sumThis . call (o) ; //3(=1+2)
sumThis . call (o1) ; //7(=3+4)
var sumO= sumThis . bind (o) ;
alert (sumO()) ; //3(=1+2)
6.基本包装类型
7.单体内置对象