10 js05 數(shù)組那槽、類數(shù)組悼沿、try/catch、es5嚴格模式

數(shù)組骚灸、類數(shù)組糟趾、try/catch、es5嚴格模式

1甚牲、數(shù)組:【后期封裝方法基本都在Array.prototype上义郑,這樣之后創(chuàng)建的數(shù)組都能使用該方法】

(1).數(shù)組的創(chuàng)建方式:字面量、構(gòu)造函數(shù)丈钙;[創(chuàng)建數(shù)組的構(gòu)造函數(shù)只有系統(tǒng)定義的new Array();?不能自定義構(gòu)造函數(shù)非驮,所以相比于對象來說其更簡單] [字面量var?arr = [];?內(nèi)部等同于隱式調(diào)用的new Array();?原型鏈指向便是Array.prototype,創(chuàng)建的數(shù)組使用的方法也都是該Array.prototype上的特石,當然也可以自己封裝方法歧沪,丟到Array.prototype上宰掉,這樣之后創(chuàng)建的新數(shù)組就都有該方法了]

[1].js是弱類型語言蹂空,var arr = [1,2,3,"skr",{name:"xao"},[] ]; //?區(qū)別于強類型語言(定義數(shù)據(jù)類型后裂问,里面的數(shù)據(jù)類型就確定了)溶握,數(shù)組中可以放多種數(shù)據(jù)類型的數(shù)據(jù)脊凰;

[2].字面量創(chuàng)建與構(gòu)造函數(shù)創(chuàng)建:基本沒什么差別燕垃,唯一的一點:

var?arr = [1,2,3];?等同于 var arr = new Array(1,2,3);??

var arr1 = [10];//arr1[0]=10俏橘;? var arr1 = new Array(10);//10個數(shù)據(jù)(每個都是空),表示長度;?所以new Array(10.2);//報錯(長度不能為小數(shù))

(2).數(shù)組的方法:目前基于的是es3.0; (es5.0/es6.0增添了新數(shù)組方法栋盹,后續(xù)會學到)

[ es1.0已廢棄;es2.0沒有用到;es3.0最全例获、最基礎汉额,最標準的版本(之前所學都是基于此) ;es5.0增添了新方法(新版本瀏覽器支持榨汤,老版本瀏覽器不支持蠕搜,瀏覽器版本發(fā)布時候就確定了es標準);es6.0最新收壕、最強大的方法妓灌; es7.0 最新標準制定完成,市場還沒有投放] ;[es:ECMAScript;? DOM:通過javascript操作HTML頁面; BOM:通過javascript操作瀏覽器蜜宪,每個瀏覽器都不兼容(BOM可以隨便操作你的瀏覽器,開發(fā)中很少用到) ]

[1].可以改變原數(shù)組的方法:只有這七個push(); pop(); shift(); unshift(); reverse(); sort(); splice();

【unshift();封裝該方法的思路:添加的數(shù)封裝為一個數(shù)組虫埂,然后在該數(shù)組上push原數(shù)組;或者使用splice();方法圃验,從第0位開始截取掉伏,截取0位,放入添加的數(shù)據(jù)】

[2].重點剖析數(shù)組的排序方法sort();?系統(tǒng)默認采取的排序方法為"逐位ASCII碼比較"?升序澳窑;

var arr=[1,3,5,4,10,11];? arr.sort();//?[1, 10, 11, 3, 4, 5];

------------>>>>>系統(tǒng)為sort();方法留了接口斧散,可以自己封裝方法實現(xiàn)不同的功能,但是需要遵守下列的規(guī)則:1.方法內(nèi)必須寫兩個形參; 2.看返回值:當返回值為負數(shù)時摊聋,那么前面的數(shù)放到前面; 當返回值為正數(shù)時鸡捐,那么后面的數(shù)放到前面; 為0的時候,不動麻裁;[系統(tǒng)規(guī)則判斷的標準就是return值是正數(shù)還是負數(shù)來進行排序]??

最終版:arr.sort( function( a, b){return a-b; / return b-a });?這里的function(a,b){}?代表著函數(shù)的引用箍镜,可以寫成? var test = function(){};? ?arr.sort(test); 【重點依舊聚焦到底層實現(xiàn)的邏輯,巧妙應用sort();進行封裝方法實現(xiàn)自己想要的功能】

實際應用中排序1:

實際應用中排序2:

[3].不改變原數(shù)組的方法:concat(); toString(); slice();? join();//?后續(xù)es5.0煎源、es6.0的新方法也不能改變原數(shù)組色迂;

var arr = [1,2,3]? arr.toString();//"1,2,3";?將數(shù)組轉(zhuǎn)換為字符串,返回值絕對不是"[1,2,3]"

slice();//不寫參數(shù)表示截取所有數(shù)據(jù)薪夕;

arr.join("");//括號里必須是字符串(實際其也可以為原始值中的其他類型脚草,例如true,不過沒什么用處,記得其為字符串就可以啦)原献,其可將數(shù)組按相應字符轉(zhuǎn)換為字符串馏慨;相反的字符串的方法str.split("");//括號內(nèi)也必須是字符串,其可將字符串按相應字符進行轉(zhuǎn)換為數(shù)組;

arr.join("");//直接轉(zhuǎn)換為字符串姑隅;arr.join();//有逗號写隶;?str.split("");//每個都是字符串;str.split();//直接轉(zhuǎn)換為數(shù)組讲仰;

如何實現(xiàn):var str="hello" ----->>> "olleh"慕趴;str.split("").reverse().join("");

2、類數(shù)組:其必須有索引屬性、length屬性冕房,最好有push();?如果有splice();就更好了;[類數(shù)組還是和數(shù)組有區(qū)別躏啰,其沒有數(shù)組系統(tǒng)自帶的方法,需要手動去添加Array.prototype上的方法耙册,才能實現(xiàn)和數(shù)組上方法相同的功能]

【arguments就是類數(shù)組给僵,其只有l(wèi)ength/callee屬性,沒有數(shù)組的方法详拙,若想用需要手動添加方法】

[1].類數(shù)組核心必須要有l(wèi)ength屬性帝际,對象變?yōu)轭悢?shù)組后,既有對象的特性也有類數(shù)組的特性饶辙,兩者一起使用蹲诀,這樣在存儲方面更強大;

阿里面試題:

3弃揽、數(shù)組去重:

數(shù)組去重:巧妙使用對象的屬性“特性”脯爪,把數(shù)組的每個值作為對象的屬性,對象的屬性只能對應一個屬性值蹋宦,判斷:若是某屬性已經(jīng)有了屬性值披粟,那說明這個數(shù)就出現(xiàn)過了咒锻;

封裝type()方法:[解決typeof()的bug]

4. try{ } catch(e){ }

js運行三部曲冷冗,解釋執(zhí)行的時候當某行代碼發(fā)生錯誤的時候,下面的代碼便不會執(zhí)行惑艇,日常開發(fā)中常常會把可能發(fā)生錯誤的代碼放到try語句體內(nèi)來避免這種情況的發(fā)生蒿辙;[代碼出現(xiàn)錯誤的情況很多,也并非都是我們可控的滨巴,例如:后期涉及到前后端數(shù)據(jù)的傳輸思灌,很難保證數(shù)據(jù)是否有效傳輸,傳輸過程是否有錯誤]

(1).如果try{ }語句體內(nèi)的代碼發(fā)生錯誤恭取,之后不會執(zhí)行語句體內(nèi)發(fā)生錯誤的代碼后面的代碼(遇到第一條錯誤信息就中斷)泰偿,但依舊可以執(zhí)行外面的代碼;

(2).當try{ }語句體內(nèi)的代碼發(fā)生錯誤后蜈垮,可選擇執(zhí)行catch語句體內(nèi)的代碼耗跛;[catch:捕獲錯誤,形參e表示的是系統(tǒng)會把錯誤信息封裝成error對象然后傳給形參,該對象有兩個屬性err.name; err.message;形參名可以取其他名字都OK攒发,使用try{}catch(e){}; 其不會讓程序中斷(直接把錯誤信息輸出到控制臺上),而是將錯誤信息交由你處理调塌,你可以選擇輸出到控制臺console.log();或者打印出來呈現(xiàn)給用戶alert();也可以執(zhí)行任何代碼,一般操作的是打印錯誤信息惠猿,但好處是不會影響后續(xù)代碼的執(zhí)行羔砾;若是沒有錯誤,就不執(zhí)行catch語句]

(3).常見錯誤名稱:ReferenceError;? SyntaxError;(語法解析錯誤例如使用中文標點等)很常見;

補充:try{ }catch(err){ }finally{ };//try中寫進行錯誤測試的代碼塊姜凄,catch拋出錯誤信息政溃,finally在無論是否異常都會執(zhí)行;catch和finally語句都是可選的态秧,但在使用try語句時至少使用一個玩祟;throw語句來創(chuàng)建自定義信息(手動拋出異常)

5、es5.0嚴格模式:

瀏覽器版本發(fā)布的時候便確定了使用的es版本屿聋,目前瀏覽器都內(nèi)置es3.0和es5.0空扎,由于發(fā)生沖突使用的是es3.0,所以可理解為其是基于的es3.0和es5.0新增的一些方法(內(nèi)部含義:瀏覽器內(nèi)有兩種es版本润讥,當es3.0和es5.0發(fā)生沖突的時候转锈,瀏覽器默認使用的是es3.0版本的標準); 使用es5.0嚴格模式就是瀏覽器中當es3.0和es5.0發(fā)生沖突的時候,使用es5.0的語法標準楚殿;es5.0相比于es3.0語法更加嚴格撮慨,雖降低了js的靈活性,但可以減少錯誤脆粥;[es3.0 -->>> es5.0發(fā)展過程中摒棄了些舊語法砌溺,產(chǎn)生新語法而已]

(1).es5.0嚴格模式啟動:全局/局部,若全局使用变隔,則頁面中必須遵循es5.0的語法標準规伐;[使用字符串而不使用方法的原因:若使用strict();之前瀏覽器使用的是es3.0版本,其不能識別該方法便會報錯匣缘,那之后的代碼便不能執(zhí)行猖闪,使用字符串無論那個版本都不會報錯]

(2).es5.0嚴格模式(語法標準):其不支持with; arguments.callee; func.caller;?變量賦值前必須聲明,局部this必須被賦值(賦值什么就是什么),拒絕重復屬性和參數(shù)肌厨;等等嚴格模式有很多都是不支持的培慌,例如還有var a = 010;//8進制的數(shù),其在es3.0下是支持的柑爸,但在es5.0嚴格模式下報錯吵护;

[1].關于with的使用:with(){};// 參數(shù)為對象,其可以改變作用域鏈表鳍,參數(shù)會作為新AO對象放到作用域鏈的最頂端馅而;優(yōu)點:一些場合的使用可以優(yōu)化代碼,缺點:其操作作用域鏈进胯,很影響系統(tǒng)的性能用爪;

[es5.0嚴格模式下不支持:報錯]

[2].arguments.callee; func.caller; [es5.0嚴格模式下不支持:報錯]

[3].變量賦值前必須聲明,es3.0未聲明默認其是window暗示變量胁镐;es5.0未聲明便賦值偎血,報錯(xx is not defined);

[4].局部this必須被賦值(賦值什么就是什么);【全局和es3.0相同诸衔,局部若是沒有被賦值就是undefined】[new test();按照當初所學:this為{};?這里返回值為test {};?原因:前面是構(gòu)造函數(shù)的名,后面才是this指向的{};]

[5].拒絕重復屬性和參數(shù); es3.0出現(xiàn)重復屬性或參數(shù)會發(fā)生覆蓋現(xiàn)象颇玷,并不報錯笨农;es5.0嚴格模式下直接報錯;對象中的屬性也是如此 var obj {name:"xaohua",name:"xiaodon"}

補充:eval()的使用:es3.0中不支持其的使用(eval是魔鬼)帖渠,es5.0支持谒亦,其有兩個作用,1.把字符串當作代碼使用空郊;2.其可以改變作用域份招,不同情況下可針對作用域作出不同的操作,功能特別強大狞甚;

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末锁摔,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子哼审,更是在濱河造成了極大的恐慌谐腰,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,639評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件涩盾,死亡現(xiàn)場離奇詭異十气,居然都是意外死亡,警方通過查閱死者的電腦和手機春霍,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,277評論 3 385
  • 文/潘曉璐 我一進店門砸西,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人终畅,你說我怎么就攤上這事籍胯【股粒” “怎么了离福?”我有些...
    開封第一講書人閱讀 157,221評論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長炼蛤。 經(jīng)常有香客問我妖爷,道長,這世上最難降的妖魔是什么理朋? 我笑而不...
    開封第一講書人閱讀 56,474評論 1 283
  • 正文 為了忘掉前任絮识,我火速辦了婚禮,結(jié)果婚禮上嗽上,老公的妹妹穿的比我還像新娘次舌。我一直安慰自己,他們只是感情好兽愤,可當我...
    茶點故事閱讀 65,570評論 6 386
  • 文/花漫 我一把揭開白布彼念。 她就那樣靜靜地躺著挪圾,像睡著了一般。 火紅的嫁衣襯著肌膚如雪逐沙。 梳的紋絲不亂的頭發(fā)上哲思,一...
    開封第一講書人閱讀 49,816評論 1 290
  • 那天,我揣著相機與錄音吩案,去河邊找鬼棚赔。 笑死,一個胖子當著我的面吹牛徘郭,可吹牛的內(nèi)容都是我干的靠益。 我是一名探鬼主播,決...
    沈念sama閱讀 38,957評論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼残揉,長吁一口氣:“原來是場噩夢啊……” “哼捆毫!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起冲甘,我...
    開封第一講書人閱讀 37,718評論 0 266
  • 序言:老撾萬榮一對情侶失蹤绩卤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后江醇,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體濒憋,經(jīng)...
    沈念sama閱讀 44,176評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,511評論 2 327
  • 正文 我和宋清朗相戀三年陶夜,在試婚紗的時候發(fā)現(xiàn)自己被綠了凛驮。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,646評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡条辟,死狀恐怖黔夭,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情羽嫡,我是刑警寧澤本姥,帶...
    沈念sama閱讀 34,322評論 4 330
  • 正文 年R本政府宣布,位于F島的核電站杭棵,受9級特大地震影響婚惫,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜魂爪,卻給世界環(huán)境...
    茶點故事閱讀 39,934評論 3 313
  • 文/蒙蒙 一先舷、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧滓侍,春花似錦蒋川、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,755評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽街图。三九已至,卻和暖如春懒构,著一層夾襖步出監(jiān)牢的瞬間餐济,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,987評論 1 266
  • 我被黑心中介騙來泰國打工胆剧, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留絮姆,地道東北人。 一個月前我還...
    沈念sama閱讀 46,358評論 2 360
  • 正文 我出身青樓秩霍,卻偏偏與公主長得像篙悯,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子铃绒,可洞房花燭夜當晚...
    茶點故事閱讀 43,514評論 2 348

推薦閱讀更多精彩內(nèi)容

  • 第2章 基本語法 2.1 概述 基本句法和變量 語句 JavaScript程序的執(zhí)行單位為行(line)鸽照,也就是一...
    悟名先生閱讀 4,131評論 0 13
  • 當愛人不相識 歌聲蹉跎年少 故事發(fā)生 褪去一身稚驁 當故人不相認 摘下香煙和表 大病一場 點燃風華正茂 ???
    KingLeo丶76閱讀 323評論 0 0
  • 印象派。 命名源于《印象·日出》颠悬,原本是被挖苦矮燎,孰料卻成為19世紀一種重要的流派。 莫奈的《圣·拉扎爾火車站》 梵...
    木小玖閱讀 444評論 0 0
  • (本故事根據(jù)真實事件改編) 第九章:母與子的較量 “把昨天上午第一節(jié)課后發(fā)的試卷交上來赔癌!”晚自習的鈴聲響起诞外,我走進...
    木禾_520閱讀 847評論 20 27
  • 十年磨一劍,今朝問鼎時灾票。 智圓又行方峡谊,中考碩果出。 2017年刊苍,實驗中學中考再創(chuàng)輝煌既们。 近年來,實驗中學在智圓行方...
    史寶月閱讀 225評論 0 1