ECMASprict引用類型
- Object
Object實例可以使用new +構(gòu)造函數(shù)()創(chuàng)建;也可以使用對象字面量表示法淹魄。
訪問對象屬性可以使用點表示法.
;也可以使用[]
表示法,后者可以通過變量來訪問屬性
var object1 = new Object();
var object2 = {name:'L'};
var key=name;
object.name object[key]
- Array
Array.length屬性不是只讀的,即可以通過改變數(shù)組元素改變length配深,也可以改變length,改變數(shù)組嫁盲。
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)返回有數(shù)組每個元素通過c拼接而成的字符串篓叶,如果沒傳入?yún)?shù)則默認以,
拼接。
var arr=['a','b','c']
console.log(arr.join('|--|'));// a|--|b|--|c
數(shù)組作為棧使用(LIFO)
push()推入羞秤,添加數(shù)據(jù)直數(shù)組末尾缸托;pop()彈出末尾數(shù)據(jù)數(shù)組作為隊列使用(FIFO)
shift()出隊列,獲取數(shù)組首部元素瘾蛋;push()入隊列俐镐,添加數(shù)據(jù)至數(shù)組末尾數(shù)組作為反向隊列使用(FIFO,頭部進入尾部出)
unshift入隊列,添加數(shù)據(jù)至數(shù)組首部瘦黑;pop()出隊列京革,獲取數(shù)組尾部元素重排序
reverse(),反轉(zhuǎn)數(shù)組奇唤。
sort()幸斥,數(shù)組排序,可以傳如函數(shù)指定排序規(guī)則咬扇。
var arr=[0,1,5,10,15]
arr.sort(function(a,b){
if(a < b) //如果返回負數(shù)甲葬,則說明第一個參數(shù)應(yīng)該在第二個參數(shù)之前
return -1;
else if(a == b)//如果返回0,則說明兩個參數(shù)相等則
return 0;
esle //如果返回正數(shù)懈贺,則說明第二個參數(shù)應(yīng)該在第一個參數(shù)之前
return 1
});
console.log(arr);
- concat(),接收一個或多個參數(shù)经窖,先基于當(dāng)前數(shù)組創(chuàng)建一個副本,如果參數(shù)是數(shù)組則每一項都添加到數(shù)組副本中梭灿,如果數(shù)不是數(shù)組則直接添加到數(shù)組副本中画侣。
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) 基于當(dāng)前數(shù)組中的某幾項創(chuàng)建一個新數(shù)組。satrt開始位置堡妒,end結(jié)束位置減一,如果未指定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()
刪除:刪除任意數(shù)量的項,arguments[0]=刪除的第一項位置,arguments[1]=刪除的項數(shù)
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]=插入項數(shù)):插入任意數(shù)量的項,arguments[0]=起始位置,arguments[1]=刪除的項數(shù)搬泥,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) 每一項執(zhí)行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)每一項執(zhí)行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) 每一項執(zhí)行fn燥透,返回true的項會組成數(shù)組并返回沙咏。-----
過濾
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) 每一項執(zhí)行fn,無返回值兽掰。
map(fn) 每一項執(zhí)行fn芭碍,返回函數(shù)調(diào)用的結(jié)果組成的數(shù)組。-----
整體操作
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 )從數(shù)組第一項開始孽尽,向后遍歷,reduceRight( fn )從數(shù)組最后一項開始窖壕,向前遍歷。fn執(zhí)行結(jié)果作為prev傳入下次調(diào)用杉女。如果數(shù)組僅有一項則直接返回瞻讽。
arguments[0] = 前一個值prev
arguments[1] = 當(dāng)前值cur
arguments[2] = 當(dāng)前項索引index
arguments[3] = 數(shù)組對象 arr
var arr=[1,2,3,4,5,6];
var sum=arr.reduce(function(prev,cur,index,arr){
return prev+cur;//第一次執(zhí)行調(diào)用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類型
函數(shù)聲明:function fn(){}积担,解析器優(yōu)先加載陨晶。
函數(shù)定義:var fn=function(){},執(zhí)行到該行代碼才解析加載帝璧。
函數(shù)名實際是指向函數(shù)對象的一個指針先誉,不存在重載,后定義的覆蓋先定義的
函數(shù)內(nèi)部擁有arguments(保存參數(shù))
和this(指向當(dāng)前對象)
和caller(指向該函數(shù)的調(diào)用者)
的烁,argumens
擁有一個callee
的屬性指向擁有arguments
對象的函數(shù)褐耳。
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的源代碼
函數(shù)內(nèi)部擁有兩個屬性lenght(希望接收參數(shù)個數(shù))
和prototype
函數(shù)內(nèi)部都有兩個非繼承的方法apply
和call
~在不同域中調(diào)用函數(shù),等價于設(shè)置函數(shù)內(nèi)部this值渴庆。接收兩個參數(shù)第一個是環(huán)境執(zhí)行域铃芦,第二個是參數(shù)买雾。apply以數(shù)組傳遞,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函數(shù)可以綁定執(zhí)行環(huán)境
var color='yellow';
var o={color:'red'};
function say(){
console.log(this.color);
}
var bindSay=say.bind(o);
bindSay();//red而非yellow
- 基本包裝類型String Number Boolean
每當(dāng)創(chuàng)建一個基本類型值時漓穿,就會創(chuàng)建一個對應(yīng)的包裝類型值,提供一系列方法注盈。僅存在于代碼執(zhí)行瞬間
var s='test';
s.name='t';
console.log(s.name);//undefined
//后臺悄悄執(zhí)行-->
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",結(jié)束位置=參數(shù)位置-1
s.indexOf('a',i)//a的位置從位置i開始搜索晃危,默認為0
var s1=s.trim();//去除前后空格
var s1=s.toUpperCase()//大寫
var s1=s.toLowerCase()//大寫
- Math|,全局域內(nèi)置對象
Math.min(1,2,3,4)//1
Math.max(1,2,3,4)//4
Math.max.apply(Math,[1,2,3,4])//4以數(shù)組方式傳入
Math.random() 0<=x<1的隨機數(shù)-->隨機排序(給予一組對象隨機值,按照隨機值排序即可)