JS基礎(選擇器,變數型別,內建物件,作用域,JSON)

attacki發表於2019-02-16

JS DOM和BOM:

  ECMAScript標準 js基本語法

  • DOM 文件物件模型    DOM提供了方法操作DOM樹上的節點
  • BOM 瀏覽器物件模型   通過BOM可以 獲得螢幕解析度 控制瀏覽器跳轉 彈出框
  • BOM中的頂級物件就是window,DOM中的頂級物件是document。document是window的一個子物件。
    window.onload(){}
    setInterval()  clearInterval()
    setTimeout()  clearTimeout()
  • Location 物件
    包含的屬性有 hash(位址列#後的內容)、href(地址)、protocol(協議)、port(埠)、
    host(主機和埠號)、hostname(主機名字)、pathname(路徑名字)、search(搜尋的內容:獲取的?後的內容)
    location.assign() //和location.href一樣的操作
    location.replace() //替換的地址,沒有歷史記錄
    location.reload() //頁面重新載入
  • History 物件
    historty.forward()  //前進
    history.back()    //後退
    history.go()     //正數就是前進,負數就是後退
  • DOM物件:
    document.getElementById(`div`);     //返回一個ID屬性為‘div’的物件
    document.getElementByTagName(`div`);   //返回由所有div標籤的組成的陣列
    document.getElementByClassName(`div`);  //返回所有含有類名為‘div’的元素陣列
    document.getElementByName(`div`);     //返回含有屬性名為‘div’的元素陣列
    document.querySelector("a[targe]");    //返回第一個含有target屬性的‘a’元素
    document.querySelectorAll(".example");  //返回是多個含有類名為example的元素的陣列

JS有五種基本資料型別:

  number / string / boolean / undefined / null    (可使用 typeof方法 來判斷基礎物件型別)

  • 引用型資料型別:
    function / object
    引用資料型別會開闢出堆記憶體,它們指向的是 記憶體地址。
    字串 之間用 `+` 會拼接字串,如果其他型別資料和字串拼接,會被轉換為字串,這其中涉及到變數的隱式轉換  

  

  • 型別轉換:

     數字型別轉換:parseInt() / parseFloat() / Number()
     *(總結:想要轉整數用parseInt(),想要轉小數用parseFloat(),想要轉數字:Number();更嚴格。)*
  • 其他型別轉換:

     .toString() / String() / Boolean()
     NaN 不是一個數字,或者不是數字與數字的計算就會得到 NaN  (isNaN()  判斷一個值是不是 NaN)
     ! 表示非,  !false == true  的結果為true  
  • 操作符:

     算數運算子:+  -  * / %
     一元運算子:++ -- 
     二元操作符:&& || 
     三元操作符: 條件?結果1 : 結果2
     複合運算子: +=  -=  *= /= %=
    
  • 流程控制:

     if(){  } else if(){  }else{  }
     switch(){  case  :    ;default:  ;  } 
     while(){  }
     do{  }while() 
     for( ; ; ){  }
     (break 用來取消後續迴圈,continue  用來取消本次迴圈)
     (switch中的條件判斷 使用的是嚴格模式的全等於)
  • JS內建物件:

     例項方法:通過new的方式建立的物件(例項物件)來呼叫的方法
     靜態方法:直接通過建構函式呼叫的方法
    • Array 建立方式有兩種:
      var a =[];        //直接通過字面量建立
      var a = new Array()   //通過建構函式進行建立
    • Array物件的靜態方法:
      Array.isArray(物件)  //判斷這個物件是不是陣列
    • Array物件的例項方法:
      .concat(陣列,陣列,..) //組合一個新陣列
      .every(函式) //返回布林值,函式作為引數使用,函式中有三個引數,分別是元素的值,索引值,原來的陣列(沒用)
             //陣列中的每個元素都符合條件,才返回true
      .filter(函式);   //陣列中複合條件的元素,組成新陣列
      .map(函式);    //每個元素都執行這個函式,把執行後的結果重新放在一個新的陣列中
      .forEach(函式)   //遍歷陣列用
      .push(值);     //把值追加到最後了,返回值是追加資料後的陣列長度
      .pop();       //刪除最後一個元素,返回值就是刪除的這個值
      .shift();     //刪除第一個元素,返回值就是刪除的這個值
      .unshift();    //向第一個元素前插入新元素,返回值是插入後的長度
      .indexOf(元素值); //返回的是索引,沒有則是-1
      .join("字串"); //返回的是一個字串
      .reverse();    //反轉陣列
      .sort();      //排序
      .slice(開始,結束); //把擷取的陣列的值放在一個新的陣列中,但是不包含結束的索引對應的元素值
      .splice(開始,要刪的個數,替換的值); //一般是用於刪除陣列中的元素,或者是替換元素,或者是插入元素
  • Math 物件 :

    • Math物件的靜態方法:
      Math.PI —π—
      Math.sqrt() —取平方根—
      Math.pow(a,b) —a的b次方—
      Math.E —自然常數—
      Math.abs —絕對值—
      Math.ceil() —向下取整—
      Math.floor —向上取整—
      Math.Max() —取最大值—
      Math.Min() —取最小值—
      Math.random() —取0-1之間隨機值(不包括1)—
  • Date 物件

    • Date物件的靜態方法:
      Date.now()          //獲取當前時間
    • Date物件的例項方法:
      .getFullYear()       //獲取年份
      .getMonth()        //獲取月份從0開始
      .getDate()         //獲取日
      .getHours()       //獲取小時
      .getMinutes()       //獲取分鐘
      .getSeconds()       //獲取秒數
      .getDay()        //獲取星期數
      .toLocaleDateString()   //”2019/1/25″
      .toLocaleTimeString()  //”下午2:20:26″
      .valueOf()        //1548397226024
      .toString()        //”Fri Jan 25 2019 14:20:26 GMT+0800 (中國標準時間)”
  • String 物件
    字串可以看作是由很多字元組成的陣列,字串有不可變的特性,字串的值之所以看起來是改變的,那是因為指向改變了,並不是真的值改變了。

    • 字串的常用屬性:
      .length 字串長度
      .charAt(索引)             //返回值是指定索引位置的字串,超出索引,結果是空字串
      .concat(字串1,字串2,...);     //返回的是拼接之後的新的字串
      .indexOf(要找的字串,開始的索引值);  //返回的是這個字串的索引值,沒找到則返回-1
      .lastIndexOf(要找的字串);      //從後向前找,但是索引仍然是從左向右的方式,找不到則返回-1
      .replace("原來的字串","新的字串");//用來替換字串的
      .slice(5,10);  //從索引5的位置開始提取,到索引為10的前一個結束,沒有10,並返回這個提取後的字串
      .split("字串",切割後留下的個數);   //切割字串
      .substr(開始的位置,個數);       //返回的是擷取後的新的字串
      .substring(開始的索引,結束的索引)   //返回擷取後的字串,不包含結束的索引的字串
      .toLowerCase();           //轉小寫
      .toLocaleUpperCase() 轉大寫
      .toUpperCase();           //轉大寫
      .trim();              //幹掉字串兩端的空格

作用域:

  • 分為全域性作用域和區域性作用域,根據所在的作用域不同,變數又分為全域性變數和區域性變數。此外,還有塊級作用域,被`{ }`包裹就可以看成一個塊,其實的變數定義,使用var 定義可以被外部使用, 使用 const、let 不可以被外部使用。
  • 區域性變數在函式作用域銷燬時,就會被釋放,而全域性變數一旦被建立,就不會被釋放,除非頁面關閉(但是隱式全域性變數可以被銷燬,沒有使用var宣告的全域性變數)。
  • 在所有作用域建立的時候,js引擎會有一個處理,預解釋,它所做的事,就是提前把所有的變數宣告瞭,所有的函式宣告並定義了(所以你可以在定義函式之前來呼叫這個函式)。

    • 預解釋中的變數提升,只會提升到當前作用域的最前面,而不是其他作用域。
    • 預解析會分段(多對的script標籤中函式重名,預解析的時候不會衝突)。

JSON物件:

一組無序屬性的集合的鍵值對,屬性的值可以是任意型別,這就是物件。JSON也是一個物件,資料都是成對的,一般json格式的資料無論是鍵還是值都是用雙引號括起來的。

JSON物件擁有兩個方法,parseInt() (將字串轉換為JSON物件)和 stringify() (將JSON物件轉換為字串),這兩個一般用於 資料儲存或者與後臺互動。

  • 遍歷物件:
for(var key in json ){
    console.log(key +`===========` + json[key]);
}

相關文章