第二章:小結(jié)
- 在使用JavaScript外部腳步時菩佑,src屬性可以鏈接到外部文件浊洞,也可以鏈接到外部域的文件。
<javascript src="路徑" type="text/javascript"></javascript>
- 元素會按照默認(rèn)的方式進行虽界,前提是不使用defer和async屬性情況下烤咧,
defer=”defer”屬性將延遲到瀏覽器遇到之后才會執(zhí)行偏陪,但是支持html5標(biāo)準(zhǔn)的瀏覽器中,會忽略這個屬性煮嫌,所以把延遲腳本放在頁面底部是最佳選擇。
async src=”example.js” 屬性目的是為了不讓頁面等待腳本下載抱虐,而異步加載頁面的其他內(nèi)容昌阿,該屬性腳本一定會在頁面的load事件前執(zhí)行。
一般應(yīng)該把元素放在前面,目的是為了先加載頁面懦冰,在執(zhí)行腳本灶轰,防止出現(xiàn)空白頁面的情況。
放在</body>之后
- Js的嚴(yán)格模式:
functiondoSomething(){
“use strict”;//開啟嚴(yán)格模式的代碼
//函數(shù)體
}
開啟嚴(yán)格模式之后刷钢,ECMAScript一些不確定和規(guī)范的操作將會得到處理
如果有意的忽略var的操作符笋颤,會由于相應(yīng)變量不會馬上就有定義而導(dǎo)致不必要的混亂。在未經(jīng)聲明的變量賦值在嚴(yán)格模式下會拋出ReferenceError的錯誤内地。
- Typeof(操作符)用于檢測給定變量的數(shù)據(jù)類型伴澄,undefind,boolean阱缓,string非凌,number,boject荆针,function敞嗡,實例:
alert(typeof 95);--------//number
第四章:變量、作用域和內(nèi)存問題
- 賦值變量值:當(dāng)從一個變量復(fù)制基本數(shù)據(jù)類型值時航背,倆個都擁有各自的獨立內(nèi)存喉悴,互不影響。而復(fù)制對象時玖媚,倆著都成為引用箕肃,則都指向一個保存在堆內(nèi)存的對象。
var num1=3最盅;
var num2=num1突雪;
num1=4;
alert(num1);---//5;
alert(num2);---//3
var o1=new object();
var o2=o1;
o1.name=”hasname”;
alert(o2.name);---//hasname;
基本變量和對象引用變量作為函數(shù)參數(shù)傳遞時:基本變量復(fù)制成另一個內(nèi)部函數(shù)變量涡贱,互不干擾咏删。而對象引用變量給出引用,即多一個引用问词,倆者都指向一個對象督函。
局部作用域的對象不會在全局中變現(xiàn)出來,在局部建立的對象在函數(shù)結(jié)束時自動銷毀激挪。
with(“object”)語句--將其添加到函數(shù)中辰狡,可以把object對象暫時引入到函數(shù)中,并將其添加到作用域的前端垄分。在with執(zhí)行環(huán)境中宛篇,能夠創(chuàng)建變量和更改object對象的屬性和變量。但是創(chuàng)建的變量是作為函數(shù)執(zhí)行環(huán)境而言薄湿,是函數(shù)的局部變量叫倍,不能夠作為object對象的變量或者屬性偷卧。在結(jié)束with語句之后,該引用就會被銷毀吆倦,重新按執(zhí)行環(huán)境執(zhí)行听诸。
沒有塊級作用域:在js中,在if語句或者for語句等語句中定義的變量在語句執(zhí)行完成之后不會被銷毀蚕泽。因為它是作為當(dāng)前整個執(zhí)行環(huán)境的變量(局部或者全局)晌梨;
eg:for(vari=0;i<10;i++){
alert(i);
var a=”I am a”;
}
alert(i);alert(a);--//依然有效
第六章:引用類型:
- 創(chuàng)建對象的引用,對象字面量定義:
var object1=new object();
var object2={name:”name1”,age:29}; //以逗號隔開须妻,最后一個無符號
varobject3={“name”:”name”,”age”:29};
varobject4={};object4.name=”name”;object4.age=29;
以上創(chuàng)建方法等價W序颉!璧南!
- 利用對象面量語法傳遞大量可選參數(shù):
eg:function display(object){
if(type ofobject.name=”string”)alert(object.name+”string類型的name”);
if(type ofobject.age=”number”)alert(object.age+”number類型的age”);
}
display({
name:”thisname”,
age:20
});
display({
age:19
});
- Array中模擬類似于堆棧的堆內(nèi)存(先進后出FILO):
push(任意多個內(nèi)容)—將括號內(nèi)的內(nèi)容依次添加到數(shù)組末尾,pop()—取出數(shù)組末尾的數(shù)掌逛。
push()方法返回添加后的數(shù)組長度,pop()返回的是移除的末尾數(shù)組內(nèi)容司倚。
模擬隊列方法(先進先出FIFO):shift()取出位于array中下標(biāo)為0位的內(nèi)容豆混,?>即移除首位元素。
ECMAScript還提供unshift(任意多個內(nèi)容)能夠把任意內(nèi)容插入到數(shù)組前动知,
順序從左至右皿伺,依次插入。
4. 數(shù)組排序:
1.reverse()方法將數(shù)組中的項顛倒順序盒粮。
2.sort()將數(shù)組中的每個項執(zhí)行toString()方法鸵鸥,然后進行升序比較。Sort()方法中接受一個比較函數(shù)丹皱,如果比較函數(shù)返回一個負(fù)數(shù)妒穴,就證明比較函數(shù)中的第一個value應(yīng)該位于第二個value之前。反之比較函數(shù)返回一個正數(shù)摊崭。相等返回0讼油。
eg:var arr=[1,5,0,10,15];
sort(compare);
document.write();//15,10,5,1,0
fucntioncompare(value1,value2){
if(value1){
return 1;
}
Else fi(value1>value2){
Return-1;//返回-1:value1在value2的前面。
}
elsereturn 0;
}
function compare(value1,value2){
returnvalue1-value2;//數(shù)值比較(valueof方法返回為number)呢簸,升序排列矮台、
}
5.復(fù)制數(shù)組:
concat(接受一個或多個任意項)該方法為數(shù)組引用對象的方法,能夠復(fù)制當(dāng)前數(shù)組并將接受的參數(shù)依次添加到創(chuàng)建的副本數(shù)組中根时。并返回該數(shù)組副本瘦赫。
slice(接受一個或者倆個數(shù)值)同為數(shù)組引用對象的方法,能夠根據(jù)參數(shù)確定引用數(shù)組中項的位置蛤迎,并將之提取出來确虱,重新創(chuàng)建一個數(shù)組返回。
var arr=[0,1,2,5,7,9];
var arr2=arr.slice(0,3)//newarr[0,1,2];相當(dāng)于是[0,3)
var arr2=arr.slice(2);//newarray[2,5,7,9];接受一個參數(shù)時替裆,其后都選中蝉娜。
var arr2=arr.slice(-3,-1);//newarray[5,7];如果出現(xiàn)負(fù)數(shù)唱较,則將數(shù)組長度與之相加為位置扎唾。如果還是負(fù)數(shù)召川,則返回空數(shù)組。
3. splice(2個及以上數(shù)量的參數(shù));
刪除--倆個參數(shù):第一個參數(shù)指定位置胸遇,第二個指定刪除個數(shù)荧呐。array.splice(0,2);刪除前倆項。
插入--3個參數(shù)或以上:第一二參數(shù)同上纸镊,第三個及以后參數(shù)為插入項倍阐。array.splice(1,0,”red”,”green”);從第二項開始插入red和green項。
替換—3個參數(shù)或以上:第一二參數(shù)同上逗威,第三個及以后參數(shù)為替換項峰搪。array.splice(1,1,”grey”);刪除第二項,并將之替換為grey凯旭。
splice方始終會返回一個數(shù)組概耻,該數(shù)組包含splice方法刪除的項(如果沒有刪除任何項来涨,則返回一個空的數(shù)組)
上述原理為:不刪除越庇,為插入,刪除即為替換械馆。
- 定位查找數(shù)組項:indexOf(查找的,,查找起點位置(可選))順序查找嫉柴。
lastindexOf(查找的項,查找起點位置(可選))末尾開始向前查找厌杜。也從末尾下標(biāo)為0向前計數(shù)。
倆個方法都返回要查找的項在數(shù)組中的位置计螺,在沒有找到的情況下返回-1夯尽,第一個參數(shù)要查找的項必須跟數(shù)組中的項完全相等,用==符號比較登馒。倆者的地址要相等
- 迭代方法:都接受倆個參數(shù)匙握,第一個為執(zhí)行的函數(shù),第二個為函數(shù)作用域(this)谊娇。
every()方法:每一item都滿足函數(shù)條件時肺孤,返回true;--每一項都滿足是為true济欢。
filter()方法:返回滿足函數(shù)條件的item的數(shù)組赠堵;--我要看哪些項滿足條件,過濾器法褥。
foreach()方法:為每個item都執(zhí)行該函數(shù)茫叭,無返回;--我只要你們按照函數(shù)執(zhí)行半等。
map()方法:每個item執(zhí)行函數(shù)揍愁,并返回執(zhí)行后的數(shù)組呐萨;--你們都執(zhí)行函數(shù),我要看你們的執(zhí)行結(jié)果莽囤。
some()方法:每個item執(zhí)行函數(shù)谬擦,只有要一個item執(zhí)行后返回true,就返回一個true的值朽缎。--查看有沒有item滿足惨远。
arra=[1,5,10,20,3,4,7];
varresult=arra.map(function(item,index,array){//index為項的索引array為數(shù)組的對象
returnitem*2;
});
console.log(result.toString());//2 10 20 40 60 8 14
- reduce()和reduceRight()累加器:他們都接受倆個參數(shù),一個為執(zhí)行的函數(shù)话肖,一個為可選的縮小值北秽。
執(zhí)行的函數(shù)內(nèi),包含4個參數(shù)最筒。pre為前一項贺氓,curr為當(dāng)前項,index為索引床蜘,array為數(shù)組對象辙培。當(dāng)?shù)谝淮芜\行函數(shù)式,pre為第一項悄泥,curr為第二項虏冻。
arra=[1,5,10,20,3,4,7];
result=arra.reduce(function(pre,curr,index,array) {//pre為1 curr為5
returnpre+curr;//求和示例
});
console.log(result);//50
Date類型:類型是早期java.util.Date類基礎(chǔ)上構(gòu)建的。
RegExp對象(正則表達(dá)式):
1.創(chuàng)建:new RegExp(/ab+c/, 'i'); //ES6新增允許的寫法
a) g---global全局模式弹囚,表示正則將會依次查找并匹配整個文本厨相。
b) i---case-insensitive忽略匹配的文本的大小寫。
c) m---multiline多行匹配鸥鹉,即會在匹配到一行末尾時蛮穿,依然會匹配下一行。
- 對象方法:reg.exec(進行匹配的字符串)該方法進行捕獲字符串中的匹配值毁渗。