- Object类型
1. 创建object实例方法:
- new操作符构建函数
var person=new Object();
person.name="aaa";
person.age="11";
- 对象字面量表示法
var person={
name:"aaa",
age:"11"
};
使用逗号来分隔不同的属性,但最后的属性不能添加","
2. 访问对象属性
- 点表示法
alert(person.name); //aaa
- 方括号表示法
alert(person["name"]) //aaa
方括号表示法可以通过变量来访问属性
var propertyName="name";
alert(person[propertyName]); //"aaa"
属性名包含会导致语法错误的字符,或者使用的是关键字或保留字————方括号表示法
person["first name"]="Green";
- Array类型
1. Array创建方法
- new构造函数
var colors=new Array();
var colors=new Array(20);//长度为20
var colors=new Array("red","green","black");
- 数组字面量表示法
var colors=["red","green","black"];
2. length属性不是只读,可从数组末尾移除项或向数组中添加项
var colors=["red","green","black"];
colors.length=2;
alert(color[2]); //undefinited
3. 检测数组
Array.isArray()方法
4. 转换方法
- toLocaleString()
- toSting()
- valueOf()
var colors=["red","green","black"];
alert(colors.toString()); //red,green,black
alert(colors.valueOf()); //red,green,black
alert(colors); //red,green,black
toLocaleString()方法经常也会返回与toString()和valueOf()方法相同的值,但也不总是如此。当吊用数组的toLocaleString()时,他也会创建一个数组值的以逗号分隔的字符串。与前面两种方法不同的是,这一次为了取得每一项的值,调用的是每一项的toLocaleString(),而不是toSting()
var per1={
toLocaleString:function(){
return "aaa";
},
toString:function(){
return "aaa";
}
};
var per2={
toLocaleString:function(){
return "bbb";
},
toString:function(){
return "ccc";
}
};
var per=[per1,per2];
alert(per); //aaa,ccc
alert(per.toString()); //aaa,ccc
alert(per.toLocaleString()); //aaa,bbb
5. join()方法:
使用不同分隔符来构建这个字符串
var colors["red","green","black"];
alert(colors.join("|")); //red|green|black
6. 栈方法与队列方法
- push():任意项数添加到数组末尾;
- pop():从数组末尾移除最后一项
- shift():移除第一项并返回该项,同时长度-1
- unshift():在数组前端添加任意项并返回数组长度
7. 重排序方法
- reverse():倒序
- sort():升序排序
8. 操作方法
- concat():基于当前数组创建一个数组副本,将接收到的参数添加到这个副本末尾;
- slice():接受1或2个参数(返回想的起始位置)
var colors["red","green","black","blue"];
var co1=colors.slice(1);
var co2=colors.slice(1,3);
alert(co1); //green,black,blue
alert(co2); //green,black
- splice():
- 删除:2个参数;splice(0,2)删除前两项
- 插入:3个参数;splice(2,0,“red”,“green”);[下标1前面插]
- 替换:3个参数
9. 位置方法
- indexOf():从开头找(0);
- lastIndexOf():从末尾找
10. 迭代方法
- every():对每一项运行给定函数,每一项都返回true,则返回true
- filter():执行函数过滤掉不符和条件的数组元素,返回复合条件的数组元素
- foreach():循环数组,没有返回值
- map():返回每次函数调用结果组成的数组;
- some():对每一项运行给定函数,任有一项返回true,则返回true;
11. 归并方法
- reduce():从第一项开始,逐个遍历到最后
- reduceRight():从最后一项开始,逐个遍历到第一项
这两个方法都迭代数组的所有项,然后构建一个最终返回值.
传给reduce()和reduceRight()的函数接受4个参数:前一个值,当前值,项的索引,数组对象。函数返回的任何值都会作为第一个参数自动传给下一项
var values=[1,2,3,4,5];
var sum=value.reduce(function(prev,cur,index,array){
return prev+cur;
});
alert(sum); //55
- Date类型
1. 创建对象:
- new构造函数
2. 根据特定的时间日期创建日期对象
- Date.parse():接收一个表示日期的字符参数,返回毫秒数。若参数不能表示日期,则返回NaN;
var someDate=new Date(Date.parse("May 25,2004"));
- Date.UTC():返回表示日期的毫秒数;参数:年份,基于0的月份,月中哪一天,小时数,分钟,秒,毫秒(只有前两个参数是必须的)
var someDate=new Date(Date.UTC(2000,4,5,17,55,55)) //5月5日
3. Date.now()
返回调用这个方法时的日期和时间的毫秒数
4. 继承方法
与其他引用类型一样,Date类型也重写了toString(),toLocaleString(),valueOf()方法
- toString():通常返回带有时区信息的日期和时间,一般以军用时间表示;
- toLocaleString():按照与浏览器设置的地区相适应的格式返回日期和时间,会包含AM和PM
RegExp类型
1. 创建正则表达式方法:
-
字面量形式
var expression=/pattern/flags
-
pattern:可以是任何复杂或简单的正则表达式
-
flags:
- g:全局模式,即模式将被应用到所有的字符串
- i:不区分大小写
- m:多行模式,即在到达一行文本末尾时还会继续查找下一行中是否存在与模式匹配的项
元字符要转义 //匹配字符串中所有“at”的实例 var pattern1=/at/g //匹配第一个“bat”或“cat”,不区分大小写 var pattern2=/\[bc\]at/i; //匹配所有以"at"结尾的3个字符的组合,不区分大小写
-
使用RegExp构造函数
-
接收2个参数:要匹配的字符串模式;可选的标志字符串
var pattern2=new RegExp("[bc]at","i");
转义:所有元字符都必须双重转义(例如\在字符串中转义为\\,在正则表达式中变成\\\\)
2. 实例属性
- global:布尔值,是否设置了g标志
- ignoreCase:是否i
- lastIndex:整数,表示凯斯搜索下一个匹配项的字符位置,从0算起
- multiline:布尔值,是否m
- source:正则表达式的字符串表示
3. 实例方法
-
exec():接收一个参数:要应用模式的字符串,返回第一个匹配项的信息(无 返回null)包含额外两个属性:
- index:匹配项在字符串中位置
- input:表示应用正则表达式的字符串
var text="mom and dad and bady"; var pattern=/mom(and dad (and bady)?)?/gi; var matches=pattern.exec(text); alert(martch.index);//0 alert(match.input);//"mom and dad and bady" alert(match[0]);//mom and dad and bady alert(match[1]);//and dad and bady alert(match[2]);//and bady
在不设置g的情况下,在同一个数组桑多次调用exec()将始终返回第一个匹配项的信息。
在设置g的情况下,每次调用exec()则都会在字符串中继续查找新的匹配项
-
test():接受一个字符串参数,在模式与该参数匹配的情况下返回true,否则,false;
var text="000-00-0000";
var pattern=/\d{3}-\d{2}-\d{4}/;
if(pattern.test(text)){
alert("与模式匹配");
}
4. RegExp构造函数属性
- input: $_ 最近一次要匹配的字符串
- lastMatch: $& 最近一次的匹配项
- lastParen: $+ 最近一次匹配的捕获组
- leftContext: $` input字符串中lastMatch之前的文本
- multiline: $* 布尔值,表示是否所有表达式都使用多行模式
- rightContext: $’ input字符串中lastMacth之后的文本
Function类型
1. 函数定义
- 使用函数声明语法
function sum(num1,num2){
return num1+num2;
}
- 使用Function构造函数(不推荐)
var sum=new Function("num1","num2","return num1+num2");
2. 没有重载
- 声明两个同名函数,而结果则是后面的函数覆盖了前面的函数
3. 函数声明与函数表达式
- 解析器会率先读取函数声明,并使其在执行任何代码之前可用;而函数表达式,则必须等到解析器执行到他所在的代码行,才会真正被解释执行
alert(sum(10,10));
function sum(num1,num2){
return num1+num2;
}
可执行(函数声明提升)
4. 访问函数的指针而不执行函数,必须去掉函数名后面的括号
5. 函数内部属性
-
函数内部对象:argument,this
-
arguments的属性:
callee:指针,指向拥有这个arguments对象的函数
function factorial(num){
if(num<=1){
return 1;
}
else{
return num*arguments.callee(num-1);
}
}
- this对象
引用的是函数执行的环境对象(当在网页的全局作用域中调用函数时,this对象引用的是window)
-
另外一个函数对象的属性
-
caller:保存着调用当前函数的函数的引用,如果是在全局作用域中调用当前函数,他的值为null
6. 函数属性和方法
属性:
- length
- prototype:保存引用类型所有实例方法
方法:(在指定的作用于中调用函数)
- apply():接受两个参数:在其中运行函数的作用域;参数数组(可以是Array实例,也可以是arguments对象);扩充函数来一运行的作用域
- call():第一个参数:this,其余参数:直接传递给函数(逐个列举出来);扩充函数来一运行的作用域
- bind();创建一个函数实例,其this值会被绑定到传给bind()函数的值
apply()和call():
相同点:
都在特定区域内调用函数,即设置了函数体内this对象的值,以扩充函数来一运行的作用域。
function Person(name,age){
this.name=name;
this.age=age;
}
ver person=new Person("deng",100);
var obj={
};
Person.call(obj,"cheng",300);
///第一个参数让Person里面所有预设的this全都变成obj,后面的参数一实参的形式传递
一般来说,this总是指向调用某个方法的对象,但是使用call和apply方法时,就会改变this的值
不同点:
接收参数的方式不同
apply只能传一个实参,并且这个实参必须是数组形式
call:需要把实参按照形参的个数传进去
基本包装类型
- Boolean
- Number
- toFixed():按照指定的小数位返回数值的字符串表示
var num=10;
alert(num.toFixed(num));//10.00
- toExponential():返回以指数表示法
- toPrecision():返回固定大小(位数)的格式,也可能返回指数格式
- String
- charAt():以单字符字符串形式返回给定位置的那个字符
- charCodeAt():返回字符编码
- concat()
- slice():第二个参数(下标)不包括
- substr():第二个参数(下标)包括
- substring():第二个参数(下标)不包括
- 参数负数情况:
slice():将负值与字符串长的相加
substr():负的第一个参数加上字符串长度;负的第二个参数转换为0
substring():把所有负值转换为0
- trim():删除前缀及后缀的所有空格
- toLowerCase()
- toLocaleCase():针对特定时区实现
- toUppperCase()
- toLocaleUpperCase():针对特定时区实现
- match():与exec()相同,匹配,只接受一个参数:正则表达式或RegExp对象
var text="cat,bat";
var pattren=/\.at/;
var matchs=text.match(pattern);
alert(matchs.index); //0
alert(matchs[0]); //"cat"
alert(matchs.lastIndex), //0
- search():返回第一个匹配项的索引
- replace():2个参数;第一个可以是RegExp对象或者是一个字符串;第二个可以是一个字符串或者一个函数;;;如果第一个参数是字符串,则只会替换掉第一个子字符串,,,要替换掉所有子字符串,唯一办法就是提供一个正则表达式,并且指定全局g
var text="cat,bat";
var result=text.replace("at","ond");
alert(result); //cond,bat
result=text.replace(/at/g,"ond");
alert(result);//cond,bond
- localeCompare():
- 字符串在字母表中应该排在字符串参数之前,则返回一个负数
- 之后,返回正数
- 等于,返回0
var stringValue="yellow"; alert(stringValue.localeCompare("brick")); //1 alert(stringValue.localeCompare("yellow")); //0 alert(stringValue.localeCompare("zoo")); //-1
- fromCharCode():接收一或多个字符编码,然后转换为一个字符
引用类型与基本包装类型主要区别:
-
使用new创建的引用类型的实例在执行流离开当前都一直保存在内存中。
-
自动创建的基本包装类型的对象,只存在于一行代码的执行瞬间,然后被立即销毁。这意味着我们不能在运行时为基本类型值添加属性和方法
-
使用new调用基本包装类型的构造函数,与直接调用同名的转型函数不一样
var value="25";
var number=Number(value);//转型函数
alert(typeof number); //"number"
var obj=new Number(value); //构造函数
alert(typrof obj); //"object"
Global对象
1. URI编码方法
- encodeURI():用于整个URI,不会对本身属于URI的特殊字符进行编码
- encodeURIComponent():主要用于URI中的一段,会对他发现的任何非标准字符进行编码
- decodeURI():只能用对使用encodeURI()替换的字符进行解码
- decodeComponent():可以解码任何特殊字符的编码
2. eval()
当解析器发现代码中调用eval()方法是,他会将传入的参数当做实际的ECMAScript语句来解析,然后把执行结果插入到原来位置。通过eval()执行的代码被认为是包含盖茨调用的执行环境的一部分,因此得之行的代码具有与该执行环境相同的作用域链
严格模式下,在外部访问不到eval()中创建的任何变量或函数
window对象
在全局作用域中声明的所有变量和函数,都成为window对象的属性