1. 程式人生 > >JavaScript 基礎知識系列:數據類型及slice(8,-1)

JavaScript 基礎知識系列:數據類型及slice(8,-1)

測試 因此 針對 apply() 3.1 正則 gin fine ray

在基礎類庫中常見的slice(8,-1)是個什麽鬼?下面就從js數據類型說起。

javascrip數據類型有兩種:

  1. 基本類型:Undefined,Null,Boolean,Number,String
  2. 引用類型:
    • 第一類:原生對象:object,Array,Date,RegExp,Function以及有基本類型衍生出來的包裝類型Boolean,Number,String;
    • 第二類內置對象(JS語言提供的不依賴於執行宿主的對象,如Global,Math)
    • 宿主對象(JS語言提供的任何依賴宿主環境的對象,如IE中的window,WS中的WScript實例,以及任何用戶創建的類)

數據類型的判斷方式:

1、typeof判斷數據類型會返回一個字符串,如

 1 // Numbers
 2 typeof 37 === ‘number‘;
 3 typeof 3.14 === ‘number‘;
 4 typeof Math.LN2 === ‘number‘;
 5 typeof Infinity === ‘number‘;
 6 typeof NaN === ‘number‘; // 盡管NaN是"Not-A-Number"的縮寫,意思是"不是一個數字"
 7 typeof Number(1) === ‘number‘; // 不要這樣使用!
 8 
 9 // Strings
10 typeof "" === ‘string‘;
11 typeof "bla" === ‘string‘; 12 typeof (typeof 1) === ‘string‘; // typeof返回的肯定是一個字符串 13 typeof String("abc") === ‘string‘; // 不要這樣使用! 14 15 // Booleans 16 typeof true === ‘boolean‘; 17 typeof false === ‘boolean‘; 18 typeof Boolean(true) === ‘boolean‘; // 不要這樣使用! 19 20 // Symbols 21 typeof Symbol() === ‘symbol‘;
22 typeof Symbol(‘foo‘) === ‘symbol‘; 23 typeof Symbol.iterator === ‘symbol‘; 24 25 // Undefined 26 typeof undefined === ‘undefined‘; 27 typeof blabla === ‘undefined‘; // 一個未定義的變量,或者一個定義了卻未賦初值的變量 28 29 // Objects 30 typeof {a:1} === ‘object‘; 31 32 // 使用Array.isArray或者Object.prototype.toString.call方法可以從基本的對象中區分出數組類型 33 typeof [1, 2, 4] === ‘object‘; 34 35 typeof new Date() === ‘object‘; 36 37 // 下面的容易令人迷惑,不要這樣使用! 38 typeof new Boolean(true) === ‘object‘; 39 typeof new Number(1) ==== ‘object‘; 40 typeof new String("abc") === ‘object‘; 41 42 // 函數 43 typeof function(){} === ‘function‘; 44 typeof Math.sin === ‘function‘;

typeof在針對 對象、日期、正則、數組上的判斷並不準確,返回的都是“object”,因此,我們需要另外一種辦法來準確判斷數據類型。

2、Object.prototype.toString()

該方法返回描述某個對象數據類型的字符串,如自定義的對象沒有被覆蓋,則會返回“[object type]”,其中,type則是實際的對象類型。在使用該方法檢測的時候,可以使用Object.prototype.toString.call()或者Object.prototype.toString.apply()進行測試,如

1 var toString = Object.prototype.toString;
2 toString.call(new Date);//[object Date]
3 toString.call(new String);//[object String]
4 toString.call(Math);//[object Math]
5 toString.call(undefined);//[object Undefined]
6 toString.call(null);//[object Null]

因此,引出Object.prototype.toString.call(obj).slice(8,-1),如

Object.prototype.toString.call(‘ESStudio balabala……‘);
//"[object String]"
Object.prototype.toString.call(‘ESStudio balabala……‘).slice(8,-1);
//"String"

slice(startIndex,endIndex),從0開始索引,其中8代表從第8位(包含)開始截取(本例中代表空格後面的位置),-1代表截取到倒數第一位(不含),所以正好截取到[object String]中的String。

結題。

JavaScript 基礎知識系列:數據類型及slice(8,-1)