1. 程式人生 > >javascript跳躍式前進(1) - 基本概念

javascript跳躍式前進(1) - 基本概念

else 依次 次循環 下一步 spl 減少 title bre args

前言

javascript 是弱類型語言,比較接近python和perl這類,不如java和c那樣嚴格.所以寫慣了強類型語言的小夥伴看到有些另類的寫法也相當正常;

有些東東不精講..以後單獨脫離出來細講;


要點提取:

語法

  1. 區分大寫和小寫[非常重要哦,比方True和False就不是布爾值了,而是標示符]
  2. 和強類型基本大同小異,以強類型的命名風格基本沒什麽錯誤;推薦駝峰大寫和小寫
  3. 凝視有單行和多行凝視
  4. 嚴格模式,速度運行是最快的;可是相當多的東西給限制了
  5. 語句以分號結尾,支持多變量定義[逗號隔開],在語句多的時候,鏈式寫法速度有一定的速度提升;
  6. 關鍵字和保留字不同意來做變量名[詳細查表去吧..非常多]

數據類型

有這麽些數據類型: undefined(沒有定義) , Null(空值 – 特殊值) , Boolean(布爾值) , Number(數值) , String(字符串) , Object(對象,這個範圍挺廣,Array也屬於當中),symbol[ES6]

  • undefined : 變量未初始化的默認值
  • null : 是一個特殊的對象[空的對象引用]
  • boolean : 僅僅有true和false兩個值,值得註意的是0和1不一定代表false和true
  • Number : js沒有雙精度.僅僅有單精度..也不像強類型語言,依據是否有小數點且跟值來定義浮點還是整數 , 數值溢出為infinity,[NaN是一個特殊的數值]
  • String : 字符串
  • Object : 函數就是對象..在JS中函數在沒有返回值時默認返回的一個對象
  • Symbol : 這個是ES6才加入的,籠統點的說就是特殊的標示符,能夠用來差別某些實例或者對象;但不等同於lisp那樣的symbol(詳細我如今也沒深入~~~)

數據推斷

typeof , instanceof , hasOwnProperty, isPrototypeOf ,isArray

  • typeof : 會把大多類型歸為對象
  • instanceof : 用於推斷一個變量是否某個對象的實例
  • hasOwnProperty:是用來推斷一個對象是否有你給出名稱的屬性或對象。只是須要註意的是,此方法無法檢查該對象的原型鏈中是否具有該屬性,該屬性必須是對象本身的一個成員。
  • isPrototypeOf: 是用來推斷要檢查其原型鏈的對象是否存在於指定對象實例中,是則返回true,否則返回false。

  • isArray : ES5加入專門推斷是否為數組的

數據轉換

  • Number() : 能夠把同意轉換成數值的內容變成數值,比方字符串”123”[前置0會忽略],空字符串為0,除能轉為數字格式外的字符都會轉為NaN
  • paseInt() : 轉換字符串為整數,若是”111ee”僅僅會得到111,逐個字符遍歷的[若是非數字開頭則不會遍歷,遇到小數點也會停止]..
  • parseFloat() : 轉換字符串為浮點數,與上面那個相似
  • Boolean() : 轉為布爾值
  • String() : 把值轉為字符串,對象轉換會調用ValueOf(),與toString()效果基本一致

操作符

  • 一元操作符 : 包含加減乘除,前置減減加加和後置減減加加[前置先賦值生效再運行,後置運行後再運算]
  • 按位操作符 : 跟強類型語言一致,包含按位非(~)[值的反值,真假調換],按位與(&)[同為真才為真,其它為假],按位或(|)[存真即為真,同假才假]。按位異或(^)[同樣為假,不同為真]
  • 左移和右移: 左移為乘以2的次冪,右移除以2的次冪..無符號右移[正數不變,符號會由於左邊填充0變成一個相當大的正值]
  • 邏輯運算符 : 邏輯與(&&)[同為真才為真,其它為假] ,邏輯或(||)[有真即為真,同假才為假]
  • 相等操作符 : = [賦值,有復合操作符(能夠配合加減乘除求余等運算符 ,比如 a %= 3 , b *= 2;)] , == [若同意轉換成比較的類型,自己主動轉換匹配的類型比較] , === [強等,不轉換比較,同一時候比較類型和值]
  • 條件運算符[三目運算符] : (expression)?

    true : false ; 表達式真假來獲取相應的返回值

流控制語句

流控制語句,,大多編程語言都是大同小異~~~~

  • if語句

//推薦帶花括號,且花括號左邊緊貼表達式,能夠減少語法解析識別為錯誤的問題[解析器會自己主動給一些變量或者語句加入分號]

if(conditions) {
  ...
 }else if{
 ...
}else{
 ...
}
  • do-while語句
  //先運行do裏面的邏輯,再運行推斷表達式來確定下一步是否運行
  do{
   statement;
  }while(expression)
  • while語句
   //適合不知道應該循環多少次的,符合條件就無限運行,帶花括號是一個好習慣
   while(expression){
     statement;
  }
  • for語句
  //適合有限的循環
 for(initialization ; expression ; post-loop-expression){
    statement;
}
  • for-in語句
  //[ES5]適合來枚舉對象的屬性,遇到值為null或者undefined則會拋出錯誤
   for(proerty in expression){
        statement;
   }
  • forEach語句
 //[ES5] 適合遍歷數組,缺點:不能用break跳出循環和用return語句
 //傳統是用for來遍歷數組...見仁見智哈
var arr = [1,2,3,4];
arr.forEach(function(value){console.log(value)})

//結果集: 1,2,3,4,undefined
  • for-of語句
   //[ES6]這貨的出現,更加方便了數組的遍歷...
   //它避免了for-in的全部缺陷;
   //與forEach()不一樣,它支持break,continue和return。
   var arr = [1,2,3,4];  
   for(var i of arr){
       console.log(i)
   }

   //結果集: 1,2,3,4,undefined
  • label語句
    //跟goto好相似....一般配合break和continue語句;在多重嵌套循環的時候,能夠滿足條件直接跳出整個循環(標簽指定的位置)

   label : for(initialization ; expression ; post-loop-expression){
    statement;
  }
  • break和continue語句
    //break是跳出循環(中斷運行)
    //continue是跳出這次循環,進入下一次循環(僅僅是跳過符合條件的那一次循環,會繼續運行到結束)
  • switch語句
   //語法和高級編程語言大同小異,適合多重推斷(當然不嫌棄麻煩能夠用if..elseif...else)
   //小提示.若不是要運行多個表達式..記得每一個相應推斷條件後必須break結束;否則會依次往下尋找相應的值,其上的全部非包含break的都會運行;
   switch(expression){
        case value1 : statement; break;  
        case value2 : statement; break;  
        case value3 : statement; break;  
         ...
        default:statement;break;

 }

函數

  • 最簡單的聲明函數
   /*
    與大多編程語言一樣..函數運行到return語句就結束該函數了..無論後面還有木有表達式;

     由於JS是弱類型語言..  在ES6前,有些東西不得不模擬,比方匿名函數,閉包,"花樣式"繼承  
     有點值得一提的是,,JS木有重載(當前,以後就不曉得會不會添加)
     這裏不多說..到時候在新文章拖出來細細揣摩
*/
    function say(){
          console.log("Hello world!");
    }
    say();

    function say1(args1,args2){
          console.log("Hello world!");
    }
    say1();

總結

就我個人而言..原生JS我是折騰的比較痛苦的…花樣太多;繼續磨練~

javascript跳躍式前進(1) - 基本概念