`計算機顧名思義可以進行數(shù)學計算的機器,因此,計算機理所當然的可以處理各種數(shù)值,但是,計算機能夠處理的遠遠不只是數(shù)值,它還能處理文本,圖形,視頻,音頻,網(wǎng)頁等各種各樣的數(shù)據(jù),不同的數(shù)據(jù),需要定義不同的數(shù)據(jù)類型,javascript定義了一下數(shù)據(jù)類型:
字符串string , 數(shù)字number , 對象object, 布爾boolean , 空值null, undefined
基本類型:string,number,Boolean,Null,Number引用類型:object基本包裝類型和引用類型的區(qū)別即使生存周期不同,引用類型在代碼執(zhí)行后就會銷毀實例
- string——字符串
注:用雙引號和單引號表示的字符完全相同
javascript就是用' ' 或 " "括起來的字符表示如果 ' 本身也是一個字符,就用" "表示: "I'm OK"如果字符串內(nèi)部包含 ' 和 " ,就用轉(zhuǎn)義字符 \ 來標識: 'I'm "OK"!'; 表示的字符串內(nèi)容是:I'm "OK"!轉(zhuǎn)義字符可以轉(zhuǎn)義很多字符,比如:\n表示換行,\t表示制表符,字符 \ 本身也要轉(zhuǎn)義,所以\表示的字符是\
(由于多行字符串用\n寫起來比較費事,所以最新的ES6新增一種多行字符串的表示方法,用'...'表示:
這是一個多行字符串
;)需要特別注意的是:字符串是不可變的,如果對字符串的某個索引賦值,不會有任何錯誤,但是,也不會有任何效果:
var s = 'Test';s[0] = 'X';alert(s); // s仍然為'Test'
javascript為字符串提供了一些方法,調(diào)用這寫方法,不會改變字符串原有的內(nèi)容,而是返回一個新的字符串:1. toUpperCase() 把一個字符串全部變成大寫:
var s = 'Hello';s.toUpperCase(); // 返回'HELLO'
- toLowerCase()把字符串全部變成小寫3. indexOf()返回搜索指定字符串出現(xiàn)的位置
var s = 'hello, world';s.indexOf('world'); // 返回7s.indexOf('World'); // 沒有找到指定的子串嘲驾,返回-1
- sbustring()返回指定索引區(qū)間的子串
var s = 'hello, world's.substring(0, 5); // 從索引0開始到5(不包括5)袁波,返回'hello's.substring(7); // 從索引7開始到結(jié)束,返回'world'
2 . number——數(shù)值
注:表示整數(shù)和浮點數(shù)值
javascript不區(qū)分整數(shù)和浮點數(shù)洲赵,統(tǒng)一用number表示以下都是合法的number]數(shù)據(jù)類型:---------------------------------------------------------------------------------------------------------------------------------123;//整數(shù)0.234;//浮點數(shù)0.2341.235e3;//科學計數(shù)法表示1.2345*1000,等同于1234.5-22;//負數(shù)NaN;//Not a number,當無法計算結(jié)果時,用NaN表示Infinity;//Infinity表示無限大,當數(shù)值超過了javascriptde的number所能表示的范圍時,就表示為Infinity-----------------------------------------------------------------------------------------------------------------------------------( 注意:1.NaN這個的number與所有其他值(包括它自己)懂不相等,如:NaN === NaN; //false 唯一能判斷NaN的方法是通過isNaN]()函數(shù):isNaN(NaN]);//true
2.浮點數(shù)的比較: 1 / 3 === ( 1 - 2 / 3 ) ; //false 這不是javascript的設(shè)計缺陷,因為浮點數(shù)在運算過程中會產(chǎn)生誤差,因為計算機無法精確的表示無限循環(huán)小數(shù),要比較兩個數(shù)是否相等,只能計算他們之差的絕對值,看是否小于某個域值:Math.abs( 1 / 3 - ( 1 - 2 / 3)) < 0.0000001 : // true )
javascript對象的鍵都是字符串類型,值可以是任意數(shù)據(jù)類型
3 . Object——對象
(1).數(shù)組
slice()對應(yīng)string的substring(),它截取數(shù)組的部分元素,返回一個新的數(shù)組:
var arr = ['A', 'B', 'C', 'D', 'E', 'F', 'G'];arr.slice(0, 3); // 從索引0開始聂使,到索引3結(jié)束盐欺,但不包括索引3: ['A', 'B', 'C']arr.slice(3); // 從索引3開始到結(jié)束: ['D', 'E', 'F', 'G']
注意到:slice()的參數(shù)包含開始索引,不包含結(jié)束索引 如果不給slice()傳遞參數(shù),將從頭到尾截取所有元素,利用這一點,我們很容易復制一個數(shù)組:
var arr = ['A', 'B', 'C', 'D', 'E', 'F', 'G']; var aCopy = arr.slice(); aCopy; // ['A', 'B', 'C', 'D', 'E', 'F', 'G'] aCopy === arr; // false
push()和pop() , push()想數(shù)組末尾加若干元素,pop()刪除數(shù)組最后一個元素,并返回該元素:
var arr = [1, 2]; arr.push('A', 'B'); // 返回Array新的長度: 4 arr; // [1, 2, 'A', 'B'] arr.pop(); // pop()返回'B' arr; // [1, 2, 'A'] arr.pop(); arr.pop(); arr.pop(); // 連續(xù)pop 3次 arr; // [] arr.pop(); // 空數(shù)組繼續(xù)pop不會報錯泊柬,而是返回undefined arr; // []
unshift()和shift(), unshift()向Array頭部插入若干元素, shift()則是刪除數(shù)組的第一個元素:
var arr = [1, 2];arr.unshift('A', 'B'); // 返回Array新的長度: 4arr; // ['A', 'B', 1, 2]arr.shift(); // 'A'arr; // ['B', 1, 2]arr.shift(); arr.shift(); arr.shift(); // 連續(xù)shift 3次arr; // []arr.shift(); // 空數(shù)組繼續(xù)shift不會報錯蜜唾,而是返回undefinedarr; // []sort(), 對當前Array排序,它會直接修改當前Array的元素位置,直接調(diào)用時,按默認的順序排序:
var arr = ['B', 'C', 'A'];arr.sort();arr; // ['A', 'B', 'C']reverse(),把整個的Array元素反轉(zhuǎn):
var arr = ['one', 'two', 'three'];arr.reverse(); arr; // ['three', 'two', 'one']
splice()方法是修改數(shù)組的"萬能方法",它可以從制定索引的位置開始,刪除若干元素,再從該位置添加若干元素:
//刪除又添加var arr = ['Microsoft', 'Apple', 'Yahoo', 'AOL', 'Excite', 'Oracle'];// 從索引2開始刪除3個元素,然后再添加兩個元素:arr.splice(2, 3, 'Google', 'Facebook'); // 返回刪除的元素 ['Yahoo', 'AOL', 'Excite']arr; // ['Microsoft', 'Apple', 'Google', 'Facebook', 'Oracle']// 只刪除,不添加:arr.splice(2, 2); // ['Google', 'Facebook']arr; // ['Microsoft', 'Apple', 'Oracle']// 只添加,不刪除:arr.splice(2, 0, 'Google', 'Facebook'); // 返回[],因為沒有刪除任何元素arr; // ['Microsoft', 'Apple', 'Google', 'Facebook', 'Oracle']concat()把當前數(shù)組與另一個數(shù)組鏈接起來,返回一個新的數(shù)組:
var arr = ['A', 'B', 'C'];var added = arr.concat([1, 2, 3]);added; // ['A', 'B', 'C', 1, 2, 3]arr; // ['A', 'B', 'C']
實際上concat()可以接收任意多個元素和數(shù)組,并自動把數(shù)組拆開,然后全部添加到新的數(shù)組里:
var arr = ['A', 'B', 'C'];arr.concat(1, 2, [3, 4]); // ['A', 'B', 'C', 1, 2, 3, 4]
join()將當前數(shù)組按制定的字符串連接起來,然后返回連接后的字符串:
var arr = ['A', 'B', 'C', 1, 2, 3];arr.join('-'); // 'A-B-C-1-2-3'如果Array
的元素不是字符串杂曲,將自動轉(zhuǎn)換為字符串后再連接2.null & undefinednull表示一個"空"值,它和 0 以及字符串' '不同, 0表示一個數(shù)值,' '表示長度為0的字符串,null表示"空"的值undefined表示未定義,僅僅在判斷函數(shù)參數(shù)是否傳遞的情況下有用;( 大多數(shù)情況下,我們用null )
3.數(shù)組是按順序排列的集合,集合的每個值稱為元素,數(shù)組可包含任意類型的數(shù)據(jù);
4.對象是一組由鍵-值組成的無序集合:
var person = { name: 'Bob', age: 20, tags: ['js', 'web', 'mobile'], city: 'Beijing', hasCar: true, zipcode: null};
4. boolean——布爾值
注:true和false是區(qū)分大小寫的.也就是說,True和False(以及其他的混合大小寫形式)都不是Boolean值,只是標識符
布爾型(5種false)javascript把 null ,undefined 袁余, NaN 擎勘,0 ,和空字符串‘ ’ 視為false其他 一概·視為true
5. Null——空值
注:Null類型只有一個值就是null.如果這個變量準備在將來用來保存對象,那么最好將該變量初始化為null而不是其他值.
這樣一來,只要直接檢查null值就可以知道相應(yīng)的變量是否已經(jīng)保存了一個對象的引用.
- Undefined——值未定義
注:Undefined類型只有一個值,即特色的undefined.在使用var聲明變量但未對其加以初始化時,這個變量的值就是undefined
變量:javascript的變量名:大小寫英文,數(shù)字,$ 和 _ 組成,但不能以數(shù)字開頭,不能是關(guān)鍵字;(雖然變量名也可以是中文,但是不要給自己找麻煩); 申明一個變量用var, 一個變量只能申明一次,可以被多次賦值為任意類型的數(shù)據(jù); *這種變量本身類型不固定的語言稱之為:動態(tài)語言 *在申明變量必須指定變量類型的,如果賦值的時候,類型不匹配,就會報錯,稱之為靜態(tài)語言,如java語言 int a = 123; // a是整數(shù)類型變量颖榜,類型用int申明 a = "ABC"; // 錯誤:不能把字符串賦給整型變量 (和靜態(tài)語言相比,動態(tài)語言更靈活,就是這個原因)
Strict模式:javascript允許初學者或者說不強制要求用var聲明變量,這個設(shè)計錯誤將會帶來嚴重的后果,如果一個變量沒有通過var申明就被使用,那么該變量就會被自動申請為全局變量: i = 10; // i 現(xiàn)在是全局變量
在同一個網(wǎng)頁的不同javascript文件中,如果都不用var申明變量,恰好都使用了變量i,將造成變量 i 相互影響,產(chǎn)生難以調(diào)試的錯誤結(jié)果;用var聲明的變量不是全局變量,它的范圍被限制在申明它的函數(shù)體內(nèi),同名變量在不同的函數(shù)體內(nèi)互不沖突.-----為了修補javascript這一嚴重設(shè)計缺陷,ECMA在后續(xù)規(guī)范中推出了strict模式,在該模式下運行javascript代碼,強制通過var聲明變量,未通過var聲明變量就使用的,將導致運行錯誤------(啟用strict模式的方法是在javascript的第一行寫上: 'use strict;' 這是一個字符串,不支持strict模式的瀏覽器,將會把它當做字符串語句來執(zhí)行,支持strict模式的瀏覽器,將開啟strict模式運行javascript. )
運算符:javascript在設(shè)計比較運算符時,有兩種比較運算符:
1.第一種是"==",它會自動轉(zhuǎn)換數(shù)據(jù)類型,再進行比較,會得到詭異的結(jié)果;2.第二種是"===",它不會自動轉(zhuǎn)換數(shù)據(jù)類型,蜀國類型不一致,返回false,如果一致再比較;由于javascript的這個設(shè)計缺陷,不要使用"==",始終堅持使用"==="