Js中的基本概念

前言:剛畢業的應屆生,學習前端時間並不長,昨天參加面試,一輪筆試,兩輪技術面試。尤爲在技術面試的時候感受到本身基礎知識仍是搞的有些亂,也忽然明白到了一個紮實的Js基礎對於以後的路是有多重要。準備把Js高級程序設計的重點知識從頭梳理一遍。特此記錄一下本身學習的一些自認爲比較重要的筆記。看似最難走的路,可能倒是最快也是最穩的。

1.嚴格模式

是ECMAScript5引入的一個概念。目的是使Ecma3中的不肯定行爲獲得處理,一些不安全的行爲也會拋出錯誤。它的支持版本比較高,IE10+

2.標識符

就是函數、變量、屬性的名字。標識符不能用保留字和關鍵字,使用關鍵字會致使identitierExpected錯誤,保留字看特定引擎報錯

3.變量

Js變量是鬆散類型的,能夠用來保存任何類型的數據。

若是變量定義在函數中,那麼這個變量在函數退出後就會被銷燬。
e.g.前端

function test() {
        var msg = 'hi';
   }
   console.log(msg) // 報錯

檢查一個錯誤:
報錯message未定義,爲何呢?
答:由於沒執行啊面試

4.數據類型

ECMA中一共有5種簡單數據類型(基本數據類型)數據類型:undefined null boolean string number,1種複雜數據類型:Object安全

  • Null : 就記住他叫空對象指針就行,因此typeof 是 Object。在定義一個暫時不用的對象變量時候,最好將這個變量賦值爲null,體現出了它的概念特性,也區分了它和undefined的不一樣。
  • Boolean:if這種流控制語句,會自動將括號裏的內容進行Boolean()操做
  • Number: NAN 表示應該返回數值的操做最後沒有返回數值,好比說2/'i',2/0不是NAN,是Infinity。第二點:NAN與任何值都不相等, 包括NAN。有一個函數isNaN(),這個函數的具體思路爲:先看能不能轉化成數值(10,'10',Boolean),若是能則返回flase,不能的話返回true。理解number和parseInt的區別:parseInt('')是NAN,而Number是0;parseInt趕上非數字字符會中止,而Number直接NAN,好比小數點
  • String:數值,布爾值,對象,和字符串都有toString()方法。只有number下的toString方法有第二個參數,表示轉化成幾進制後的值,其實有個String()方法更好一些,若是是null返回null,若是是undefined返回undefined,若是不是這兩個將默認使用toString()方法;另一個小技巧,把某個值轉化爲字符串直接用+""就能夠了
  • Object:Object每一個實例都存在一些屬性和方法:constructor,hasOwnproperty,toString …

5.操做符

  • 一元操做符(++,--,+,-)ide

    1. 若是對於字符串進行操做,會返回NAN
    2. s1 = +s1 ->至關於把s1轉化成數值型(前提看s1以前是什麼類型,規則不一樣)
    3. s1 = -s1 ->至關於把s1轉化成數值的同時變成了負值
  • 位操做符函數

    1. 按位非(~)
      var num1 = 25;
      var num2 = ~num1
    2. 按位或(|)
    3. 按位與(&)
    4. 按位異或(^)
  • 邏輯操做符:邏輯操做符都是短路操做,若是第一個操做能決定結果,就不執行第二個操做
  • 加減法操做符性能

    • 注意如下問題:"a:"+1+2 //應該輸出a12而不是a3
    • var result1 = 5 - "true" //4
    • Var result2 = NaN -1 //NaN
    • Var result3 = 3 - "" // 3
    • Var result4 = 3 - "2" // 1
  • 關係操做符:學習

    • 若是在關係操做符比較中,有一個值是數值,那麼另外一個值也會被強制轉換成數值,如:設計

      • Var result = ‘23’ < 3 //true var result = ’23’ < ‘3’ //false
    • 任何操做數與NaN比較都是false指針

      • Var result1 = NaN < 3 //false
      • Var result2 = NaN >= 3 //false
  • 相等操做符code

    • ==和!=是先進行轉換再比較
    • ===和!==是不轉換直接進行比較
    • 因此因爲相等(== !=)存在數據類型的轉換問題,爲了保持代碼類型的嚴謹性最好用 ===,還有一個細節,若是用相等符號進行比較,雖然比較的過程當中可能會進行類型的轉換,但不影響最終的變量類型e.g:
    var strEg = '1';
    if(strEg == 1){
    console.log(typeof strEg)  // string
    }
    console.log(typeof strEg)  // string

6.語句

1.label,continue和break
break是當即退出當前層的循環,continue是從新開始下一層的循環,開始下一層的循環,例子

var num = 0;
for(var i=0;i<10;i++) {
        for(var j=0;j<10;j++) {
        if(i == 5 && j == 5) {
            break; //TODO:95
            // continue; //99
        }
       num ++
    }
}

label和continue,break連用,能夠起到在那層退出(break)或在那層強制執行下次循環(continute)做用,例如

var num = 0;
Outermost:
for(var i=0;i<10;i++) {
        for(var j=0;j<10;j++) {
        if(i == 5 && j == 5) {
            break Outermost; 
        }
       num ++ // 55
    }
}

var num = 0;
Outermost:
for(var i=0;i<10;i++) {
        for(var j=0;j<10;j++) {
        if(i == 5 && j == 5) {
            continue Outermost; 
        }
       num ++ // 95
    }
}

2.with語句
會致使性能降低,通常不用。爲何不能直接用對象代替呢?

3.switch語句

switch語句中的條件判斷是全等操做,沒有類型轉換的操做。

7.函數

1.Return:只能用於函數中,當即退出函數並返回值。不能用在if,for的代碼塊中。若是return的值爲空,則當即中止執行函數,並返回undefined
2.傳遞的參數和arguments並非同一個內存空間,只是他們的值是同步的,同時argument的長度是由執行時傳入的參數決定的,而不是定義時決定的。
3.沒有重載

這篇只是一些簡單的基礎知識點,以後會把這些細小知識點分別展開寫成文章
相關文章
相關標籤/搜索