ECMASprict引用类型
- Object
Object实例可以使用new +构造函数()创建;也可以使用对象字面量表示法。
访问对象属性可以使用点表示法.
;也可以使用[]
表示法,后者可以通过变量来访问属性
var object1 = new Object();
var object2 = {name:'L'};
var key=name;
object.name object[key]
- Array
Array.length属性不是只读的,即可以通过改变数组元素改变length,也可以改变length,改变数组。
var arr=['a','b','c'];
arr.length=2;
console.log(arr);//['a','b']
Array的检测
console.log(typeof arr);//Object
console.log(arr instanceof Array);//true
console.log(arr instanceof Object);//true
console.log(Array.isArray(arr));//true
console.log(arr.constructor == Object);//false
console.log(arr.constructor == Array);//true
Array.join(c)返回有数组每个元素通过c拼接而成的字符串,如果没传入参数则默认以,
拼接。
var arr=['a','b','c']
console.log(arr.join('|--|'));// a|--|b|--|c
数组作为栈使用(LIFO)
push()推入,添加数据直数组末尾;pop()弹出末尾数据数组作为队列使用(FIFO)
shift()出队列,获取数组首部元素;push()入队列,添加数据至数组末尾数组作为反向队列使用(FIFO,头部进入尾部出)
unshift入队列,添加数据至数组首部;pop()出队列,获取数组尾部元素重排序
reverse(),反转数组。
sort(),数组排序,可以传如函数指定排序规则。
var arr=[0,1,5,10,15]
arr.sort(function(a,b){
if(a < b) //如果返回负数,则说明第一个参数应该在第二个参数之前
return -1;
else if(a == b)//如果返回0,则说明两个参数相等则
return 0;
esle //如果返回正数,则说明第二个参数应该在第一个参数之前
return 1
});
console.log(arr);
- concat(),接收一个或多个参数,先基于当前数组创建一个副本,如果参数是数组则每一项都添加到数组副本中,如果数不是数组则直接添加到数组副本中。
var arr=[1,2,3];
var arr1=arr.concat(4,5,[6,7]);
console.log(arr);//[ 1, 2, 3 ]
console.log(arr1);//[ 1, 2, 3, 4, 5, 6, 7 ]
- slice(start,end) 基于当前数组中的某几项创建一个新数组。satrt开始位置,end结束位置减一,如果未指定end,则默认为length
var arr=[1,2,3,4,5,6,7,8];
console.log(arr.slice(1,4));//[2,3,4]
console.log(arr.slice(1));//[2,3,4,5,6,7,8]
- splice()
删除:删除任意数量的项,arguments[0]=删除的第一项位置,arguments[1]=删除的项数
var arr=[1,2,3,4,5,6,7,8];
arr.splice(2,4);
console.log(arr);//[1,2,7,8]
插入(arguments[1]=0)|替换(arguments[1]=插入项数):插入任意数量的项,arguments[0]=起始位置,arguments[1]=删除的项数,arguments[2~]=插入项
var arr=[1,2,3,4,5,6,7,8];
arr.splice(2,3,'c','d','e');
console.log(arr);//从第二个位置开始删除3项(3,4,5)插入'c','d','e'。
位置方法
indexOf()从左至右 ; lastIndexOf()从右至左迭代方法
every(fn) 每一项执行fn,都返回true则返回true。
var arr=[1,2,3,4,5,6];
var flag=arr.every(function(data){
return data>3;
})
console.log(flag);//false
- some(fn)每一项执行fn,任一项返回true则返回true
var arr=[1,2,3,4,5,6];
var flag=arr.every(function(data){
return data>3;
})
console.log(flag);//true
- filter(fn) 每一项执行fn,返回true的项会组成数组并返回。-----
过滤
var arr=[1,2,3,4,5,6];
var flag=arr.filter(function(data){
return data>3;
})
console.log(flag);//[4,5,6]
forEach(fn) 每一项执行fn,无返回值。
map(fn) 每一项执行fn,返回函数调用的结果组成的数组。-----
整体操作
var arr=[1,2,3,4,5,6];
var flag=arr.map(function(data){
return data>3;
})
console.log(flag);//[ false, false, false, true, true, true ]
- 归并方法
reduce( fn )从数组第一项开始,向后遍历,reduceRight( fn )从数组最后一项开始,向前遍历。fn执行结果作为prev传入下次调用。如果数组仅有一项则直接返回。
arguments[0] = 前一个值prev
arguments[1] = 当前值cur
arguments[2] = 当前项索引index
arguments[3] = 数组对象 arr
var arr=[1,2,3,4,5,6];
var sum=arr.reduce(function(prev,cur,index,arr){
return prev+cur;//第一次执行调用prev=arr[0],cur=arr[1];
})
console.log(sum);//21
Date类型
var data=new Date();
getTime(毫秒)、getFullYear(年)、getMonth(月,0表示1月)、getDate(日,1~31)、getDay(星期0,0表示星期一)、getHours(时)、getMinutes(分)、getSeconds(秒)Function类型
函数声明:function fn(){},解析器优先加载。
函数定义:var fn=function(){},执行到该行代码才解析加载。
函数名实际是指向函数对象的一个指针,不存在重载,后定义的覆盖先定义的
函数内部拥有arguments(保存参数)
和this(指向当前对象)
和caller(指向该函数的调用者)
,argumens
拥有一个callee
的属性指向拥有arguments
对象的函数。
function fn(num){
if(num<=1)return 1;
return num*f(num-1);//高耦合
}
function fn(num){
if(num<=1)return 1;
return num*arguments.callee(num-1);
}
var color='yellow';
var c1={color:'red'};
var c2={color:'blue'};
function say(){
console.log(this.color);
}
c1.say=say;
c1.say();//red
c2.say=say;
c2.say();//blue
say();//yellow
fuction out(){
inner();
}
function inner(){
console.log(arguments.callee.caller);
}
out()返回out的源代码
函数内部拥有两个属性lenght(希望接收参数个数)
和prototype
函数内部都有两个非继承的方法apply
和call
~在不同域中调用函数,等价于设置函数内部this值。接收两个参数第一个是环境执行域,第二个是参数。apply以数组传递,call逐个列举出来。
var color='yellow';
var o={color:'red'};
function say(){
var color='blue'
console.log(this.color);
}
say()//yellow
say.call(this)//yellow
say.call(o)//red
bind函数可以绑定执行环境
var color='yellow';
var o={color:'red'};
function say(){
console.log(this.color);
}
var bindSay=say.bind(o);
bindSay();//red而非yellow
- 基本包装类型String Number Boolean
每当创建一个基本类型值时,就会创建一个对应的包装类型值,提供一系列方法。仅存在于代码执行瞬间
var s='test';
s.name='t';
console.log(s.name);//undefined
//后台悄悄执行-->
var s=new String('test');
s.name='t';
s=null;
常用String操作方法
var s='abcdefghijk';
s.charAt(1);//b
s[1];//b
s.charCodeAt(1)//98
String.fromCharCode(98)//b
var s1=s.concat('l','m')//abcdefghijklm
var s1=s.slice(3);//"defghijk"
var s1=s.substring(3);//"defghijk",结束位置=参数位置-1
s.indexOf('a',i)//a的位置从位置i开始搜索,默认为0
var s1=s.trim();//去除前后空格
var s1=s.toUpperCase()//大写
var s1=s.toLowerCase()//大写
- Math|,全局域内置对象
Math.min(1,2,3,4)//1
Math.max(1,2,3,4)//4
Math.max.apply(Math,[1,2,3,4])//4以数组方式传入
Math.random() 0<=x<1的随机数-->随机排序(给予一组对象随机值,按照随机值排序即可)