javascript跳躍式前進(1) - 基本概念
阿新 • • 發佈:2017-07-16
else 依次 次循環 下一步 spl 減少 title bre args
前言
javascript 是弱類型語言,比較接近python和perl這類,不如java和c那樣嚴格.所以寫慣了強類型語言的小夥伴看到有些另類的寫法也相當正常;
有些東東不精講..以後單獨脫離出來細講;
要點提取:
語法
- 區分大寫和小寫[非常重要哦,比方True和False就不是布爾值了,而是標示符]
- 和強類型基本大同小異,以強類型的命名風格基本沒什麽錯誤;推薦駝峰大寫和小寫
- 凝視有單行和多行凝視
- 嚴格模式,速度運行是最快的;可是相當多的東西給限制了
- 語句以分號結尾,支持多變量定義[逗號隔開],在語句多的時候,鏈式寫法速度有一定的速度提升;
- 關鍵字和保留字不同意來做變量名[詳細查表去吧..非常多]
數據類型
有這麽些數據類型: 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) - 基本概念