JavaScript基礎(chǔ)

★★★★★

  1. call和apply的含義和區(qū)別
  • apply----應(yīng)用某一對象的一個方法,用另一個對象替換當(dāng)前對象
    B.apply(A, arguments);即A對象應(yīng)用B對象的方法。
  • call----調(diào)用一個對象的一個方法,以另一個對象替換當(dāng)前的對象
    B.call(A, args1,args2);即A對象調(diào)用B對象的方法。
  • 區(qū)別在于:傳參形式不同,apply只能接收兩個參數(shù),對象和一個數(shù)組,如果沒有提供這兩個參數(shù),thisObj=global對象,并且無法傳參;call可以接收多個參數(shù),使當(dāng)前this實例指針保持一致,或者在特殊情況下需要改變this指針。如果沒有提供thisObj參數(shù),那么 Global 對象被用作thisObj。
  1. javascript的數(shù)據(jù)類型 和內(nèi)存存儲
  • 基本數(shù)據(jù)類型和引用數(shù)據(jù)類型;number、string、boolean、NaN、undefined;對象數(shù)據(jù)類型和函數(shù)數(shù)據(jù)類型;
  • 基本類型就是保存在棧內(nèi)存中的簡單數(shù)據(jù)段,而引用類型指的是那些保存在堆內(nèi)存中的對象。
  • 基本類型數(shù)據(jù)在內(nèi)存中分別占有固定大小的空間,他們的值保存在??臻g,我們通過按值來訪問的;
    引用數(shù)據(jù)類型,值大小不固定,存放在堆內(nèi)存中,地址存放在棧內(nèi)存中,是按引用訪問的。


    內(nèi)存存儲
  1. 如何解決跨域?
    想要訪問其他網(wǎng)站上的js腳本,使用ajax會遇到跨域問題,跨域問題來源于同源策略,為了數(shù)據(jù)安全,ajax規(guī)定不能跨域訪問。
  • jsonp解決跨域
    首先<script>標(biāo)簽對是不受同源策略限制的,它可以載入任意地方的js文件,并不要求同源。
    jsonp理念就是,我和服務(wù)器端約定好一個函數(shù)名,當(dāng)我請求文件的時候,服務(wù)器返回一段JavaScript代碼,這段代碼調(diào)用了我們約定好的函數(shù),并將數(shù)據(jù)以參數(shù)的形式傳入。數(shù)據(jù)以json的格式返回
    你需要獲取數(shù)據(jù)的頁面 index.html:
    <script>
    function getWeather(data) {
    console.log(data);
    }
    </script>
    <script src="http://x.y.com/xx.js">
    ------------------

     [http://x.y.com/xx.js](http://x.y.com/xx.js) 文件內(nèi)容:
     getWeather({
          "城市": "北京", 
          "天氣": "大霧"
     });
    
  • 服務(wù)端代理解決跨域
    接收到客戶端請求以后,經(jīng)由本域服務(wù)器代理向目標(biāo)服務(wù)器發(fā)送請求,并將響應(yīng)數(shù)據(jù)返回客戶端。

  1. 同步和異步的區(qū)別?
    JavaScript將任務(wù)的執(zhí)行模式分為:同步(Synchronous)和異步(Asynchronous)。
    JavaScript語言的執(zhí)行環(huán)境是"單線程",就是指一次只能完成一個任務(wù)。如果有多個任務(wù)就必須排隊,前面一個任務(wù)完成,再執(zhí)行后面的任務(wù),一次類推。這便是"同步模式",程序的執(zhí)行順序和排列順序是一致的,同步的;"異步模式"則完全不同,每一個任務(wù)有一個或多個回調(diào)函數(shù),前一個任務(wù)結(jié)束后,不是執(zhí)行后一個任務(wù),而是執(zhí)行回調(diào)函數(shù),后一個任務(wù)則是不等待前一個任務(wù)結(jié)束就執(zhí)行,程序的執(zhí)行順序和排列順序不是一致的,異步的。鍋里正煲著湯,同時我在為下一道菜做著準(zhǔn)備。
  • 同步模式,任務(wù)耗時長,常見的瀏覽器無響應(yīng),卡住其他任務(wù)無法進(jìn)行
  • 異步模式,非常重要,在瀏覽器端,耗時很長的操作都應(yīng)該異步執(zhí)行,避免瀏覽器失去響應(yīng),最好的例子就是Ajax操作。在服務(wù)器端,"異步模式"甚至是唯一的模式,因為執(zhí)行環(huán)境是單線程的,如果允許同步執(zhí)行所有http請求,服務(wù)器性能會急劇下降,很快就會失去響應(yīng)。
  1. 字符串函數(shù)和數(shù)組函數(shù)
    (1) 字符串函數(shù)

    • str.charAt(下標(biāo))----返回指定位置的字符
      str.charCodeAt(下標(biāo))----返回指定位置字符的ASCII值
      str.fromCharCode(編碼1,編碼2,…)----接收一個或多個ASCII值,返回對應(yīng)的字符

    • 查找類型

      • str.indexOf(字符)----返回該字符在字符串中首次出現(xiàn)的位置,若字符不存在則返回-1;
      • str.lastIndexOf(字符)----返回該字符在字符串中最后一次出現(xiàn)的位置,若字符不存在則返回-1;
      • str.match(字符)----在字符串中查找字符,若存在則返回該字符,若不存在則返回null;
      • str.replace(被替換的字符串,新字符串)----返回替換后的新字符串,不會影響原來的字符串。
  • 截取類型

    • str.splice(start,end)----從指定的位置開始,到指定的位置結(jié)束,返回截取的字符串,不會影響原來的字符串。支持負(fù)數(shù),從后往前數(shù)。
    • str.substring(start,end)----不支持負(fù)數(shù)
    • str.substr(start,length)----從指定的位置開始,到指定的長度結(jié)束,不支持負(fù)數(shù)。
  • 轉(zhuǎn)換類型

    • str.split("分隔符",length)----將字符串按指定的分隔符轉(zhuǎn)換為數(shù)組
    • str.toLowerCase()/str.toUpperCase()----將字符串中英文字母轉(zhuǎn)換為小寫/大寫

(2) 數(shù)組函數(shù)

*  添加刪除類
  * arr.push()----在數(shù)組后面添加元素,返回數(shù)組的長度,會影響原數(shù)組
  * arr.pop()----在數(shù)組后面刪除一個元素,返回被刪除的元素,會影響
  * arr.unshift()----從前面添加元素,返回值為數(shù)組的長度,會影響原數(shù)組
  * arr.shift()----從數(shù)組的前面刪除一個元素,返回值為刪除的元素,會影響原數(shù)組
  * arr.splice(index,數(shù)量,添加的元素1,2,...)----萬能的添加刪除函數(shù),index表示要操作的元素位置下標(biāo),數(shù)量:0表示添加,返回值空白,0以外數(shù)字表示刪除的個數(shù),返回刪除的元素
  • 轉(zhuǎn)換類型
    • arr.join("分隔符")----返回值為新字符串,參數(shù)不傳時默認(rèn)為","
  • 數(shù)組連接
    • arr.concat(arr1,arr2)----不會影響原數(shù)組
  • 數(shù)組截取
    • arr.slice(start,end)
  • 數(shù)組排序
    • myarr.sort([callback])----callback省略時,默認(rèn)按ASCLL排序;升序降序
  1. 事件委派
  • 事件冒泡(event bubbling),即事件開始時由最具體的元素(文檔中嵌套層次最深的那個節(jié)點(diǎn))接收,然后逐級向上傳播到較為不具體的節(jié)點(diǎn)(文檔)。
  • 利用事件冒泡這一特性,指定一個事件處理程序,管理這一類的所有事件,在他的父元素或更高元素設(shè)置事件處理程序,將子元素事件委托給父元素事件。達(dá)到省時省力的效果。
  1. document load 和document ready的區(qū)別
  • ready----表示文檔結(jié)構(gòu)已經(jīng)加載完成(不包含圖片等非文字媒體文件)
    $(function(){})===$(document).ready(function(){})
  • load----表示頁面包含圖片等文件在內(nèi)的所有元素都加載完畢
    window.onload=function(){}
  1. 一個接口為ajax/api.jsp,請求方式為GET,有一個名為ulr的參數(shù)。值為當(dāng)前頁面的URl,正常情況下,返回到內(nèi)容是{result:true,mes:"success"},請用ajax組件,寫一段在正常瀏覽器可以運(yùn)行的代碼,將結(jié)果解析成json的對象格式

★★★★

  1. JavaScript的基本命名規(guī)范
  • 首先區(qū)分大小寫,命名可以以字母、字母下劃線或$開頭,不能使用關(guān)鍵字和保留字,習(xí)慣駝峰命名法,首字母大寫命名法。命名一定要有意義。中文也是合法的標(biāo)識符,可以用作變量名。
  1. JavaScript的原型和原型鏈,有什么特點(diǎn)?
  • 每個對象都會在其內(nèi)部初始化一個屬性,就是prototype屬性,當(dāng)我們訪問一個對象的屬性時,如果這個對象內(nèi)部不存在這個屬性,那么他就會去prototype中去找這個屬性,這個prototype又有自己的prototype,于是就這樣一直找下去(這樣一直找下去就是Object內(nèi)置對象),這就是原型鏈。
  • 特點(diǎn):JavaScript對象是通過引用來傳遞的,當(dāng)我們修改原型對象時,與之相關(guān)的對象也會繼承這一改變。
  1. JavaScript如何實現(xiàn)繼承?
  • 構(gòu)造繼承
  • 原型繼承
  • 實例繼承
  • 拷貝繼承
  • 原型prototype機(jī)制或applycall方法去實現(xiàn)較簡單,一般使用構(gòu)造函數(shù)與原型混合方式
  1. JavaScript作用域鏈
  • 全局作用域和局部作用域
  • 當(dāng)需要從局部函數(shù)查找某一屬性或方法時,如果當(dāng)前作用域沒有找到,就會上溯到上層作用域查找,直至全局函數(shù),這種組織形式就是作用域鏈。
  • 子對象會一級一級地向上尋找所有父對象的變量
  • 代碼優(yōu)化:盡量少使用全局變量,盡可能使用局部變量。
    //這個函數(shù)引用了兩次全局變量document,查找該變量必須遍歷整個作用域鏈,
    //直到最后在全局對象中才能找到。
    function changeColor(){
    var doc=document;
    doc.getElementById("btnChange").onclick=function(){
    doc.getElementById("targetCanvas").style.backgroundColor="red";
    };
    }
  1. null和undefined的區(qū)別
  • null對象----表示"沒有對象",此處不應(yīng)該有值。
    (1) 作為函數(shù)的參數(shù),表示該函數(shù)的參數(shù)不是對象。
    (2) 作為對象原型鏈的終點(diǎn)。
  • undefined----表示"缺少值",此處應(yīng)該有值但沒有定義
    (1)變量被聲明了,但沒有賦值時,就等于undefined。
    (2) 調(diào)用函數(shù)時,應(yīng)該提供的參數(shù)沒有提供,該參數(shù)等于undefined。
    (3)對象沒有賦值的屬性,該屬性的值為undefined。
    (4)函數(shù)沒有返回值時,默認(rèn)返回undefined。
  1. 什么是閉包,為什么使用它?
  • JavaScript的作用域,從外部無法調(diào)用函數(shù)內(nèi)的局部變量
  • 閉包就是能夠讀取其他函數(shù)內(nèi)部變量的函數(shù),由于在JavaScript語言中,只有函數(shù)內(nèi)部的子函數(shù)才能讀取局部變量,因此可以簡單的理解為:定義在一個函數(shù)內(nèi)部的函數(shù)。
  • 作用:可以從外部調(diào)用函數(shù)內(nèi)的局部變量;將這些變量的值始終保存在內(nèi)存中。
  1. new操作符究竟干了些什么?
    function New (f) {
    /1. 創(chuàng)建對象并設(shè)置原型鏈/
    var n = { 'proto': f.prototype };
    return function () {
    /2. 設(shè)置this指向/
    f.apply(n, arguments);
    /3. 返回函數(shù)/
    return n;
    };
    }
  2. 寫一個js函數(shù),將地址參數(shù)解析為一個對象
  3. 刪除數(shù)組中的重復(fù)元素
  4. 如何判斷某個對象是否是某個類的實例化?
  5. 添加事件的方式?
  6. IE和doms事件的區(qū)別
  7. DOM 節(jié)點(diǎn)的所有操作和方法
  8. 強(qiáng)轉(zhuǎn)和隱式類型轉(zhuǎn)化

★★★

  1. JavaScript創(chuàng)建對象的幾種方式
  • 字面量方式(json格式)
  • new關(guān)鍵字
  • 構(gòu)造函數(shù)function
  • 混合型創(chuàng)建 function+prototype+new
  1. 什么是window對象? 什么是document對象?
  • window對象----瀏覽器中一個打開的窗口對象,是一個頂層對象
    document對象----html文檔對象,可用來訪問頁面中的所有元素,是window對象的成員對象子對象
  1. ["a","b","c"].map(parseInt)的結(jié)果是什么?
  2. javascript 中的“use strict”是什么意思?使用它區(qū)別是什么?
  3. 求兩個正整數(shù)的最大公約數(shù)
  4. ”==”和“===”的不同
  5. json和jsonp有什么差異?
  6. ajax 和jsonp的區(qū)別
  7. j延遲加載的方式
  8. 如何用js實現(xiàn)類,成員,私有變量?
  9. eval的作用
  10. js的兼容性問題
  11. 繼承的順序
  12. 解釋jsonp的原理,以及為什么不是真正的ajax
  13. javascript的本地對象,內(nèi)置對象和宿主對象

★★

  1. document.write 和innerHTML的區(qū)別?
  2. 使用閉包的例子
  3. 什么是cookie隔離?
  4. 所有可以在瀏覽器保存數(shù)據(jù),然后下次訪問的方式
  1. 哪些操作會造成內(nèi)存泄露?
    內(nèi)存泄露可以定義為應(yīng)用程序不再需要的內(nèi)存,因為某種原因其不會返回到操作系統(tǒng)或可用內(nèi)存池。 會導(dǎo)致遲緩,崩潰,高延遲等應(yīng)用問題。
  2. 聲明變量忘記使用關(guān)鍵字var創(chuàng)建一個意外的全局變量
* 為了防止這些錯誤發(fā)生,添加'use strict'; 在您的JavaScript文件的開頭。 這使得能夠更嚴(yán)格地解析JavaScript以防止意外的全局變量。
  1. 被遺忘的事件函數(shù)或回調(diào)函數(shù)
  2. 脫離 DOM 的引用
  3. 閉包
  4. javascript的同源策略
  • 首先同源是指兩個url的協(xié)議,域名和端口相同
  • 同源策略是瀏覽器上為安全性考慮實施的安全策略,限制了來自不同源的"document"或腳本,對當(dāng)前"document"讀取或設(shè)置某些屬性。
  • 比如一個惡意網(wǎng)站的頁面通過iframe嵌入了銀行的登錄頁面(二者不同源),如果沒有同源限制,惡意網(wǎng)頁上的javascript腳本就可以在用戶登錄銀行的時候獲取用戶名和密碼。同源策略就是為了解決這類問題而出現(xiàn)的。
  • 在瀏覽器中,<script>、< img>、<iframe>、<link>等標(biāo)簽都可以加載跨域資源,而不受同源限制,但瀏覽器限制了JavaScript的權(quán)限使其不能讀、寫加載的內(nèi)容。
  • 另外同源策略只對網(wǎng)頁的HTML文檔做了限制,對加載的其他靜態(tài)資源如javascript、css、圖片等仍然認(rèn)為屬于同源。
  1. 本地對象,內(nèi)置對象,宿主對象
  • 本地對象----獨(dú)立于宿主環(huán)境的ECMAScript實現(xiàn)提供的對象需要實例化的對象都為本地對象
    Function Object Array Number String Boolean Date() 正則RegExp()
  • 內(nèi)置對象----由ECMAScript實現(xiàn)提供的、獨(dú)立于宿主環(huán)境的所有對象,在ECMAScript程序開始執(zhí)行時出現(xiàn)。global對象和math對象
  • 宿主對象----由ECMAScript實現(xiàn)的宿主環(huán)境提供的對象,即我們網(wǎng)頁的運(yùn)行環(huán)境(操作系統(tǒng)和瀏覽器),所有的BOM和DOM都是宿主對象。
  1. this 的情況
  • 在普通函數(shù)中,this指向的window對象
  • 在構(gòu)造函數(shù)中,this指向的是實例化的對象
  • 在方法中,this指向的是調(diào)用該方法的對象
  • 在事件中,this指向的是事件觸發(fā)的對象
  1. 下面哪種寫法會報錯?
    A: var a=();
    B: var a={};
    C: var a=[];
    D: var a=/ /;

  1. 如果你手動實現(xiàn)動畫,你認(rèn)為最小的時間間隔是多少?
  2. 十六進(jìn)制顏色轉(zhuǎn)化為rgb顏色
    var sRgb = "RGB(23, 245, 56)" , sHex = "#34538b";
    var sHexColor = sRgb.colorHex(); //rgb顏色轉(zhuǎn)換為十六進(jìn)制顏色
    var sRgbColor = sHex.colorRgb(); //十六進(jìn)制顏色轉(zhuǎn)換為rgb顏色
  3. 下面哪種寫法可以匹配一個正整數(shù)
    A: ^[1-9]\d1.$;
    B: ^[1-9]+$;
    C: ^[0-9]\d1.$;
    D: ^[1-9]\d+$;
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

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

  • 1.HTML DOM (Document Object Model) document.getElementByI...
    廖馬兒閱讀 1,450評論 0 17
  • 轉(zhuǎn)載請聲明出處 博客原文 隨手翻閱以前的學(xué)習(xí)筆記,順便整理一下放在這里,方便自己復(fù)習(xí),也希望你有也有幫助吧 第一課...
    前端進(jìn)階之旅閱讀 12,767評論 13 94
  • 語法基礎(chǔ) - 詞法 字符集 Unicode字符集, 區(qū)分大小寫 注釋 // /* */ 直接量 數(shù)字 小數(shù) 字符串...
    KeKeMars閱讀 907評論 1 11
  • JavaScript基礎(chǔ) JavaScript簡介JavaScript對象 JavaScript簡介 為什么使用j...
    廖少少閱讀 565評論 0 4
  • 這一篇主要看甲木日干和地支相配,在其他五行環(huán)境中,人的性格特征、價值取向等問題。如甲寅、甲辰、甲午、甲申、甲戌、甲...
    曙雀星河閱讀 59,877評論 0 44