【javascript培訓第一天】語言基礎


前言

因為公司要進行前端團隊建設,這一培訓任務就落到了我手里,有時候會望着后端幾個工作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運算符

用於刪除對象的屬性,后面還是介紹這里便不多說了。

結語

最近新租了個房子,環境不行,網線太短,我只能撅着寫博客,撅着看書,我那個難受啊!

所以最近寫起來不自覺就有點心浮氣躁,現在是腰酸背痛的,就暫時到這里吧。。。。  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM