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


前言

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我是折騰的比較痛苦的…花樣太多;繼續磨練~


注意!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。



 
粤ICP备14056181号  © 2014-2021 ITdaan.com