Javascript是一種弱類型語言,沒有明確的類型分類;網上分類的方式比較多,個人感覺不比去特別的追究細分是什么什么類型,若是能夠明確的分出類型的話,javascript就不是弱類型語言,又由於大家所使用的主體語言概念不完全相同(像C#,PHP,C語言等),分類的時候就會根絕自己的主體語言的習慣來分類,無論怎樣分類只要有助於自己的理解,能夠方便,正確靈活的使用就可以了;下面是兩是種常見的分類方式和一些必須了解的基礎用法知識;
一、第一種分類方式,也是比較常見的一種分類方法:
分為9種類型:分別是Undefined,Boolean,Object,Number,Null,String,Reference,List,Completion,其中Reference,List,Completion三種類型僅共語言解析運行時使用,無法從程序中直接訪問;下面一一介紹;
1、Undefined 類型:是全局對象window的一個特殊屬性,顧名思義就是未定義的意思;Undefined類型只有一個值Undefined,表示一個變量定義了但未賦值;
如:var a; alert(a); // 彈出undefined;
下面是幾種常見的會出現undefined的情況:
(1)獲取一個對象的屬性(原本屬性和protoType擴展的屬性)不存在時,返回undefined;
(2)當一個函數function(){}沒有明確的返回值時,顯示undefined,例子:function way(){} alert(way());//彈出undefined;
(3)javascript中的參數有多個形參的話,若果調用參數的話,參數數量小於形參數量,那么其他的參數值就為undefined;
2、Null類型:null是javascript保留的關鍵字,null類型也只有一個null值,表示為空或者不存在的對象引用;
(1)javascript中的if()判斷語句無論是null類型還是undefined類型他們的返回值都是false,也就是說一個變量若是null 或者undefined那么他就為false;
if (null){ alert("sdf");//進入不了 } if (undefined){ alert("sdfsdf");//進入不了 } var a=12; if (a){ alert("sdf"); //能進入 }
3、Number類型:表示數值,包含了所有的數值類型,不像高級語言那么細分成int,double,deciable,他的取值范圍是:1.7976931348623157E+308到-1.7976931348623157E+308之間,就是1.7976931348623157*10的308次方到-1.7976931348623157*10的308次方之間;Number類型有一個特殊的值NaN,他是Number類型中一個非數值的值,就像無窮大,所以NaN不等於NaN;
4、Object類型:用來表示一個對象,像String, Array,new 一個對象等,當這個對象為空時,就是null了;所以alert( typeof(null))的彈出值為object;
5、String類型:string類型是javascript中的一個比較重要的類型,它用來表示一個字符串,我們在寫腳本的時候需要處理很多的字符串,所以javascript庫中也提供了很多字符串處理方法,網上已有很多資料了,這里就不一一細說了;
6、Boolean類型:布爾類型大家都很熟悉,這里說幾個他的特殊用法:(1)boolea類型和Number類型相結合時,true轉化為1,false轉化為0;
var a = true; alert(a+1);//彈出2 var a = true; alert(a);//彈出true
上述六種類型也可以相互轉化,基本上是數值和字符串和布爾值之間的轉化:
(1) Number類型轉化為string類型,用tostring();
(2) String類型轉化為Number,用Number();
var str = "123"; var num = 1; alert(str + num);//彈出1231 alert(Number(str)+num) //彈出124
也可以使用全局函數parseInt()和parseFloat()來進行轉換;parseInt()和parseFloat()的區別是Number()轉換是整個值,而parseInt()和parseFloat()則可以只轉換開頭的數字部分。
alert(Number("123asdf"));//彈出NaN alert(Number("1.2.3"))//彈出NaN alert(parseInt("123sdf"));//彈出123 alert(parseFloat("sdfsdf"));//彈出NaN alert(parseInt("sdf345"))//彈出NaN
Number()在轉化的過程中布爾類型的true和false分別被轉化為1和0其他的不能轉化為數值的全部轉化NaN。
alert(Number(true));//彈出1 alert(Number(false));//彈出0 alert(Number(null));//彈出0
其他的若是不能轉化為數值類型的,基本上全轉化為NaN;
擴展小知識:(1)判斷一個變量是否是數值,用IsNan()方法;
(2)在javascript中==和===的區別: "==" 只要求值相等; "===" 要求值和類型都相等;
(3)instanceof只是用於判斷object是否是class類的一個實例,是的話返回true,否則返回false;alert(a instanceof String);
二、第二種分類方法:用typeof()關鍵字來分類,可以分為:undefined,number,string,boolean,object,function
類型 |
例子 |
運行結果 |
Undefined |
var a1; alert(typeof(a1)); function way{} alert(way()); alert(typeof(way())) |
undefined |
number |
Var num1=12; alert(typeof(num1)); |
number |
string |
Var num2=”12”; alert(typeof(num2)); |
string |
boolean |
Var flag=true; alert(typeof(flag)); |
boolean |
object |
Var str=new string(); alert(typeof(str)); Var a=null; alert(typeof(a)); |
object |
function |
alert(typeof(String)); |
function |