1个束、什么叫優(yōu)雅降級和漸進(jìn)增強(qiáng)觅赊?
優(yōu)雅降級:Web站點(diǎn)在所有新式瀏覽器中都能正常工作,如果用戶使用的是老式瀏覽器砰奕,則代碼會檢查以確認(rèn)它們是否能正常工作蛛芥。由于IE獨(dú)特的盒模型布局問題提鸟,針對不同版本的IE的hack實(shí)踐過優(yōu)雅降級了,為那些無法支持功能的瀏覽器增加候選方案,使之在舊式瀏覽器上以某種形式降級體驗(yàn)卻不至于完全失效仅淑。
?漸進(jìn)增強(qiáng):以恪守web標(biāo)準(zhǔn)的標(biāo)簽為基礎(chǔ)称勋,即在所有瀏覽器中可用。然后通過css樣式和必要的js來為更先進(jìn)的瀏覽器提供漸進(jìn)式的增強(qiáng)體驗(yàn)涯竟。構(gòu)建網(wǎng)站時(shí)分層開發(fā)赡鲜,主要關(guān)注網(wǎng)站內(nèi)容的易訪問性和用戶的模式空厌。
2、null和undefined的區(qū)別银酬?
null是一個(gè)表示"無"的對象嘲更,轉(zhuǎn)為數(shù)值時(shí)為0;undefined是一個(gè)表示"無"的原始值揩瞪,轉(zhuǎn)為數(shù)值時(shí)為NaN赋朦。
當(dāng)聲明的變量還未被初始化時(shí),變量的默認(rèn)值為undefined李破;null用來表示尚未存在的對象宠哄,常用來表示函數(shù)企圖返回一個(gè)不存在的對象。
undefined表示 “缺少值”嗤攻,就是此處應(yīng)該有一個(gè)值毛嫉,但是還沒有定義。典型用法是:
(1). 變量被聲明了妇菱,但沒有賦值時(shí)承粤,就等于 undefined
(2). 調(diào)用函數(shù)時(shí),應(yīng)該提供的參數(shù)沒有提供闯团,該參數(shù)等于 undefined
(3). 對象沒有賦值的屬性密任,該屬性的值為 undefined
(4). 函數(shù)沒有返回值時(shí),默認(rèn)返回 undefined(函數(shù)始終都會有一個(gè)返回值偷俭,即便不是顯式返回浪讳,也會隱式返回一個(gè)undefined。)
null表示“沒有對象”涌萤,即該處不應(yīng)該有值淹遵。典型用法是:
(1). 作為函數(shù)的參數(shù),表示該函數(shù)的參數(shù)不是對象
(2). 作為對象原型鏈的終點(diǎn)
3负溪、變量提升
當(dāng)js執(zhí)行過程進(jìn)入新的函數(shù)時(shí)透揣,這個(gè)函數(shù)內(nèi)被聲明的所有變量都會被移動(或者說提升)到函數(shù)最開始的地方。被提升的只有變量的聲明川抡,與之相關(guān)的賦值操作并不會被提升辐真。函數(shù)域始終優(yōu)于全局域。
4崖堤、js常用的“五六七”
(1)五種基本類型:number侍咱、string、boolean密幔、null楔脯、undefined
(2)六種返回格式:number、string胯甩、boolean昧廷、undefined堪嫂、object、function(typeof返回的值)
(3)七種數(shù)據(jù)類型:number木柬、string皆串、boolean、null眉枕、undefined愚战、array、object
5齐遵、獲取全局對象的方法
利用瀏覽器提供的全局對象window寂玲;在構(gòu)造器函數(shù)之外使用this關(guān)鍵字。不使用new操作符調(diào)用構(gòu)造函數(shù)的時(shí)候梗摇,this值指向的是全局對象拓哟,也就是說,當(dāng)我們聲明了一個(gè)構(gòu)造函數(shù)伶授,但沒有通過new來調(diào)用它的時(shí)候断序,代碼就會返回undefined。
6糜烹、prototype與Property的用法區(qū)別
prototype為類型(函數(shù))定義動態(tài)的屬性和方法违诗,而Property為類型定義“靜態(tài)”的屬性和方法。
例子一(JavaScript中允許添加行為的類型):可以在類型上使用proptotype來為類型添加行為疮蹦。這些行為只能在類型的實(shí)例上體現(xiàn)诸迟。 JS中允許的類型有Array, Boolean, Date, Enumerator, Error, Function, Number, Object, RegExp, String
例子二(prototype使用的限制):在實(shí)例上不能使用prototype,否則發(fā)生編譯錯(cuò)誤
例子三(如何定義類型上的靜態(tài)成員):用Property, 可以為類型定義“靜態(tài)”的屬性和方法愕乎,直接在類型上或?qū)嵗隙x即可
js對象的原型(prototype)自己本身也可以是對象阵苇,也可以有屬性(property),對于js對象的(prototype)的賦值操作跟普通對象屬性的創(chuàng)建 沒什么不同。
通過構(gòu)造器函數(shù)的prototype屬性來增加該構(gòu)造器所能提供的功能感论,如果不想將屬性或方法逐一添加到原型對象中绅项,那么,可以另外定義一個(gè)對象比肄,然后將其覆蓋到之前的原型上快耿。在向prototype屬性中添加完所有的方法和屬性之后,就可以直接用該構(gòu)造器新建對象