javascript有9種數(shù)據(jù)類型,分別為:字符串(String)、數(shù)字(Number)、布爾(Boolean)、Null、Undefined、Symbol、對(duì)象(Object)、數(shù)組(Array)、函數(shù)(Function)。
本教程操作環(huán)境:windows7系統(tǒng)、ECMAScript 5版、Dell G3電腦。
JavaScript數(shù)據(jù)類型:
JavaScript語言的每一個(gè)值,都屬于某一種數(shù)據(jù)類型。JavaScript的數(shù)據(jù)類型,共有9種:
-
值類型(基本類型):字符串(String)、數(shù)字(Number)、布爾(Boolean)、空(Null)、未定義(Undefined)、Symbol。
-
引用數(shù)據(jù)類型:對(duì)象(Object)、數(shù)組(Array)、函數(shù)(Function)。
注:Symbol 是 ES6 引入了一種新的原始數(shù)據(jù)類型,表示獨(dú)一無二的值。
1、Undefined:Undefined類型只有一個(gè)值,即特殊值undefined。在使用var聲明變量,但未對(duì)其加以初始化時(shí),這個(gè)變量值就是undefined。
2、Null:Null類型是第二個(gè)只有一個(gè)值的數(shù)據(jù)類型。其特殊值就是Null。從邏輯角度上看,null是一個(gè)空的對(duì)象指針。而這也正是使用typeof操作符檢測(cè)null值,會(huì)返回“object”的原因。
3、Boolean:即布爾類型,該類型有兩個(gè)值:true
false。需要注意的是,Boolean類型的字面值true和false是區(qū)分大小寫的。也就是說,True和False(以及其它的混合大小形式)都不是Boolean值,只是標(biāo)識(shí)符。
4、Number:該類型的表示方法有兩種形式,第一種是整數(shù),第二種為浮點(diǎn)數(shù)。整數(shù):可以通過十進(jìn)制,八進(jìn)制,十六進(jìn)制的字面值來表示。浮點(diǎn)數(shù):就是該數(shù)值中必須包含一個(gè)小數(shù)點(diǎn),且小數(shù)點(diǎn)后必須有一位數(shù)字。
5、String:String類型用于表示由零或多個(gè)16位的Unicode字符組成的字符序列,即字符串。至于用單引號(hào),還是雙引號(hào),在js中還是沒有差別的。記得成對(duì)出現(xiàn)。
6、Symbol類型
符號(hào) (Symbols) 是 ECMAScript 第 6 版新定義的。符號(hào)類型是唯一的并且是不可修改的
var s = Symbol()
Symbol 函數(shù)前不能使用 new 命令,否則會(huì)報(bào)錯(cuò)。這是因?yàn)樯傻?Symbol 是一個(gè)原始類型的值,不是對(duì)象
Symbol 函數(shù)可以接受一個(gè)字符串作為參數(shù),表示對(duì) Symbol 實(shí)例的描述
7、Object:Object數(shù)據(jù)類型,稱為對(duì)象,是一組數(shù)據(jù)和功能(函數(shù))的集合??梢杂胣ew操作符后跟要?jiǎng)?chuàng)建的對(duì)象類型的名稱來創(chuàng)建。也可以用字面量表示法創(chuàng)建。在其中添加不同名(包含空字符串在內(nèi)的任意字符串)的屬性。
8、Array
JavaScript 數(shù)組用方括號(hào)書寫。數(shù)組的項(xiàng)目由逗號(hào)分隔。
下面的代碼聲明(創(chuàng)建)了名為 cars 的數(shù)組,包含三個(gè)項(xiàng)目(汽車品牌):
var cars = ["Porsche", "Volvo", "BMW"];
數(shù)組索引基于零,這意味著第一個(gè)項(xiàng)目是 [0],第二個(gè)項(xiàng)目是 [1],以此類推。
ECMAScript中的數(shù)組和其他語言的數(shù)組有著相當(dāng)大的區(qū)別:
-
ECMAScript 數(shù)組的每一項(xiàng)可以保存任何類型的數(shù)據(jù);
-
ECMAScript數(shù)組的大小可以動(dòng)態(tài)調(diào)整,可向數(shù)組添加元素或者刪除元素;
【推薦學(xué)習(xí):js基礎(chǔ)教程】
9、Function
ECMAScript中的函數(shù)是對(duì)象,與其他引用類型一樣具有屬性和方法。因此,函數(shù)名實(shí)際是一個(gè)指向函數(shù)對(duì)象的指針。
1)、函數(shù)聲明
function sum(num1,num2){ return num1+num2; }//函數(shù)聲明 var sum = function(num1,num2){ return num1+num2; }; //函數(shù)表達(dá)式 這里的分號(hào)很重要
2)、沒有重載
function addSomeNumber(num){ return num + 100; } function addSomeNumber(num){ return num + 200; } var result = addSomeNumber(100); //300
創(chuàng)建第二個(gè)函數(shù)時(shí)覆蓋了引用第一個(gè)函數(shù)的變量addSomeNumber。
3)、函數(shù)聲明與函數(shù)表達(dá)式
alert (sum(10,10)); function sum(num1,num2){ return num1+num2; }
這樣的代碼可以正常執(zhí)行。代碼開始執(zhí)行前,解析器會(huì)率先讀取函數(shù)聲明并將其添加到執(zhí)行環(huán)境中,對(duì)代碼求值前,JS引擎在第一遍會(huì)聲明函數(shù)并將它們放到源代碼樹的頂部。但改為函數(shù)表達(dá)式就會(huì)出錯(cuò)。
4)、作為值的函數(shù)
-
像傳遞參數(shù)一樣把一個(gè)函數(shù)傳遞給另一個(gè)函數(shù)
function callSomeFunction(someFunction,someArgument){ return someFunction(someArgument); } function add10(num){ return num+10; } var result1 = callSomeFunction(add10,10); alert(result1); //20 function getGreeting(name){ return "Hello"+name; } var result2 = callSomeFunction(getGreeting,"Mike"); alert(result2); //Hello Mike //callSomeFunction是通用的,函數(shù)作為第一個(gè)參數(shù)傳遞進(jìn)去,返回執(zhí)行第一個(gè)參數(shù)后的結(jié)果
-
從一個(gè)函數(shù)中返回另一個(gè)函數(shù)
function createComparisonFunction(propertyName){ return function(object1,object2){ var value1 = object1[propertyName]; var value2 = object2[propertyName]; if(value1<value2){ return -1; }else if(value1>value2){ return 1; }else{ return 0; } } } var date = [{name:"Mike", age:28},{name:"Amy", age:29}];//創(chuàng)建包含兩個(gè)對(duì)象的數(shù)組 date.sort(creatComparisonFunction("name")); alert(date[0].name);//Amy date.sort(creatComparisonFunction("age")); alert(date[0].name);//Mike