1、什么叫優雅降級和漸進增強?
優雅降級:Web站點在所有新式瀏覽器中都能正常工作,如果用戶使用的是老式瀏覽器,則代碼會檢查以確認它們是否能正常工作。由于IE獨特的盒模型布局問題,針對不同版本的IE的hack實踐過優雅降級了,為那些無法支持功能的瀏覽器增加候選方案,使之在舊式瀏覽器上以某種形式降級體驗卻不至于完全失效。
?漸進增強:以恪守web標準的標簽為基礎,即在所有瀏覽器中可用。然后通過css樣式和必要的js來為更先進的瀏覽器提供漸進式的增強體驗。構建網站時分層開發,主要關注網站內容的易訪問性和用戶的模式。
2、null和undefined的區別?
null是一個表示"無"的對象,轉為數值時為0;undefined是一個表示"無"的原始值,轉為數值時為NaN。
當聲明的變量還未被初始化時,變量的默認值為undefined;null用來表示尚未存在的對象,常用來表示函數企圖返回一個不存在的對象。
undefined表示 “缺少值”,就是此處應該有一個值,但是還沒有定義。典型用法是:
(1). 變量被聲明了,但沒有賦值時,就等于 undefined
(2). 調用函數時,應該提供的參數沒有提供,該參數等于 undefined
(3). 對象沒有賦值的屬性,該屬性的值為 undefined
(4). 函數沒有返回值時,默認返回 undefined(函數始終都會有一個返回值,即便不是顯式返回,也會隱式返回一個undefined。)
null表示“沒有對象”,即該處不應該有值。典型用法是:
(1). 作為函數的參數,表示該函數的參數不是對象
(2). 作為對象原型鏈的終點
3、變量提升
當js執行過程進入新的函數時,這個函數內被聲明的所有變量都會被移動(或者說提升)到函數最開始的地方。被提升的只有變量的聲明,與之相關的賦值操作并不會被提升。函數域始終優于全局域。
4、js常用的“五六七”
(1)五種基本類型:number、string、boolean、null、undefined
(2)六種返回格式:number、string、boolean、undefined、object、function(typeof返回的值)
(3)七種數據類型:number、string、boolean、null、undefined、array、object
5、獲取全局對象的方法
利用瀏覽器提供的全局對象window;在構造器函數之外使用this關鍵字。不使用new操作符調用構造函數的時候,this值指向的是全局對象,也就是說,當我們聲明了一個構造函數,但沒有通過new來調用它的時候,代碼就會返回undefined。
6、prototype與Property的用法區別
prototype為類型(函數)定義動態的屬性和方法,而Property為類型定義“靜態”的屬性和方法。
例子一(JavaScript中允許添加行為的類型):可以在類型上使用proptotype來為類型添加行為。這些行為只能在類型的實例上體現。 JS中允許的類型有Array, Boolean, Date, Enumerator, Error, Function, Number, Object, RegExp, String
例子二(prototype使用的限制):在實例上不能使用prototype,否則發生編譯錯誤
例子三(如何定義類型上的靜態成員):用Property, 可以為類型定義“靜態”的屬性和方法,直接在類型上或實例上定義即可
js對象的原型(prototype)自己本身也可以是對象,也可以有屬性(property),對于js對象的(prototype)的賦值操作跟普通對象屬性的創建 沒什么不同。
通過構造器函數的prototype屬性來增加該構造器所能提供的功能,如果不想將屬性或方法逐一添加到原型對象中,那么,可以另外定義一個對象,然后將其覆蓋到之前的原型上。在向prototype屬性中添加完所有的方法和屬性之后,就可以直接用該構造器新建對象