? 時(shí)間過得可真是快啊,總是不經(jīng)意間敲打你一下,讓你知道居然已經(jīng)過了這么久了。現(xiàn)在臨近年末,仔細(xì)一想,居然已經(jīng)大學(xué)畢業(yè)小半年了,更過分的是參加工作居然已經(jīng)一年了??!一想到這一年前半年基本都是在學(xué)校忙著搞畢業(yè)設(shè)計(jì),畢業(yè)后就被派到成都去出差了,忙個(gè)半死。一年下來,除了感覺身體似乎變差,找到一個(gè)女朋友以外,就是驚嘆自己專業(yè)方面居然沒有一點(diǎn)進(jìn)步。于是最近久想繼續(xù)學(xué)習(xí)一下。至于為什么要從算法方面開始,一方面公司里的工作大多數(shù)是和JavaScript打交道,另一個(gè)方面是公司有一套自有框架,再學(xué)新框架暫時(shí)也用不到,還不如精進(jìn)現(xiàn)在已經(jīng)學(xué)到的,使用算法提高自己現(xiàn)在解決問題的效率,所以就準(zhǔn)備從算法入手,從JavaScript基礎(chǔ)開始再學(xué)習(xí)一遍。
-
JavaScript變量
? JavaScript變量類型有數(shù)字、字符(串)、布爾值、函數(shù)、對象、null、undefined、數(shù)組、日期和正則表達(dá)式。JavaScript類型雖然也很多,但是JavaScript不是一個(gè)強(qiáng)類型的語言,不同于Java、C、C++等使用不同的關(guān)鍵字聲明不同類型的變量,JavaScript只需使用var即可聲明各種類型的變量。一下為聲明各類型變量
var num = 1; // 1 num = 2; // 2 var name = `KuiSAhn`; // 3 var boo = true; // 4 var nullValue = null; // 5 var und; // 6? 以上六行聲明依次為數(shù)字,數(shù)字,字符串,布爾,null,undefined。
變量根據(jù)數(shù)據(jù)類型又可分為兩大類:
- 原始數(shù)據(jù)類型:null、undefined、數(shù)字、字符串、布爾、Symbol
- 派生數(shù)據(jù)類型:JavaScript對象----數(shù)組、函數(shù)和正則表達(dá)式2
-
JavaScript變量作用域
? JavaScript變量作用域指得是變量只有再當(dāng)前作用域訪問它 才可以正確的獲得值,跳脫當(dāng)前作用域后再獲取這個(gè)值的話獲取的就不是正確的值了。一下為例子
var x = "test1"; // 1 y = "test2"; // 2 function local(){ console.log(x); // 3 console.log(y); // 4 var z = "test3"; // 5 zz = "test4"; // 6 } function globl(){ console.log(x); // 7 console.log(zz); // 8 console.log(z); // 9 } local(); globl();? 以上代碼中,x和y是定義再最外邊的,x相當(dāng)于是全局變量,而y由于沒有聲明的關(guān)鍵字,所以它就是全局變量。而z和zz都是定義在函數(shù)local中,而這個(gè)函數(shù)local久相當(dāng)于是一個(gè)作用域,但是zz沒有關(guān)鍵字,所以它就是個(gè)全局變量。
? 字后打印出來的就是
test1
test2
test1
test4
40 Uncaught ReferenceError: z is not defined
? 函數(shù)global中要答應(yīng)的z就會(huì)報(bào)錯(cuò),再此時(shí),z就是一個(gè)未定義的變量。
-
JavaScript運(yùn)算符
? JavaScript中的運(yùn)算符可以分為算數(shù)運(yùn)算符、賦值運(yùn)算符、比較運(yùn)算符、邏輯運(yùn)算符和位運(yùn)算符。
var num = 0; num = num + 2; // 加法 num = num * 3; // 乘法 num = num / 2; // 除法 num++; // 遞增 num--; // 遞減以上就是算數(shù)運(yùn)算符。
var num = 0; num += 1; // 加賦值==>num = num + 1 num -= 1; // 減賦值==>num = num - 1 num *= 2; // 乘賦值==>num = num * 2 num /= 1; // 除賦值==>num = num / 2 num %= 2; // 取余賦值==>num = num % 2以上為賦值運(yùn)算符
var a = 1,b = 2; b > a // 大于 b < a // 小于 b == a // 等于 b === a // 全等 b <= a // 小于等于 b >= a // 大于等于 b != a // 不等于以上是比較運(yùn)算符
x == 2 && y == 3 // 與 x == 5 || y == 6 // 或 !x // 非,x取反以上是邏輯運(yùn)算符。還有一個(gè)位運(yùn)算符不怎么常用。
-
JavaScript中的真值和假值
JavaScript中不光布爾值有真假,其他的一些類型的值也是有值的
類型 轉(zhuǎn)換成布爾值 null false undefined false 布爾值 true是true,false是false 數(shù)字 +0、-0、NaN是false,其他的都是true 字符串 長度為0時(shí)為false,長度大于1時(shí)為true 對象 對象都為true 可用一下代碼檢驗(yàn)
function testT(value){ if(value){ return true; }else { return false; } } console.log(`null為${testT(null)}`); console.log(`undefined為${testT(undefined)}`); console.log(`-0為${testT(-0)}`); console.log(`+0為${testT(+0)}`); console.log(`NaN為${testT(NaN)}`); console.log(`"test"為${testT("test")}`); console.log(`{"test":"test"}為${testT({"test":"test"})}`);運(yùn)行代碼后為:
null為false
undefined為false
-0為false
+0為false
NaN為false
"test"為true
{"test":"test"}為true
-
JavaScript中的==和===
? ==和==都是判斷兩邊的值是都相等的運(yùn)算符,使用==時(shí)如果雙方類型不同,但是值相同的話會(huì)返回true,使用===時(shí)只要類型不相同時(shí)就會(huì)返回false。
console.log(false == 0) // 1 console.log(false === 0) // 2? 運(yùn)行代碼后為:
true
false
? 這是因?yàn)?/ 1在比較前會(huì)將false轉(zhuǎn)換為0,所以在比較時(shí)會(huì)返回true,而// 2會(huì)因?yàn)轭愋筒幌嗤苯臃祷豧alse。事實(shí)上,使用弱等于的話,在判斷前都會(huì)進(jìn)行一次類型轉(zhuǎn)換,一下表格展示不同類型變量在弱等于比較時(shí)進(jìn)行的判斷時(shí)進(jìn)行的類型轉(zhuǎn)換。
類型 轉(zhuǎn)換用的方法 字符 toNumber布爾 toNumber對象 toPrimitive -
JavaScript中的條件語句
? JavaScript中常用的條件語句為if...else...和switch...case...。
? 其中if...else...在使用時(shí)的條件是if中的值當(dāng)且僅當(dāng)為真時(shí)才會(huì)執(zhí)行,當(dāng)if中的值為假時(shí)便會(huì)執(zhí)行else下的代碼。這樣的條件語句也可以用三元運(yùn)算符替換。
if(x === 0){ x++; }else { x--; } // 等價(jià)于 (x === 0) ? x++ : x--;? 如果有多個(gè)判斷條件,可以使用多個(gè)if...else...。
? 最后是switch...case...語句。
switch(x){ case 1: x += 1; break; case 2: x += 2; break; case 3: x += 3 break; } // 等價(jià)于if...else... if(x === 1){ x += 1; }else if(x === 2){ x += 2; }else if(x === 3){ x += 3; }實(shí)際開發(fā)中if...else...比switch...case...用的更多,因?yàn)槿绻壿嫲l(fā)生變化,修改if...else ...比switch...case...方便的多。
-
JavaScript循環(huán)
? JavaScript中的循環(huán)和其他語言的循環(huán)都是一樣的,for循環(huán)、while循環(huán)、do...while循環(huán)。
? 其中for循環(huán)是設(shè)定一個(gè)計(jì)數(shù)值,然后再設(shè)置循環(huán)條件,然后改變計(jì)數(shù)值。
for(var i = 0; i < 10 ;i++)。? while循環(huán)是如果滿足條件的情況下就會(huì)執(zhí)行代碼,直至不滿足循環(huán)條件。
while(i < 10)。? do...while循環(huán)是先執(zhí)行代碼,然后再判斷是否滿足條件,如果滿足條件就執(zhí)行do下邊的代碼,如果不滿足就直接跳過。
-
JavaScript函數(shù)
JavaScript函數(shù)在實(shí)際開發(fā)中會(huì)大量應(yīng)用。一下為簡單的使用:
function fun1(){ // 定義函數(shù) console.log("test"); } fun1() // 調(diào)用函數(shù),終端打印test function fun2(text){ // 定義帶參數(shù)的函數(shù) console.log(text); } fun2("test") // 調(diào)用函數(shù)時(shí)傳參數(shù)"test",終端打印test function fun3(){ // 定義一個(gè)有返回值得函數(shù) return "test"; } console.log(fun3()) // 調(diào)用函數(shù),直接將返回值打印出來 -
JavaScript面向?qū)ο缶幊?/p>
JavaScript的對象就是就是普通的鍵值對集合,所以聲明JavaScript對象可以用一下集中方法
var obj = {}、var obj = new Object()。可以在定義對象時(shí)直接完成這個(gè)對象:
var obj = { "key1" : key1, key2 : key2 }以上,JavaScript對象中的鍵就是對象的屬性,值就是屬性對應(yīng)的值。
? 在面向?qū)ο缶幊讨校瑢ο笫穷惖膶?shí)例,一個(gè)類定義了對象的各種屬性。
function people(name,sex,height,weight){ // 聲明類 this.name = name; this.sex = sex; this.height = height; this.weight = weight; this.printName = function(){ // 聲明的屬性可以直接是函數(shù) console.log(this.name); } } // 用下邊這個(gè)代碼實(shí)例化這個(gè)類,得到一個(gè)對象 var man = new people("kuisahn","male","180cm","70kg"); // 然后就可以修改這個(gè)對象了 man.name = "KVCION"; console.log(man.name); // 打印"KVCION" man.printName(); // 調(diào)用對象中的函數(shù),打印"KVCION" // 設(shè)置對象中的函數(shù)也可以這樣做 people.prototype.printSex = function (){ console.log(this.sex); } // 然后在實(shí)例中調(diào)用 man.printSex() // 調(diào)用剛剛定義的函數(shù),打印"male"
以上。
才疏學(xué)淺。