JavaScript中的數據類型

  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"
相關文章
相關標籤/搜索