JavaScript中包含五種基本數據類型(原始數據類型),分別是:undefined, null, number, boolean, string; 和一種引用類型 Object,引用類型中包含特殊的一類:Function類型。number, boolean, string三種基本類型對於有包裝類型 Number,Boolean,String,這三種包裝類型是對象類型。函數
針對這些類型,下面分別解釋:spa
1. typeof 操做符prototype
能夠經過此操做符獲取變量的類型,操做返回值爲字符串,以下7種:"number", "string", "boolean", "null", "undefined", "function", "object".指針
2. 基本類型code
undefined 類型:只有一個值 undefined,在使用 var 聲明變量但未對其進行初始化時,此變量的值即爲 undefined對象
var sum; // 聲明後未初始化默認值爲undefined alert(sum) // "undefined" alert(age) // 未聲明變量,報錯 alert(sum == undefined) // true alert(typeof sum) // "undefined" alert(typeof age) // "undefined" 此處對未聲明的變量進行typeof也會返回 "undefined",有其邏輯上的合理性,表示沒法操做此變量
null 類型:也是隻有一個值的數據類型,值爲 null,從邏輯角度來看,null表示一個空對象指針。blog
var title = null; alert(typeof title); // "object" // 因爲對賦值null的變量執行 typeof 操做會返回 object, // 因此若是變量將來準備存放對象,最好將其賦值爲 null, // 這樣只須要檢測其是否爲 null,便可知道其是否已保存了一個對象的引用 if (title == null) { // do something }
number, boolean, string類型及其包裝類型:ip
var num = 5; var NUM = new Number(5); // 此處建立一個Number對象 alert(typeof num); // "number" alert(typeof NUM); // "object" var numf = Number(5); alert(typeof Number); // "function" 此處Number是一個包裝函數 alert(typeof numf); // "number" // boolean 和 string類型與 number類似 var bool = false; var BOOL = new Boolean(false); alert(typeof bool); alert(typeof BOOL); var str = 'hello'; var STR = new String('hello'); alert(typeof str); alert(typeof Str);
3. NaN : 是一個特殊的數值,用於表示應該返回數值而未返回數值的狀況,例如: 除0, Number("a")等字符串
// 1.任何涉及 NaN 的操做都會返回 NaN alert(1+NaN) // NaN alert(NaN/10) // NaN // 2.NaN與任何值都不等 alert(NaN == NaN) // false alert(2 == NaN) // false alert("abc" == NaN) // false // 3. isNaN()函數:不能被轉換爲數值的值都會返回true alert(isNaN(5)) // false alert(isNaN(true)) // false alert(isNaN("a")) // true
4. 引用類型:一組數據和功能的集合。對象是引用類型的一個實例。get
[[Class]]是一個內部屬性,能夠用來給對象分類,它的值有:
"Arguments", "Array", "Boolean", "Date", "Error", "Function", "JSON", "Math", "Number", "Object", RegExp", 「String"
Javascript只能經過toString()方法(Object.prototype.toString())獲取這個內部屬性
Object.prototype.toString.call(undefined) //"[object Undefined]" Object.prototype.toString.call(null) //"[object Null]" Object.prototype.toString.call(function(){}) //"[object Function]" Object.prototype.toString.call(Math) //"[object Math]" Object.prototype.toString.call(Array) //"[object Function]" Object.prototype.toString.call([]) //"[object Array]" Object.prototype.toString.call({}) //"[object Object]" //基礎類型轉化爲包裝類型按照對應的規則處理 Object.prototype.toString.call("abc") //"[object String]" Object.prototype.toString.call(200) //"[object Number]" Object.prototype.toString.call(true) // "[object Boolean]"
能夠經過以下的函數獲取對象類型:
function getClass(x) { var str = Object.prototype.toString.call(x); return /^\[object (.*)\]$/.exec(str)[1]; } getClass(null); // "Null" getClass({}) //"Object" getClass([]) //"Array" getClass(JSON) //"JSON" getClass(function(){})//"Function" function Foo() {} getClass(new Foo()) //"Object"