前言
因為公司要進行前端團隊建設,這一培訓任務就落到了我手里,有時候會望着后端幾個工作5年甚至10年的同事,心里還是有點虛的,虛完事情還是要做的,所以首先需要先復習復習,后面再根據最近的博客形成PPT吧,所以“本老師”來了。。。
這次培訓的內容由CSS、javascript、jquery組成,按道理說該先寫CSS的,但是我CSS很水已經是默認的標准了,所以還是先看看js吧,希望我js不這樣水
javascript基本數據類型
這次培訓對象還是會有新人,所以還是需要介紹基本數據類型的,話說我現在也不能完全說出來呢。。。
javascript數據類型分為兩種:原始類型與對象類型
原始類型:
數字、字符串、布爾值、null、undefined
其中null與undefined代表了各自特殊類型的唯一成員
對象類型:
所謂對象類型便是屬性的集合,每個屬性都是由鍵值對組成
普通的對象時無序鍵值對,有序的鍵值對便是我們的數組了
還有一個特殊的對象便是函數
函數是具有與他相關聯的可執行代碼的對象,通過調用函數運行可執行代碼並返回結果
若是使用new操作符來新建一個對象我們便稱之為構造函數
每個構造函數定義了一個類——由構造函數初始化對象組合的集合(可看做對象類型的子類型)
數組是類(Array)
函數式類(Function)
日期是類(Date)
正則式類(RegExp)
類與函數貫穿js始終
數字
javascript是不區分整數與浮點數的,所有數均用浮點數表示
Math
現在我們來認識一位與數字非常有關系的對象Math,這個家伙可以干很多事情呢!
Math.round(0.6) 四舍五入
Math.random() 生成一個大於0小於1的偽隨機數
運算溢出
當js運算溢出時不會報錯,會使用無窮大infinity與無窮小-infinity表示;
若是出現沒有意義的運算便會返回NaN,NaN的判斷無論如何都是false(他與自身也不相等),所以判斷他要使用isNaN()函數
parseInt與parseFloat
parseInt(string, radix)
radix,表示轉換的基數,也就是我們常說的2進制、8進制、10進制、16進制等。范圍從2~36,但我們在JS中一般調用該方法時,基本都是以10為基數進行轉換的。
如果該參數小於 2 或者大於 36,則 parseInt() 將返回 NaN。
parseInt這個函數非常有用的,可以將一個字符串返回為整數
<script type="text/javascript"> var a = parseInt('334dd'); var b = parseInt('3d34dd'); var c = parseInt('ss3d34dd'); s = ''; </script>
字符串
字符串是由一組16位值組成的不可變有序序列,每個字符通常來源於Unicode字符集。
字符串一旦第一便不會改變,我們使用函數操作他也只是返回了新的字符串,下面介紹下與字符串有關的函數
var s = 'hellow world';
s.charAt(0);//h
s.charAt(s.length - 1);//d
s.substring(1, 4);ell第2到第四的字符
s.slice(1, 4);//同上
s.slice(-3);//rld,最后三個字符
s.indexOf('l');//2首次出現l的位置
s.lastIndexOf('l');//最后一次出現l的位置,10
s.indexOf('l', 3);//3在在位置3以后首次出現l的位置
s.split(', ');//使用", "分割將字符串變為數組,非常有用的家伙
s.replace('h', 'H');//全文字替換,支持正則表達式
s.toUpperCase();//轉換為大寫
布爾值
布爾值只有true與false兩個,此處略去200字。。。
null和undefined
null在js中式用來描述“空值”的,使用typeof null 會返回對象(object),也就是說null為特殊的對象,但是該對象只有他一個人;
undefined表示值的空缺,表示變量沒有被初始化,比如
var a,這種情況a便是undefined,若是我們定義一個對象,但他開始沒值便可設置其為null。
包裝對象
我們前面看到s為字符串,卻可以執行很多函數,這簡直就是對象的行為嘛,原因是他確實變成對象了。。。
javascript通過new String(s),將字符串轉換為對象,所以s便擁有了方法,一旦函數操作結束新建的對象便會被銷毀
數字與bool值是一樣的包裝的。
類型轉換
javascript的類型非常靈活,類型的轉換有時候便會自動發生:
10 + ' sss' //=> 10 sss '7' * '4'/28 1 - 'd'//NaN 1 - 'd' + 's'//NaNs(注意啦)
對象字面量
對象字面量真是js中的好東西,對象字面量提供了一種方便創建新對象值的表示法:
var obj = { 'name': '葉小釵', age: '秘密', sayName: function () : alert(this.name); }};
做后端開發的同學對hashtable一定不陌生,對象字面量便是標准的鍵值對。
我們可以通過new Object的方式創建對象,但是這里還是推薦以上寫法。
我們通過.或者[]的方式訪問對象:
obj.name obj['name'] 若是要判斷對象是否包含某個屬性,使用: obj.hasOwnProperty('age'
序列化對象(Json)
我們若是序列化對象字面量,他便會變成一個一般的字符串,我們親切的稱呼他為json串!
json串是個神奇的家伙,他可以將數據表中二維的數據轉化為一個字符串,傳到前端后,他又會還原為二維,
所以我們數據表中某個普通的字段,搞不好包含的就是一個二維對象!
數組
js中的數組無比的靈活!!!因為他可以隨意的裝東西,而且他的長度便會也是非常靈活的。
初始化
var arr = []; var arr = new Array();
length
數組的長度是個神奇的東東:
<script type="text/javascript"> [ ].length; //0 ['a', 1, function () { } ].length; //3 var arr = [1, 2, 3, 4, 5]; //5個元素 arr.length = 3; //arr = [1, 2, 3] arr.length = 0; //arr = [] arr.length = 6; //相當於arr = new Array(6) </script>
動態添加數組項
var arr = []; arr[arr.length] = 1; ... arr.push(1); ...
數組遍歷這些便不說了。。。我們來看看數組的函數
join
該函數與字符串的spilt對應,可以將一個數轉換為字符串,很不錯的家伙
var arr = [1, 2, 3]; arr.join();//'1,2,3' arr.join(';');//'1;2;3'
reverse
用於翻轉數組
sort
這個家伙我們一定要記住他,因為他很常用的:
<script type="text/javascript"> var arr = [1, 4, 562, 43, 4346, 433, 645]; arr.sort(); var ss = arr.join(); var s =''; </script>
我們當然會遇到更復雜的情況,比如我們要為年齡排序了,而我們數組也不是那么單一的:
<script type="text/javascript"> var arr = [{ name: '葉小釵', age: 123 }, { name: '一頁書', age: 456 }, { name: '素還真', age: 222 }, {name: '素續緣', age: 14}]; arr.sort(function (a, b) { return a.age - b.age; }); var s =''; </script>
concat()
創建並返回一個新數組:
var a = [1, 2]; a.concat(3, 4);//1,2,3,4 a.concat([2], [3, 3]); //1,2,2,3,3 a.concat(4, [5, [6, 7]]);//1,2,3,4,5,[6,7]
slice()
返回指定數組的片段:
var arr = [1, 2, 3, 4, 5]; a.slice(0, 3);//1,2,3 a.slice(3);//4,5 a.slice(1, -1);//2,3,4 a.slice(-3, -2);//3 //負數便是相對於最后一個元素的位置
splice()
..................................
函數
函數式js的核心(其實函數是任何語言的核心)。這家伙有很多故事,我們下一次再來討論他。
變量與作用域
變量聲明
js使用var 申明變量:
var a = 1;
var a = 1,
b = 2;
重復聲明
重復聲明一個變量時無害的,若重復聲明且賦值的話,這個就和簡單的賦值語句一樣了:
<script type="text/javascript"> var s; var s = 'a'; var s = { 1: '' }; //以上語句相當於 var s; s = 'a'; s = { 1: '' }; </script>
變量作用域
作用域即程序源代碼中定義這個變量的區域。
在函數內的變量具有局部變量的特性,不會被外部變量訪問。
申明提前
javascript中沒有塊級作用域({}),javascript擁有函數作用域,在函數中任何位置定義的變量都會是有意義的,一種有意思的事情便是我在后面定義的變量其實前面就可以用了:
<script type="text/javascript"> var a = 'outer'; (function () { alert(a);//undefind var a = 'inner'; alert(a);//inner })(); </script>
也許有朋友對此感到疑惑,其實他是這個意思了:
<script type="text/javascript"> // var a = 'outer'; (function () { alert(a); //undefind var a = 'inner'; alert(a); //inner //代碼相當於 var a; alert(a); //undefind a = 'inner'; alert(a); //inner })(); </script>
所以,我們有些團隊在聲明變量時候都要求將變量全部聲明到函數頭部。
運算符
||
或用於if條件判斷沒有什么說的,但是我們在賦值運算中可能會有不同的用法:
function (a) { a = a || {}; } //此處若是a不存在便初始化a為對象以免報錯
這個用法是非常有用的。
in運算符
in用於判斷一個屬性是否在對象中:
var obj = {x: 1, y: 2}; 'x' in obj;//true 'z' in obj;//false for (var k in obj) { //遍歷對象 }
instanceof運算符
該操作符用於判斷某個對象是否屬於某類:
var d = new Date(); d instanceof Date; //true d instanceof Object;//true d instanceof Number;//false //有一次面試我因為不忘記了這家伙導致那次面試非常被動,面試官直接認為我是菜鳥,實習崗位都不給。。。很受打擊
eval運算符
eval這個家伙很強大!!!他相當於一個冬天js編譯器,可以將你的字符串作為js執行,當然安全性效率會有一定問題。
eval('2+3');//5 function a() { alert('aa'); } eval('a();');
typeof運算符
typeof用於判斷一個對象的類型:
typeof undefined; //undefind typeof null; //object typeof true; //boolean typeof 1; //或者NaN;number typeof 'sss'; //string typeof function () { }; //function
delete運算符
用於刪除對象的屬性,后面還是介紹這里便不多說了。
結語
最近新租了個房子,環境不行,網線太短,我只能撅着寫博客,撅着看書,我那個難受啊!
所以最近寫起來不自覺就有點心浮氣躁,現在是腰酸背痛的,就暫時到這里吧。。。。