1.Object类型
1)创建Object实例的方式:
- 使用字面量创建
let myinstance={name:'abc',age:20}
- 使用Object创建
let myinstance2=new Object({name:'abc',age:21})
- 使用构造函数创建
function Person(name,age)
{
this.name=name;
this.age=age;
}
let p=new Person('abc','20');
- 使用Object.create创建
let o={name:'abc',age:'20'};
let o2=Object.create(o);
2.Array类型
和其他语言相同点:都是有序列表
不同点:可以保存不同的类型
ES数组大小可以动态调整。
- 创建数组
var colors=new Array();
//传入数字,会构建大小为20的数组
var colors=new Array(20);
//直接传递要包含的项
var colors=new Array(“red”,"blue","green");
可以省略new
var colors=Array();
var colors=Array(20);
var colors=Array(“red”,"blue","green");
使用数组字面量表示法:
var colors=["red","blue","green"];
//创建一个空数组
var name=[];
- 读取数组值
alert(colors[0]);
colors[2] = "black"; -
利用length属性可以删除元素和添加元素
length属性设置为2,会移除最后一项
length值大于数组项的值,为定义的对应索引项为undefined
中间位置3到位置98都是不存在的,所以都是undefined
1)检测数组
- 方法一:
if(value instanceof Array){
}
instanceof操作符的问题在于,它假定单一的全局执行环境。
如果网页中包含多个框架,就会存在两个以上不同全局执行环境。 - 方法二:
if(Array.isArray(value)){
}
这个方法解决了上述问题,能够确定某个值到底是不是数组,而不管它是在哪个全局执行环境中创建的
2)转换方法
toString(),toLocaleString(),valueOf()方法,join()方法
let arr=[[1,2],[2,3],[3,4]];
console.log(arr.toString());//转换成1,2,2,3,3,4
console.log(arr.valueOf()); //转出来还是数组
console.log(arr.join('||'));//1,2||2,3||3,4
3)push(),pop(),shift(),unshift()
/*栈方法*/
let arr5=[1,2,3];
arr5.push(4);
console.log(arr5);//[1,2,3,4]
arr5.pop();
console.log(arr5);//[1,2,3]
arr5.unshift(0);
console.log(arr5);//[0,1,2,3]
arr5.shift();
console.log(arr5);//[1,2,3]
4)重排序方法
reverse()和sort()
/*逆序*/
let arr5=[1,2,3];
arr5.reverse();
console.log(arr5);//[3,2,1]
sort()方法会调用每个数组项的toString()方法,即使数组中每一项都是数值,它比较的都是字符串。
sort方法为了解决如上问题,它能够接收一个比较函数作为参数。
/*sort排序*/
let arr3=[1,3,2,5,4];
let sortArr=arr3.sort((a,b)=>{
//从小到大
return a-b;
//从大到小
//return b-a;
});
console.log(sortArr);
5)操作方法
- concat()方法
没有传递参数,就会复制当前数组并返回给副本。
如果传递给concat()方法的是一个或多个数组,则该方法会将这些数组中每一项添加到结果数组中。
如果传递的值不是数组,这些值会被简单的添加到结果数组的末尾。
/*数组操作的方法*/
let arr6=arr5.concat();//[3,2,1]
console.log(arr6);
arr6=arr5.concat([1,2,3]);//[3,2,1,1,2,3]
console.log(arr6);
- slice()方法
能够接收一个或两个参数,截取数组。slice()方法不会影响原始数组。包括左边不包括右边
arr6=arr5.slice(0,1);//arr5=[3,2,1]
console.log(arr6);//[3]
-
splice方法
删除:splice(0,2)指定两个参数,起始位置和要删除的项数。
插入替换:splice(2,0,“red”,“green”),指定3个参数,起始位置、要删除的项数、要插入的项。会从当前数组的位置2插入字符串。
splice()方法始终都会返回一个数组,该数组中包含了从原始数组中删除的项。
7)位置方法
-
indexOf(),lastIndexOf()
两个参数:要查找的项,查找的起始索引位置(可选)
indexOf()从位置0或者索引参数开始向后查找。
lastIndexOf()从数组的末尾开始向前查找。
8)迭代方法
- foreach
/*数组遍历*/
let arr=['a','b','c'];
arr.forEach((item,index)=>{
console.log(index,item);
})
- every
/*判断所有元素都符合条件*/
let arr2=[1,2,3];
let result=arr2.every((item,index)=>{
if(item<4)
return true;
});
console.log(result);
- some
let arr2=[1,2,3];
/*只要有一个元素满足条件*/
let result2=arr2.some((item,index)=>{
if(item<2)
return true;
});
console.log(result2);
- sort
/*sort排序*/
let arr3=[1,3,2,5,4];
let sortArr=arr3.sort((a,b)=>{
//从小到大
return a-b;
//从大到小
//return b-a;
});
console.log(sortArr);
- map
let arr2=[1,2,3]; /*map对元素重新组合*/
let maparr=arr2.map((item,index)=>{
return "<b>"+item+"<b>"
});
console.log(maparr);
- filter过滤
let arr3=[1,3,2,5,4]; /*filter过滤*/
let filarr=arr3.filter((item,index)=>{
if(item>=3)
return true;
});
console.log(filarr);
9)缩小方法
四个参数:前一项值,当前值,索引,数组
-
reduce()从数组的第一项开始,遍历到最后
第一次:prev=1,cur=2
第二次:prev=3(1+2),cur=3
... -
reduceRight()从数组的最后一项开始,遍历到第一项
3.Date类型
var now=new Date();//不传参数会自动获取当前时间
根据特定的时间获取Date变量
var someDate=new Date(Date.parse("May 25,2004 "));
var someDate=new Date("May 25,2004 ");//传递字符串会默认调用Date.parse().
//2005年5月5日下午17点55分55秒
var someDate=new Date(Date.UTC(2005,4,5,17,55,55))
ES5添加了Date.now()方法
4.RegExp类型(来支持正则表达式)
flags包括3个标志:
g:全局模式
i:不区分大小写
m:多行模式
//匹配字符串中所有bat或cat
var pattern1=/[bc]at/i;
var pattern1=new RegExp("[bc]at","i");
1)RegExp实例方法
-
exec();
接收一个参数,要应用模式的字符串,然后返回包含第一个匹配信息的数组。还包含两个额外的属性:index,input。
对于exec()方法而言,每次只会返回一个匹配项。在没有设置全局变量的情况下,在同一个字符串上多次调用exec()将始终返回第一个匹配项。在设置全局变量的情况下,每次调用exec()方法则会在字符串中继续查找新的匹配项。
-
test()方法
接收一个字符串参数,在模式与该参数匹配的情况下返回true;否则返回false。
3)正则表达式
- 【abc】:方括号表示查找任何在方括号内的字符
【0-9】查找任何从0至9的数字
【a-z】查找从小写a到小写z的字符
【A-Z】查找从大写A到大写Z的字符
【^abc】查找任何不在方括号内的字符
|:表示或
.匹配代表任意字符 /h.t/
-
\w查找字符(字母、数字、下划线)
\W查找非字符
\d查找数字
\D查找非数字字符
\s查找空白字符
\S查找非空白字符
\b匹配单词边界
\B匹配非单词边界
-
p* 模式p的0或多次出现
p+ 模式p的1或多次出现
p? 模式p的0或1次出现
-
p{n} 模式p正好n次出现
p{n,}模式p至少n次出现
p{n,m}模式p出现次数位于n和m间(不包括m)
正则表达式网站:
www.w3cfuns.com
5.Function类型
ES中每个函数都是Function类型的实例,而且与其他引用类型一样具有属性和方法。函数名实际上是一个指向函数对象的指针。
函数名仅仅是指向函数的指针:
1)没有重载
2)函数声明与函数表达式
在代码开始执行之前,解释器通过一个名为函数声明提升的过程,读取并将函数声明添加到执行环境中。
函数表达式,则必须等到解释器执行到它所在的代码行才会被解释执行。
3)作为值的函数
因为函数名本身就是变量,所以函数也可以作为值来使用。也就是说可以像传递参数一样把一个函数传递给另一个函数,也可以将一个函数作为另一个函数的返回值。
4)函数的内部属性
在函数内部有两个特殊的对象:
-
arguments
它是一个类数组对象,包含传入函数中的所有参数。
虽然arguments的主要用途是保存函数参数,但这个对象还有一个名叫callee的属性,该属性是一个指针,指向拥有这个arguments对象的函数。
-
this,表示当前执行的环境对象(当在全局作用域中调用函数时,this对象的引用就是window)
-
caller
以上函数回显示调用inner函数(也就是outer()函数)的源代码
注意:当函数在严格模式下,访问arguments.callee会导致错误。
也不能为函数的caller属性赋值。
5)函数的属性和方法
每个函数包括两个属性:length和prototype
length:表示函数希望接收的命令参数的个数。
- prototype属性:保存所有引用类型的实例方法(具体下一章介绍)
重要
每个函数包含两个非继承方法apply()和call()。这两个方法的用途都是在特定的作用域中调用函数。
-
apply()方法接收两个参数:一个是运行函数的作用域,一个是参数数组
-
call()方法与apply()方法作用相同,区别仅在于接收参数的方式不同
-
call()方法和apply()方法真正的用武之地是在扩充函数作用域
-
bind()方法
- call、apply和bind的区别
bind返回的是对应的函数,用于稍后调用; call、apply是立即调用。
call传参时,第一个参数是运行函数的作用域,后面的参数依次列开。
apply传参时,第一个参数是运行函数的作用域,后面的参数是数组。
- 使用call和apply实现bind
Function.prototype.bind=function(context){
//这里的this其实是当调用bind方法时的函数实例
var self=this;
args=Array.prototype.slice.call(arguments);
return function(){
return self.apply(context,args.slice(1));
}
}
6.基本的包装类型
1)Boolean类型
Boolean类型是与布尔值对应的引用类型。创建Boolean对象:
- 前三行代码创建了一个Boolean对象falseObject,在布尔运算时,所有的对象都会被转换成true,这里是对falseObject而不是对它的值(false)进行求值。所以结果为true
2)Number类型
Number是与数字值对应的引用类型。
let num=10;
- toString()方法 参数可以用来表示是几进制
<script>
let num=100200030040505;
console.log(num.toString());
console.log(num.toString(2));
</script>
- toFixed()方法:将数值格式化为指定小数的字符串。
let num=100.005;
console.log(num.toFixed(2));//能够自动四舍五入100.00
-
toExponential():指数表示法
3)String类型
let s='abc';
let s='abc';
console.log(s.length);//3
方法
- 字符方法:
charAt():根据索引获取字符串中的字符
charCodeAt():根据索引获取字符串的字符的编码
ES5中可以使用[ index]来访问特定字符
let s='abc';
console.log(s.length);//3
console.log(s.charAt(1));//b
- 字符串操作方法(并不会改变原字符串)
concat()方法:拼接字符串
let s1=s.concat('bcd');
console.log(s1);//abcbcd
substr()、slice()、substring()
当传入的参数是负数的时候,substr()、slice()会从最后往前数,substring会返回0
console.log(s1.substr(-1));//s.length-1
console.log(s1.slice(-1));//s.length-1
console.log(s1.substring(-1));//0
- splite方法(将字符串按照一定条件分割成数组)
/*字符串转数组*/
let s1='abcdbd';
let arr=s1.split('');
console.log(arr);
- trim()方法:
/*去掉空格*/
let s2=' 你好 ';
console.log(s2.trim());
-
字符串位置方法
indexOf(),lastIndexOf(),返回字符串的索引
字符串的模式匹配方法
match()
let matches=text.match(/.at/);
console.log(matches.index);//返回索引 0
console.log(matches[0]);//返回第一个元素 //cat
search():返回字符串中第一个匹配项的索引,没找到就返回-1
/*返回第一个匹配项的索引*/
let pos=text.search(/at/);//1
console.log(pos);
- replace()方法
如果第一个参数是字符串,那么只会替换第一个。
如果要替换所有的字符串,需要提供一个正则表达式,并指定全局标志。
/*字符串替换*/
let text='cat,bat,sat,fat';
//只会替换第一个
let result=text.replace('at','ond');
console.log(result);
//要替换所有字符,需要正则表达式
result=text.replace(/at/g,'ond');
console.log(result);
7.单体内置对象
1)Global对象
2)Math对象
-
min()和max()
-
舍入方法
-
random()方法
返回介于0到1之间的一个随机数,不包括0和1