基礎(chǔ)知識(shí)點(diǎn)

js歷史

是基于事件和對(duì)象驅(qū)動(dòng)的解釋性,松散型的語言

解釋性:由瀏覽器解釋執(zhí)行

松散型:變量可以用來保存任何類型的數(shù)據(jù)

  • 布蘭登艾奇
  • 引入方式
    • 外鏈js
    • 內(nèi)嵌js
    • 重定向
  • 測(cè)試方式
    • alert()
    • console.log()
    • document.write()
  • 組成部分
    • ECMAscript ,基礎(chǔ)語法
    • BOM 瀏覽器對(duì)象模型
    • DOM 文檔對(duì)象模型
  • 作用
    • 寫網(wǎng)頁的動(dòng)態(tài)效果
    • 寫網(wǎng)頁的游戲
    • 使用cookie、sessicon
    • 實(shí)現(xiàn)交互
    • 發(fā)送表單form
    • 發(fā)送ajax
    • ......

ECMAscript

變量 值和址

就是計(jì)算機(jī)內(nèi)存里的一塊地址單元,為了存儲(chǔ)數(shù)據(jù)

  • 變量的定義
    • var let const
 var nub,nub1;
 nub=200;

 var nub=200,nub1='123';
 
 const PI=3.14;
 const arr = [1]
 arr.push('1')
  • 命名方式
    • 可以用數(shù)字、字母、下劃線、$ 構(gòu)成 ,不能以數(shù)字開頭
    • 不能是關(guān)鍵字或保留字
    • 可以用首字母大寫,或駝峰命名法來命名
    • 嚴(yán)格區(qū)分大小寫
    • 命名要有意義
  • 存儲(chǔ)
    • 存儲(chǔ)在棧區(qū)
    • 可以存儲(chǔ)任何的數(shù)據(jù)類型

數(shù)據(jù)類型

根據(jù)存儲(chǔ)位置不同來劃分

基礎(chǔ)數(shù)據(jù)類型的值一般存儲(chǔ)在棧區(qū) 傳值

引用數(shù)據(jù)類型的值一般存儲(chǔ)在堆區(qū),地址(引用) 存儲(chǔ)在棧區(qū) 傳址

基礎(chǔ)數(shù)據(jù)類型:

Number    string    boolean      null     undefind     symbol
基礎(chǔ)數(shù)據(jù)類型 name 描述
Number 數(shù)值類型 (0B/0b十六進(jìn)制 0o/0O八進(jìn)制 0x/0X二進(jìn)制) NaN(not a number)
string 字符串類型 "" '' `` 轉(zhuǎn)義序列 \n(換行符) \f(換頁符) \t(制表符) \r(回車符) \b(退格) \v(垂直制表符)
boolean 布爾類型 true false
null 空對(duì)象 占位符空
undefind 未定義
symbol 表示不重復(fù)的值

undefined

undefined == null //true

  • 一個(gè)變量,只聲明,不賦值,默認(rèn)值就是undefined
  • 一個(gè)對(duì)象,沒有某個(gè)屬性,這個(gè)屬性就是undefined
  • 數(shù)組某個(gè)位置沒有值,也是undefined
  • 函數(shù)的參數(shù)不傳值,默認(rèn)傳undefined
  • 函數(shù)返回值,默認(rèn)返回undefined
  • 引用類型
    • 數(shù)組 array
    • 函數(shù) function
    • 對(duì)象 object
typeof      //number   string     boolean     object    function

instanceof    檢測(cè)某一個(gè)對(duì)象是否是某一個(gè)構(gòu)造函數(shù)的實(shí)例   一般用于檢測(cè)引用類型    例如://Array

`` 模板字符串

var nub1 = 5
var nub2 = 40
console.log(`我們班${nub1 + nub2} 人,男生${nub2}人`)
console.log('我們班'+ (nub1 + nub2) + "人,男生" + nub2 + '人')

運(yùn)算符

運(yùn)算符 符號(hào) 描述
算數(shù)運(yùn)算符 + - * / % + 字符串相加表示連接,相加后變成字符串 % 不對(duì)小數(shù)取余數(shù) ++ -- 分先后
邏輯運(yùn)算符 && || ! '' 、 0 、 null、 undefined、 false、 NaN => false
比較運(yùn)算符 > < >= <= == != === !== 字符串進(jìn)行比較的時(shí)候,比較ascii碼值大小
一元運(yùn)算符 -- ++
三元運(yùn)算符 boolen_expression ? true_value : false-value 根本目的:賦值;滿足條件賦值
特殊運(yùn)算符 new / delete / typeof 創(chuàng)建對(duì)象 / 刪除對(duì)象的屬性 / 判斷類型
賦值運(yùn)算符 -= += *= /= %=
擴(kuò)展運(yùn)算符 ...
  • 算術(shù)運(yùn)算符
    • + 字符串相加表示連接,相加后變成字符串
    • % 不對(duì)小數(shù)取余數(shù)
    • ++ -- 分先后,+在前和在后不同,如果存在賦值的情況,+在前,先+,后賦值,反之相反。但是不論是在前還是在后,這個(gè)運(yùn)算的變量結(jié)果都會(huì)+1
  // Number()  不能轉(zhuǎn)換undefined   // NaN
  // 調(diào)用 Number()頂層函數(shù)進(jìn)行隱式轉(zhuǎn)換   
  console.log(true + false)   // 1
  console.log(null + 1)  // 1
  console.log(undefined + 1) // NaN
  • 邏輯運(yùn)算符 結(jié)果不一定是boolean類型值,只要運(yùn)算停留在什么位置,結(jié)果就是什么。 但是&& ,要求運(yùn)算兩邊都得滿足,|| 兩邊只要滿足一個(gè)就行。只要這個(gè)運(yùn)算能夠計(jì)算出結(jié)果,立即停止運(yùn)行。
* &&
* ||
* !    非(!)運(yùn)算結(jié)果一定是boolean類型值
  true && 1   // 1
  true || 1   // true
  null && false // null
  1 && 2    // 2
  
  !!1   //  boolean() 函數(shù)
  

  • 比較運(yùn)算符
    • 字符串進(jìn)行比較的時(shí)候,比較ascii碼值大小
    • undefined==null 為真
    • == === 全等需要比較類型
console.log('abc' == 'acb')    // false
console.log(true > 1)   // false
console.log(true == 1)   // true
console.log(true === 1)    // false   ===  檢測(cè)類型
  • 特殊運(yùn)算符 三元

    • 特殊運(yùn)算符

      • new 用來創(chuàng)建對(duì)象
      • delete 用來刪除對(duì)象的屬性
      • typeof 用來檢測(cè)基礎(chǔ)數(shù)據(jù)類型
    • 三元 (賦值——有條件的賦值)

      • var a=表達(dá)式? a:b 主要用來賦值

        var nub = 3 ? new Array() : new Object()
        console.log(nub)     // []
        
        var nub = document.body.scrollTop ? document.body : document.documentElement
        
    • instanceof 用來檢測(cè)某個(gè)對(duì)象是否是某個(gè)構(gòu)造函數(shù)的實(shí)例 比如用來檢測(cè)Array

ASCII 美國標(biāo)準(zhǔn)信息交換碼 EASCII 歐洲標(biāo)準(zhǔn) gb2312 國標(biāo) =>> gbk(微軟)(擴(kuò)展【繁體字、少數(shù)民族字】)

uncode(通用) 傳輸方式(utf-8)

0 48 a 97 A 65 上 回車

流程控制

當(dāng)滿足某個(gè)條件的時(shí)候,按照一定順序執(zhí)行的代碼

  • 順序結(jié)構(gòu)
  • 條件結(jié)構(gòu)
    • if

    • switch 通常用來判斷單個(gè)值 枚舉

      var nub = 1
      switch (nub) {
            case 1: 
                console.log(1)
                console.log(1)
                console.log(1)
                console.log(1)
             break;
            case 2:
                console.log(2)
                console.log(2)
                console.log(2)
             break;
            default : ;
      }              // 1 1 1 1
      

      ?

  • 循環(huán)結(jié)構(gòu)
    • for

    • while

      var arr = []
      while(arr.length < 20) {
        arr.push(1)       //隱式的步徑值
      }
      
    • do while

   ```js
  var arr = []
  do() {
    arr.push(1)       //隱式的步徑值
  } while(arr.length < 0)   // arr = [1]
   ```

?

數(shù)組

數(shù)組就是一系列有直接或者間接聯(lián)系的數(shù)據(jù)的集合

  • 聲明方式

    • var arr=[];
    • var arr=new Array();
  • 訪問方式和設(shè)置方式

    • arr[1]
    • arr[1]=123;
    • arr['1']
    • arr['length']
    • arr.length
  • 數(shù)組遍歷

    • for
    • foreach
    • for in
  • 二維數(shù)組

    一維數(shù)組的值都是數(shù)組的時(shí)候

    循環(huán)遍歷 for for

var arr = ['a']
console.log(arr['length'])
console.log(arr.length)

// 數(shù)據(jù)的length屬性很有特點(diǎn)——它不是只讀的。可以通過設(shè)置這個(gè)屬性,從數(shù)組的末尾移除項(xiàng)或向數(shù)組中添加新項(xiàng)

//js可以使用方括號(hào)表示法來訪問對(duì)象的屬性。
//在使用方括號(hào)語法時(shí),應(yīng)該將要訪問的屬性以 【字符串的形式】 放在方括號(hào)中

//使用方括號(hào)語法的主要優(yōu)點(diǎn)是可以通過變量來訪問屬性                  

兩個(gè)數(shù)組鏈接
return [...arr1,...arr2]

函數(shù)

將實(shí)現(xiàn)某一特定功能的代碼塊,封裝起來,以便重復(fù)使用

  • 函數(shù)的定義

    • function // 關(guān)鍵字定義function的方式
    • var fun=function(){} 字面量(匿名函數(shù)賦給變量)
    • var fun=new Function(){} 不常用
  • 函數(shù)的調(diào)用 (一個(gè)函數(shù)如果不調(diào)用,那么永遠(yuǎn)也不會(huì)執(zhí)行)

    • 函數(shù)名字或者是變量名字() fun()
    • 匿名函數(shù)的自運(yùn)行 (function(){})()
  • 函數(shù)的參數(shù)

    函數(shù)的參數(shù)相當(dāng)于一個(gè)局部變量,可以接受任何類型的值,不論是引用數(shù)據(jù)類型還是基礎(chǔ)數(shù)據(jù)類型

    • 形式參數(shù)和實(shí)際參數(shù) 函數(shù)在定義時(shí)候的參數(shù),函數(shù)在運(yùn)行時(shí)的參數(shù)
    • 形式參數(shù)和實(shí)際參數(shù)的個(gè)數(shù)可以不相同,如果一個(gè)形式參數(shù)沒有被傳參,默認(rèn)傳遞undefined,如果一個(gè)實(shí)際參數(shù),沒有相應(yīng)的形式參數(shù)接收 ,我們可以使用arguments ,會(huì)默認(rèn)的接受所有傳遞的實(shí)際參數(shù)。
    • 函數(shù)的形式參數(shù)可以接受任何類型的數(shù)據(jù),不論是引用類型還是基礎(chǔ)數(shù)據(jù)類型
    • 函數(shù)的形式參數(shù)其實(shí)相當(dāng)于定義的局部變量
    • 函數(shù)的參數(shù)就是封裝的接口
function fun() {
  consloe.log(arguments[0])  //
}
var nub1 = 200
var nub2 = 300
fun(nub1, nub2)
    function fun(nub1, nub2 = '123') {
      console.log(nub2)  //null
    }
    var nub1 = 200
    var nub2 = 300
    fun(nub1, null)

    function fun(nub1, nub2 = '123') {
      console.log(nub2)  //'123'
    }
    var nub1 = 200
    var nub2 = 300
    fun(nub1, undifined)
  • 函數(shù)的返回值
    • 任何一個(gè)函數(shù),在運(yùn)行結(jié)束后,都會(huì)返回一個(gè)值,默認(rèn)是undefined
    • 函數(shù)只能有一個(gè)返回值,但是可以有多條返回語句
    • 函數(shù)一旦返回,立即停止運(yùn)行
    • fun() 這是一個(gè)表達(dá)式,表達(dá)式的值是函數(shù)的返回值
    • 函數(shù)什么時(shí)候需要返回?當(dāng)我們需要用到內(nèi)部的局部變量的時(shí)候,我們可以將這個(gè)變量的值返回、或者終止函數(shù)運(yùn)行。
var sum=function(a,b){
    var he=a+b;
    return he;
}
var num=sum(1,2); 
console.log(num)   //3
  • 函數(shù)的作用域和作用域鏈

作用域指的是變量或者是函數(shù)在某個(gè)范圍內(nèi)有意義。

當(dāng)一個(gè)函數(shù)嵌套另外一個(gè)函數(shù),作用域發(fā)生嵌套,就會(huì)形成作用域鏈 。
在一個(gè)函數(shù)運(yùn)行時(shí)候,會(huì)自動(dòng)的創(chuàng)建一個(gè)集合,用來保存可見范圍內(nèi)所有的變量或者是對(duì)象。這個(gè)集合就是作用域鏈。

作用域 環(huán)境 描述
全局環(huán)境 window 定義在全局環(huán)境中變量、函數(shù),稱為全局變量、全局函數(shù)
局部環(huán)境 函數(shù) 定義在局部環(huán)境中的變量、函數(shù),稱為局部變量、局部函數(shù)
塊級(jí)作用域
  • 環(huán)境
    • 宿主環(huán)境 (瀏覽器)
    • 運(yùn)行環(huán)境
      • 全局環(huán)境 window 全局變量
      • 局部環(huán)境 函數(shù)環(huán)境 局部變量
      • 塊級(jí)作用域
  • 全局變量 擁有全局的作用域 在任何位置都可以訪問到 在window里面都有意義
  • 局部變量 擁有局部的作用域,只能在當(dāng)前環(huán)境中訪問 只在當(dāng)前的函數(shù)環(huán)境中有意義
var nub=200;
function fun(){
    var nub=300;
    console.log();
}
fun();
console.log(nub);
  • 預(yù)解析

在程序開始運(yùn)行之前,js會(huì)將以var 聲明的變量和以function關(guān)鍵字聲明的函數(shù),提前解析到相應(yīng)的環(huán)境中。

預(yù)解析是分塊解析的,但是所有的script標(biāo)簽對(duì)又是一個(gè)整體,已經(jīng)加載的script里面的內(nèi)容,可以在后面的script里面訪問

console.log(nub);
var nub=200;
console.log(nub);
  • javascript 垃圾處理

    找出那些不再使用的變量,然后釋放其占用的內(nèi)存。為此,垃圾收集器會(huì)按照固定的時(shí)間間隔(或代碼執(zhí)行中預(yù)定的收集時(shí)間),周期性地執(zhí)行這一操作。

    • 當(dāng)函數(shù)運(yùn)行完畢之后,內(nèi)部的局部變量會(huì)立即被清除
    • 當(dāng)一個(gè)對(duì)象,不再被引用的時(shí)候,會(huì)在某一個(gè)時(shí)刻被刪除
    • 垃圾的收集方式:

    標(biāo)記清除:(常見)

    垃圾收集器在運(yùn)行的時(shí)候會(huì)給存儲(chǔ)在內(nèi)存中的所有變量都加上標(biāo)記(當(dāng)然,可以使用任何標(biāo)記方式)。然后,它會(huì)去掉環(huán)境中的變量以及被環(huán)境中的變量引用的變量的標(biāo)記。而在此之后再被加上標(biāo)記的變量將被視為準(zhǔn)備刪除的變量,原因是環(huán)境中的變量已經(jīng)無法訪問到這些變量了。最后,垃圾收集器完成內(nèi)存清除工作,銷毀那些帶標(biāo)記的值并回收它們所占用的空間

    引用計(jì)數(shù):(不常見)

    跟蹤記錄每個(gè)值被引用的次數(shù)。當(dāng)聲明一個(gè)變量并將一個(gè)引用類型值賦給該變量時(shí),則這個(gè)值的引用次數(shù)就是1。如果同一個(gè)值又被賦給另一個(gè)變量,則該值的引用次數(shù)加1。相反,如果包含這個(gè)值引用的變量又取得另外一個(gè)值,則這個(gè)值的引用次數(shù)減1。當(dāng)這個(gè)值的引用次數(shù)變成0時(shí),則說明沒有辦法再訪問這個(gè)值了,因而就可以將其占用的內(nèi)存空間回收回來。這樣,當(dāng)垃圾收集器下次再運(yùn)行時(shí),他就會(huì)釋放那些引用次數(shù)為0的值所占用的內(nèi)存

  • 閉包

當(dāng)一個(gè)函數(shù)嵌套另外一個(gè)函數(shù),在內(nèi)部函數(shù)中用到了外部函數(shù)的局部變量,在函數(shù)外部去訪問內(nèi)部函數(shù)的時(shí)候,就形成了閉包

function aa(){
    var nub=200;
    function bb(){
         console.log(nub);
    }
    return bb;
}
var fun=aa();
  fun()  //  200 

// 按照垃圾處理,aa運(yùn)行結(jié)束的時(shí)候,內(nèi)部的200應(yīng)該是被清除。但是這是時(shí)候,將bb函數(shù)返回,在外部調(diào)用的時(shí)候,會(huì)用到nub這個(gè)局部變量,js會(huì)將這個(gè)變量保留下來。
  
  • 匿名函數(shù)自運(yùn)行
(function () {
    alert(1);
})()
  • 回調(diào)函數(shù)

當(dāng)函數(shù)的參數(shù)傳遞是函數(shù)的時(shí)候,這個(gè)函數(shù)就是回調(diào)函數(shù) //當(dāng)一個(gè)函數(shù)作為另一個(gè)函數(shù)參數(shù)的時(shí)候

function fun(a, b, fn) {
    fn(a, b)
}
fun(1, 3, function () {
    console.log(a * b)
})      // 3
  • 遞歸函數(shù)

當(dāng)一個(gè)函數(shù)自己調(diào)用自己的時(shí)候,就形成了遞歸

// 階乘  5!  n!
function jie(n) {
  if (n == 0) {
    return = 1
  }
  return n * jie(n - 1)
}

// 費(fèi)波那契  1 2 3 5 8 13 ... n
function fei() {
  if (n == 1) {
    return 1
  }
  if (n == 2){
    return 2
  }
  return fei(n - 1) + fei(n - 2)
}
// 深拷貝和淺拷貝
// var arr=[[1,[]],[1,2],["a","b"]]
  • 箭頭函數(shù)

    var arr = []
    var result = arr.map (value => value + 'new')
    
  • 內(nèi)置頂層函數(shù)

Nubmer() String() Boolean() parseInt() parsefloat()

// 做算術(shù)運(yùn)算隱式調(diào)用Number函數(shù)
console.log(1 - true)  //0
console.log(1 - undefined)  //NaN
console.log(1 - null)   //1


// 做比較運(yùn)算隱式調(diào)用Number函數(shù)
console.log(1 > true)  //false
console.log(null == undefined) //true     特殊情況
console.log(null == false) //false      特殊情況

// 做布爾運(yùn)算隱式調(diào)用Boolean函數(shù)

對(duì)象

人們研究的一切事物都可以稱之為對(duì)象

類和對(duì)象

將一些具有某些特性的對(duì)象的特征抽象起來就形成類
類也可以作為對(duì)象 的判別,也可以用來創(chuàng)建對(duì)象

類是對(duì)象的抽象 對(duì)象是類的實(shí)例化

  • 對(duì)象的創(chuàng)建

    • var obj={}

      //以json格式去創(chuàng)建對(duì)象
      var obj = {
          name: 'lisi',
          age: 23,
          fun: function () {
              alert(1)
          }
      }
      obj.weight = '70kg'
      var str = 'name'
      console.log(obj)
      
    • var obj=new 構(gòu)造函數(shù)()

      //構(gòu)造函數(shù)提供對(duì)象的初始化
      function Person(name, age) {
          this.name = name;
          this.age = age
      }
      
    • var obj= new Object()

  • new 發(fā)生了三件事情

1.創(chuàng)建一個(gè)空對(duì)象  obj
2.讓obj._proto_ == Person.prototype
3.Person.call(obj)
  • 對(duì)象的屬性和方法
    • 對(duì)象的一些特征,抽象之后,我們叫做屬性
    • 如果這個(gè)屬性的值是一個(gè)函數(shù),我們叫做方法
var obj={
    name:'lisi',
    age:123,
    fun:function(){
        
    }
}
console.log(obj.name)
console.log(obj['name'])
obj.index=1;
obj['index']=1;
obj.fun();

  • 構(gòu)造函數(shù)和普通函數(shù)區(qū)別
    • 構(gòu)造函數(shù)是為了提供對(duì)象的初始化
    • 構(gòu)造函數(shù)一般不用定義返回值
    • 構(gòu)造函數(shù)內(nèi)部會(huì)使用this
    • 都是new 構(gòu)造函數(shù)
  • 繼承
    主要是在實(shí)例化也是new 的時(shí)候
    obj.proto=構(gòu)造函數(shù).prototype
 var obj=new person();
 person.prototype={
     aa:function(){
     }
 }
 每個(gè)對(duì)象都有__prototype__ 屬性    每個(gè)函數(shù)都有prototype屬性   
  • 對(duì)象的分類

    • 宿主對(duì)象
    • 內(nèi)置對(duì)象
  • call()和apply()

    每個(gè)函數(shù)都有call()和apply()方法

  • this

    誰調(diào)用this就指向誰

數(shù)組方法

pop,push,reverse,shift,sort,splice,unshift 會(huì)改變?cè)瓟?shù)組

join,concat,indexOf,lastIndexOf,slice,toString 不會(huì)改變?cè)瓟?shù)組

map,filter,some,every,reduce,forEach這些迭代方法不會(huì)改變?cè)瓟?shù)組

數(shù)組方法 作用
push()* 在數(shù)組后端添加任意個(gè)項(xiàng)并返回新數(shù)組的長(zhǎng)度 var arr = [1,4,3] result = arr.push('a', 'b') console.log(arr, result) // [1, 4, 3, "a", "b"] 5
pop()* 移除數(shù)組中最后一項(xiàng)并返回該項(xiàng) var arr = [1,4,3] result = arr.pop() console.log(arr, result) // [1, 4] 3
shift()* 移除數(shù)組中第一個(gè)項(xiàng)并返回該項(xiàng) var arr = [1,4,3] result = arr.shift() console.log(arr, result) // [ 4, 3] 1
unshift()* 在數(shù)組前端添加任意個(gè)項(xiàng)并返回新數(shù)組的長(zhǎng)度 var arr = [1,4,3] result = arr.unshift('a', 'b') console.log(arr, result) // ["a", "b", 1, 4, 3] 5
join() 只接受一個(gè)參數(shù),即用作分隔符的字符串,然后返回包含所有數(shù)組項(xiàng)的字符串(默認(rèn),連接) var arr = [1,4,3] result = arr.join('&') || arr.join('') console.log(arr, result) // [1, 4, 3] "1&4&3" || "143"
concat() 先創(chuàng)建當(dāng)前數(shù)組的一個(gè)副本,然后將接收到的參數(shù)添加到副本末尾,最后返回新構(gòu)建的數(shù)組 var arr = [1,4,3] result = arr.concat('a', 'b') console.log(arr, result) // [1, 4, 3] [1, 4, 3, "a", "b"]
splice()* 從數(shù)組中刪除、添加項(xiàng)目,然后返回被刪除的項(xiàng)目arr.splice(index,num,item1,..,itemX) var arr = [1,4,3] result = arr.splice(1,1,'a','b') console.log(arr, result) // [1, "a", "b", 3] [4]
slice() 從已有的數(shù)組中返回選定的元素。接受一個(gè)或兩個(gè)參數(shù),即要起始位置和結(jié)束位置,不影響原數(shù)組 arr.slice(index1,index2) var arr = [1,4,3] result = arr.slice(0,2) console.log(arr, result) // [1, 4, 3] [1, 4]
sort()* 按升序排列數(shù)組項(xiàng) var arr = [1,4,3] result = arr.sort() console.log(arr, result) // [1, 3, 4] [1, 3, 4]
reverse()* 反轉(zhuǎn)數(shù)組項(xiàng)的順序 var arr = [1,4,3] result = arr.reverse() console.log(arr, result) // [3, 4, 1] [3, 4, 1]
includes() 判斷一個(gè)數(shù)組是否包含一個(gè)指定的值,如果是,酌情返回true或false var arr = [1,4,3] result = arr.includes(1) console.log(arr, result) // [1, 4, 3] true
find() findeIndex() filter() forEach() map() every() some()
undefined -1 [] undefined [undefined] false/true true/false
find() 返回?cái)?shù)組中滿足提供測(cè)試函數(shù)的第一個(gè)元素的值。否則返回undefined var arr = [1,3,5,7,8] var result = arr.find(value => value > 5) console.log(arr, result) // [1, 3, 5, 7, 8] 7
findIndex() 返回?cái)?shù)組中滿足提供測(cè)試函數(shù)的第一個(gè)元素的索引。否則返回-1 var arr = [1,3,5,7,8] var result = arr.findIndex(value => value > 6) console.log(arr, result) // [1, 3, 5, 7, 8] 3
filter() 對(duì)數(shù)組中的每一項(xiàng)運(yùn)行給定函數(shù),返回該函數(shù)會(huì)返回true的項(xiàng)組成的數(shù)組 var arr = [1,3,5,7,8] var result = arr.filter(value => value > 4) console.log(arr, result) // [1, 3, 5, 7, 8] [ 5 , 7, 8]
forEach() 對(duì)數(shù)組中的每一項(xiàng)運(yùn)行給定函數(shù),這個(gè)方法沒有返回值 主要用來遍歷數(shù)組 var arr = [1,3,5,7,8] var result = arr.forEach(value => value) console.log(arr, result) // [1, 3, 5, 7, 8] undefined
map() //映射 返回什么樣的值,形成什么樣的集合 var arr = [1,3,5,7,8] var result = arr.map(value => value*2) console.log(arr, result) // [1, 3, 5, 7, 8] [2, 6, 10, 14, 16]
some() 對(duì)數(shù)組中的每一項(xiàng)運(yùn)行給定函數(shù),如果該函數(shù)對(duì)任一項(xiàng)返回true,則返回true var arr = [1,3,5,7,8] var result = arr.some(value => value > 7) console.log(arr, result) // [1, 3, 5, 7, 8] true
every() 對(duì)數(shù)組中的每一項(xiàng)運(yùn)行給定函數(shù),如果該函數(shù)對(duì)每一項(xiàng)都返回true,則返回true var arr = [1,3,5,7,8] var result = arr.every(value => value > 3) console.log(arr, result) // [1, 3, 5, 7, 8] false

字符串

字符串方法 描述 例子
charAt() 以單字符字符串的形式返回給指定位置的那個(gè)字符 var str = 'hello world' var result = str.charAt(1) //e
charCodeAt() 返回給指定位置的那個(gè)字符的字符編碼 var str = 'hello world' var result = str.charCodeAt(1) //101
fromCharCode() 接收一個(gè)或多個(gè)字符編碼,然后將它們轉(zhuǎn)化成一個(gè)字符串 var result = String.fromCharCode(104, 101, 108, 108, 111) console.log(result) //hello
concat() 用于將一個(gè)或多個(gè)字符串拼接起來,返回拼接的到的新字符串,不改變?cè)鹊淖址闹? 可以接受任意多的參數(shù) var str = 'hello ' var result = str.concat('world',’!‘) console.log(str, result) //hello hello world!
replace() 接受兩個(gè)參數(shù),第一個(gè)參數(shù)可以是RegExp對(duì)象或者一個(gè)字符串,第二個(gè)參數(shù)可以是一個(gè)字符串或者一個(gè)函數(shù)。如果第一個(gè)參數(shù)是字符串,那么只會(huì)替換第一個(gè)子字符串 var arr = 'hello world' var brr = arr.replace('he','ll') console.log(arr, brr) //llllo world
split() 這個(gè)方法可以基于指定的分隔符將一個(gè)字符串分割成多個(gè)字符串,并將結(jié)果放在一個(gè)數(shù)組中 var str = 'red, blue, green' var result = str.split(',', 2) console.log(str, result) //red, blue, green ["red", " blue"]
substr() 返回一個(gè)字符串中從指定位置開始到指定字符數(shù)的字符 var str = "abcdefghij"; console.log("(1,2): " + str.substr(1,2)); // (1,2): bc console.log("(1): " + str.substr(1)); // (1): bcdefghij
substring() 返回一個(gè)字符串在開始索引到結(jié)束索引之間的一個(gè)子集, 或從開始索引直到字符串的末尾的一個(gè)子集 var anyString = "Mozilla"; console.log(anyString.substring(0,3)); console.log(anyString.substring(3,0)); // 輸出 "Moz"
indexOf() 從一個(gè)字符串中開頭向后搜索給定的子字符串,然后返回子字符串的位置(如果沒有找到該子字符串,則返回-1)可接受第二個(gè)參數(shù),表示從字符串的哪個(gè)位置開始向后搜索 var str = 'hello ' var result = str.indexOf('e') console.log(str, result) // hello 1
lastIndexOf() 從一個(gè)字符串中末尾向前搜索給定的子字符串,然后返回子字符串的位置(如果沒有找到該子字符串,則返回-1)可接受第二個(gè)參數(shù),表示從字符串的哪個(gè)位置開始向前搜索 var str = 'helloe ' var result = str.lastIndexOf('e') console.log(str, result) //helloe 5
slice() 提取字符串的一部分,并返回一新的字符串 var str1 = 'The morning is upon us.'; var str2 = str1.slice(4, -2); console.log(str2); // morning is upon u
startsWith() 用來判斷當(dāng)前字符串是否是以另外一個(gè)給定的子字符串“開頭”的,根據(jù)判斷結(jié)果返回 true 或 false。 var str = "To be, or not to be, that is the question."; alert(str.startsWith("To be")); // true alert(str.startsWith("not to be")); // false alert(str.startsWith("not to be", 10)); // true
endsWith() 用來判斷當(dāng)前字符串是否是以另外一個(gè)給定的子字符串“結(jié)尾”的,根據(jù)判斷結(jié)果返回 true 或 false var str = "To be, or not to be, that is the question."; alert( str.endsWith("question.") ); // true alert( str.endsWith("to be") ); // false alert( str.endsWith("to be", 19) ); // true alert( str.endsWith("To be", 5) ); // true
includes() includes() 方法用于判斷一個(gè)字符串是否包含在另一個(gè)字符串中,根據(jù)情況返回true或false var str = 'To be, or not to be, that is the question.'; console.log(str.includes('To be')); // true console.log(str.includes('To be', 1)); // false
toLowerCase() 字符串轉(zhuǎn)化為小寫 var str = 'Hello ' var result = str.toLowerCase() console.log(str, result) //Hello hello
toUpperCase() 字符串轉(zhuǎn)化為大寫 var str='Hello ' var result = str.toUpperCase() console.log(str, result) //Hello HELLO
trim 創(chuàng)建一個(gè)字符串的副本,刪除前置及后綴的所有空格,然后返回結(jié)果 var str = 'hello ' var result = str.trim() console.log(str, result) //hello hello
trimLeft 從一個(gè)字符串的左端移除空白字符。
trimRight 從一個(gè)字符串的右端移除空白字符

Math

Math方法 描述 例子
Math.abs(num) 返回num的絕對(duì)值 只處理第一個(gè)參數(shù) var result = Math.abs(-1) // 1
Math.max() 確定一組數(shù)值中的最大值,可以接受任意多的數(shù)值參數(shù) var result = Math.min(-1,3,2) //-1
Math.min() 確定一組數(shù)值中的最小值,可以接受任意多的數(shù)值參數(shù) var result = Math.min(-1,3,2) //3
Math.ceil() 執(zhí)行向上舍入,即它總是將數(shù)值向上舍入為最接近的整數(shù) 只處理第一個(gè)參數(shù) var result = Math.ceil(3.4) //4
Math.floor() 執(zhí)行向下舍入,即它總是將數(shù)值向下舍入為最接近的整數(shù) 只處理第一個(gè)參數(shù) var result = Math.floor(3.6) //3
Math.round() 執(zhí)行標(biāo)準(zhǔn)舍入,即它總是將數(shù)值四舍五入為最接近的整數(shù) 只處理第一個(gè)參數(shù) var result = Math.round(3.5) //4
Math.random() 返回大于0小于1的一個(gè)隨機(jī)數(shù) 不加參數(shù) 有參數(shù)沒用 var result = Math.random() //0.5254465176488599
Math.sin(x) 返回x的正弦值 var result = Math.sin(1) //0.8414709848078965
Math.cos(x) 返回x的余弦值 var result = Math.cos(1) 0.5403023058681398
Math.tan(x) 返回x的正切值 var result = Math.tan(1) 1.5574077246549023
Math.PI π的值 var result = Math.PI //3.141592653589793
Math.pow(num, power) 返回num的power次冪 var result = Math.pow(2,4) //16
Math.sqrt(num) 返回num的平方根 var result = Math.sqrt(4) //2

BOM

window屬性和方法

  • window.screen.width // 屏幕寬度
  • window.screen.height // 屏幕高度
  • alert()
  • prompt()
  • top
  • 時(shí)間函數(shù)
    • setInterval
    • clearInterval()
    • setTimeout
    • clearTimeout()

location

  • protocol
  • hostname
  • port
  • search
  • hash
  • pathname
http: / https:(http加強(qiáng)版,比較安全)
//超文本傳輸協(xié)議

// 協(xié)議    主機(jī)名+端口號(hào)/主機(jī)名   端口號(hào)   路徑 查詢字符串  錨地址
location.protocol     location.host/location.hostname      location.port       location.pathname location.search   location.hash
  • location.href

    location.href = ("http://baidu.com") //跳轉(zhuǎn)到某個(gè)頁面
    
  • location.reload(true)

    location.reload(true)  //重新加載 所有數(shù)據(jù)
    
  • location.assign()

    location.assign('http://baidu.com') //跳轉(zhuǎn)到某個(gè)頁面
    
  • location.replace()

    location.replace('http://baidu.com')  //不會(huì)留下歷史記錄
    

history

  • length
  • back() // 上一個(gè)頁面
  • forword() //下一個(gè)頁面
  • go(n) // go(0) 刷新
http: 
https:(http加強(qiáng)版,比較安全)
超文本傳輸協(xié)議
網(wǎng)絡(luò)傳輸協(xié)議

TCP/IP     7層協(xié)議      網(wǎng)絡(luò)層    
www.aebabs.com:80(端口號(hào))(path) index.html?查詢     域名   主機(jī)地址

DOM

文檔操作

獲取設(shè)置文檔信息

  • document.url
  • document.title

獲取寬高

如果一個(gè)塊元素如果不設(shè)置寬度,默認(rèn)寬度是它父元素的寬度,默認(rèn)高度是它內(nèi)容的高度

  • window.screen.width //屏幕寬度

  • window.screen.height //屏幕高度

  • document.documentElement.clientWidth //獲取瀏覽器窗口寬度

  • document.documentElement.clientHeight //獲取瀏覽器窗口高度

  • ele.offsetWidth // 實(shí)際寬高 不包括margin

  • offsetHeight

  • offsetLeft

  • offsetTop

    計(jì)算的是距離有定位屬性的上級(jí)元素的距離,如果沒有定位屬性的父元素,計(jì)算的是距離body的值

獲取元素

  • document.getElementById()
  • obj.getElementsByClassName()
  • obj.getElementsByTagName()
  • document.getElementsByName()
  • obj.querySelector()
  • obj.querySelectorAll()

對(duì)于元素內(nèi)容的操作

  • innerHTML
  • inenrText

對(duì)于元素屬性的操作

獲取屬性

  • 標(biāo)準(zhǔn)屬性 obj.src
  • getAttribute()

設(shè)置屬性

  • setAttribute(key, value)
  • 非標(biāo)準(zhǔn) get set
  • class obj.className
  • class obj.classList.add .remove .toggle

對(duì)于元素的樣式操作

  • 獲取

    • getComputedStyle(obj,null).屬性 / obj.currentStyle.樣式 IE
    • 行內(nèi)樣式 obj.style.屬性
  • 添加

    • obj.style.css屬性
    • obj.style.cssText
  • 通過類名或者是id名,屬性名字進(jìn)行設(shè)置

    ?

事件

事件冒泡

事件流

定義: 當(dāng)一個(gè)事件觸發(fā)的時(shí)候,當(dāng)前元素的父元素乃至整個(gè)頁面都會(huì)以一定的順序來響應(yīng)事件,響應(yīng)的順序叫做事件流

  • 冒泡型事件流

    從當(dāng)前元素開始向上級(jí)進(jìn)行冒泡觸發(fā)

  • 捕獲型事件流 (IE低版本沒有)

    從根元素開始向當(dāng)前元素進(jìn)行觸發(fā)

  • mouseenter mouseleave 事件沒有事件冒泡4

  • 阻止事件流

    • e.stopPropagation() || e.returnValue = false [萬惡的IE]
var par = document.querySelector('.par')
    var son = document.querySelector('.son')
    var body = document.querySelector('body')
    var html = document.querySelector('html')
    par.onclick = function () {
        console.log(1)
    }

    html.addEventListener('click', function () {
        console.log('html捕獲')
    }, true)
    body.addEventListener('click', function () {
        console.log('body捕獲')
    }, true)
    par.addEventListener('click', function () {
        console.log('par捕獲')
    }, true)
    son.addEventListener('click', function () {
        console.log('son捕獲')
    }, true)
    html.onclick = function () {
        console.log('html冒泡')
    }
    body.onclick = function () {
        console.log('body冒泡')
    }
    par.onclick = function () {
        console.log('par冒泡')
    }
    son.onclick = function (e) {
        // 阻止事件流
        if (e.stopPropagation) {
            e.stopPropagation()
            e.preventDefault()
        } else {
            e.cancelBubble = true;
            e.returnValue = false
        }
        console.log('son冒泡')
}
    //html捕獲  body捕獲   par捕獲   son捕獲  son冒泡

事件委托

利用事件冒泡,對(duì)以下幾種情況進(jìn)行處理

  1. 新添加進(jìn)來的元素,需要事件的時(shí)候
  2. 做事件優(yōu)化的時(shí)候
  3. 使用ajax的時(shí)候
<body>
    <button>按鈕</button>
    <div>1</div>
    <div>2</div>
    <div>3</div>
    <div>4</div>
    <div>5</div>
</body>
var btn = document.querySelector('button')
btn.onclick = function () {
    var div = document.createElement('div')
    div.innerHTML = "new"
    document.body.appendChild(div)
}
// document.body.onclick = function () {
//  alert(1)
// }

// 目標(biāo)事件源: 真正觸發(fā)事件的元素
document.body.onclick = function (e) {
    var obj = e.target
    // console.log(obj)
    //判斷
    if (obj.tagName == 'DIV') {
        obj.style.background = "blue"
    }
    // if (obj.nodeName == "DIV") {
    //  obj.style.background = "blue"
    // }
}

事件

文檔節(jié)點(diǎn)

html文檔中,所有的構(gòu)成部分都是節(jié)點(diǎn),每一個(gè)節(jié)點(diǎn)和節(jié)點(diǎn)之間的關(guān)系構(gòu)成了整個(gè)html文檔樹模型

文檔中的全部節(jié)點(diǎn) 類型 nodeName nodeType nodeValue
文檔節(jié)點(diǎn) document #document 9 null
文本節(jié)點(diǎn) 文本 #text 3 文本內(nèi)容
元素節(jié)點(diǎn) 標(biāo)簽 'DIV' //('大寫標(biāo)簽名') 1 null
注釋節(jié)點(diǎn) 注釋 #comment 8 注釋內(nèi)容
屬性節(jié)點(diǎn) 屬性 屬性名 2 屬性值

節(jié)點(diǎn)的操作

節(jié)點(diǎn)的創(chuàng)建

  • obj.createElement()

節(jié)點(diǎn)的增加

  • par.appendChild()
  • sib.insertBefore(newEle, oldEle)

節(jié)點(diǎn)的刪除

  • par.removeChild(son)

節(jié)點(diǎn)的復(fù)制

  • obj.cloneNode(true) //true決定子元素是否被克隆

節(jié)點(diǎn)的替代

  • par.replaceChild(newEle, oldEle)

獲取節(jié)點(diǎn)

獲取父元素

  • son.parentNode //獲取父節(jié)點(diǎn)
  • son.parentElement //獲取父節(jié)點(diǎn)

獲取父輩的子元素

  • childNodes; //獲取所有的節(jié)點(diǎn)
  • div.children; //獲取所有元素節(jié)點(diǎn)
  • par.firstChild; //獲取第一個(gè)節(jié)點(diǎn)
  • par.lastChild; //獲取最后一個(gè)節(jié)點(diǎn)
  • par.firstElementChild; //獲取第一個(gè)元素節(jié)點(diǎn)
  • par.lastElementChild; //獲取最后一個(gè)元素節(jié)點(diǎn)

獲取同輩的相近元素

  • sib.previousSibling; //前一個(gè)節(jié)點(diǎn)
  • sib.previousElementSibling; //前一個(gè)元素節(jié)點(diǎn)
  • sib.nextSibling; //下一個(gè)節(jié)點(diǎn)
  • sib.nextElementSibling; //下一個(gè)元素節(jié)點(diǎn)
  • insertAfter(newobj,oldobj)
    function insertAfter(newobj,oldobj){
        var next=oldobj.nextSibling;
        if(next){
            oldobj.parentNode.insertBefore(newobj,next)
        }else{
            oldobj.parentNode.appendChild(newobj);
        }
    }

Ajax

html: 超文本標(biāo)記語言

xhtml: 過渡 版本

xml: 可擴(kuò)展標(biāo)記語言

<clothes>
  <color>red</color>
</clothes>

版本控制工具

svn:集中式管理工具

git:分布式管理工具

git clone

git pull (多人協(xié)作)

將修改提交到暫存區(qū)

git add/*

將暫存區(qū)的文件更新到本地的倉庫

git commit -m '更新說明'

將本地倉庫和網(wǎng)絡(luò)倉庫進(jìn)行合并同步

git push

語義化

img email url number 表單的屬性

viedio

canvas 用js作圖的技術(shù),幫助我們快速渲染頁面,降低

websokit

拖拽

formdata

filereader

變量 let

塊級(jí)作用域

函數(shù)

賦值 結(jié)構(gòu)賦值

運(yùn)算符 擴(kuò)展運(yùn)算符

導(dǎo)入導(dǎo)出

獲取元素的方式

方法

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容