js學習筆記1(語言基礎)

1.基本概念

定義: 運行在客戶端的一種腳本語言,不需要進行編譯。
作用:

  • 表單的動態(tài)檢測
  • 服務器的開發(fā)(node.js)
  • 桌面程序(electron)
  • App (cordova)
  • 控制硬件 — 物聯(lián)網(Ruff)
  • 游戲開發(fā) — (cocos2d-js)

執(zhí)行:

  • 渲染引擎:用來解析HTML與CSS,俗稱內核,比如chrome的blink,和老版本的webkit。
  • JS引擎: 又稱js解析器,用來讀取網頁中的JavaScript代碼,對其處理后運行,比如chrome的V8。

組成

  • ECMAScript:JavaScript語法
  • DOM:頁面文檔對象模型
  • BOM:瀏覽器對象模型

2.變量聲明(var let const)

var變量:所有版本都可以使用。
  • 聲明作用域
var temp = "abc";   //1.全局變量
function fn(){
  var temp2 = "abc";  //2.局部變量
  temp3 = "abc";   //3.去掉var操作符,自動升級為全局變量(不推薦使用)
}
fn();
console.log(temp);   //正常輸出
console.log(temp2);   //報錯
console.log(temp3);   //正常輸出
  • 聲明提升
    使用var聲明的變量會自動提升道作用域的頂部,并且還可以重復聲明同一個變量
function  fun(){
        console.log(num) //undefined
        var num = '25';
    }
    fun();
//fun 等價于 fun2
    function  fun2(){
        var num ;
        console.log(num)
        num = '25';
    }
    fun2();
let變量:只能在ECMAScript6及以后的版本使用。

作用和var差不多,但是最主要的區(qū)別就是let聲明范圍的是塊作用域,而var聲明的的范圍是函數(shù)作用域。在同一個塊作用域中,只能聲明一次。

  let name ='five';
    let name ='five';// SyntaxError: Identifier 'name' has already been declared
   if (true){
       var num = '123';
       console.log(num) //123
       let count = '456';
       console.log(count); //456
   }
   console.log(num); //123
   console.log(count);  // ReferenceError: count is not defined
  • 其他區(qū)別:
    1.暫時性死區(qū):let申明的變量不會在作用域中被提升。
    2.全局聲明:let在全局作用域中聲明的變量不會成為window對象的屬性,(var聲明的對象會)
   var name = 'five';
    console.log(window.name);   //five

    let sex = 'nan';
    console.log(window.sex);    //undefined

3.條件聲明:在if條件下,在使用var聲明變量時,由于聲明會被提升,js引擎會將多余的聲明提升到作用域的頂端合并成為一個聲明,let的作用域是塊,所以不會檢查前面是否已經使用let聲明過同名變量,同時也就不可能再沒有聲明的情況下聲明它。
4.for循環(huán)中的let聲明:在使用let申明迭代變量的時候,js引擎會給每個迭代循環(huán)聲明一個新的迭代變量,每個setTimeout引用的都是不同的變量實例。

  for (var i = 0; i < 5; i++) {
        setTimeout(() => {
            console.log(i); //5 5 5 5 5 
        }, 0)
    }
    for (let j = 0; j < 5; j++) {
        setTimeout(() => {
            console.log(j);  // 0 1 2 3 4
        }, 0)
    }
const常量:只能在ECMAScript6及以后的版本使用。

const與let基本相同,區(qū)別就是在于:在聲明變量的是時候必須初始化值,且嘗試修改const聲明的變量會導致錯誤。(對象除外,即使用const聲明的對象,可以修改這個對象內部的屬性。)

    //不允許給常量賦值
    const age = 15;
    age = 22; //TypeError: Assignment to constant variable.

    //不允許重復賦值
    const name = 'a';
    const name = 'b'; //SyntaxError: Identifier 'name' has already been declared
    
    //聲明的作用域是塊
    const data = 'c';
    if (true) {
        const data = 'd';
    }
    console.log(data);  //c;

總結:1.不使用var,由let或者const代替,2.優(yōu)先使用const,let次之。

3.數(shù)據(jù)類型(基本數(shù)據(jù)類型:Undefined,Null,Boolean,Number,String,Symbol(符號,ECMAScript6新增)復雜數(shù)據(jù)類型:Object)

  • typeof操作符:是一個操作符,而不是函數(shù),所以可以不需要參數(shù)(但是可以使用)。
    1.“undefined” 表示值未定義
    2.“boolean” 表示值為布爾值
    3.“string” 表示值為字符串
    4.“object” 表示值為對象(而不是函數(shù))或者null
    5.“function” 表示值為函數(shù)
    6.“symbol” 表示值為符號
    例子:
 let message = 'hello word';
    console.log(typeof message);    //string
    console.log(typeof (message));  //string
    console.log(typeof 95);     //number
    let car = null;
    console.log(typeof car);     //object
  • Null類型:只有一個值,特殊值null,null表示一個空對象的指針,也就解釋了給typeof 傳一個null會返回“object”的原因。
  • Boolean類型:可以將其他所有的數(shù)據(jù)類型轉換成為Boolean值,通過調用特定的函數(shù)Boolean(),來實現(xiàn)。
    數(shù)量類型              轉換成為true的值          轉換成為false的值
    Boolean                   true                    false
    String                  非空字符串                 “”(空字符串)
    Number                   非零值                    0、NAN
    Object                   任意對象                   null
    Undefined                N/A(不存在)              undefined
  • NAN:特殊數(shù)值,表示本來要返回數(shù)值的操作失敗了(而不是拋出錯誤)
    1.數(shù)值轉換
    • Number():轉型函數(shù),可用于任何數(shù)據(jù)類型。
    • parseInt();通常需要獲取整數(shù)的時候可以使用該函數(shù)。字符串最前的空格會被忽略掉,沖第一個非空格字符串開始轉換,如果第一個字符不是數(shù)值字符、加號或者減號,parseInt()立即返回NaN。如果中間是字符串,就會自動省略字符后面所有的(包含字符串)。第二個參數(shù)最好不省略,直接寫10,代表十進制。
let num4 = Number('');  // 0
let num5 = Number('125ad2');// NaN

let num1  = parseInt('125d22',10);  //125--注意指定進制
let num2  = parseInt('',10);    //NaN
let num3  = parseInt('515.52.2',10);  //515
  • Symbal符號:符號是原始值,且符號實例是唯一,不可變的。符號的用途是確保對象使用唯一標識符,不會發(fā)生屬性沖突的危險。
  • == 與 ===:相等(==),值相等即為true;全等(===),不僅值要相等,對象類型也要一致。
    let flag = '55' == 55;  //true
    let flag2 = '55' === 55; //false  數(shù)據(jù)類型不相同
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容