javascript基礎知識學習筆記——五種方法判斷變量類型

概述

熟悉面向對象變成語言像java、c++、Dot Net的,瞭解這些語言對變量的命名時都需要聲明變量是那種類型,若對變量賦予另一種類型對象時,程序在編譯時會產生error,我們反觀javascript,使用var variable變量時並沒有聲明變量類型,此時變量是undefined,在對變量賦值時任何類型都可以,這體現了JavaScript是弱類型語言,不需要編譯即可運行。既然變量都是用var聲明那麼怎麼區別變量的類型呢?

一、判斷變量的類型用typeof

在es5版中js有五種基本數據類型,即: Undefined、Null、Boolean、Number和String,還有另一類引用類型,像Object、Function、Array,還有一些內置對象,像Math、Date、RegExp、Bom、Dom等等。常用到的就是typeof來判斷變量類型,對引用類型除了Function函數,缺點就是還有一些無法區分類型的,像Null和Array、Math、Date、RegExp等引用對象。

var und=undefined
console.log(typeof unde); //undefined
var n=null;
console.log(typeof null); //object
var bool=true;
console.log(typeof bool); //"boolean"
var num=1
console.log(typeof num); //"number"
var str="1"
console.log(typeof str);  //"string"
var obj={};
console.log(typeof obj); //object
var fun=function(){};
console.log(typeof fun); //function
var arr=[];
console.log(typeof arr); //object
console.log(typeof Math); //object
console.log(typeof new RegExp()); // object

二、instandof

對於引用類型或者有構造器的函數對象,可以用這個instandof區分變量是否是該對象的子類或者派生出來的。缺點無法區別五大基本類型。

//是否爲數組
function judgeArray(arr){
if(typeof arr =="object"){
   console.log(arr instanceof Array)
   return true
}
return false
}
var arr=[];
judgeArray(arr); //true
var obj={};
judgeArray(arr); //false

三、構造器

創建一個對象時js會在該對象的原型鏈prototype屬性上添加構造器,該構造器同時又指向了自身,即new Array().constructor==Array,爲true。缺點無法區別五大基本類型。

console.log([].constructor==Array) ;//true
console.log(new Object().constructor==Object) ;//true

四、api

es5爲數組提供了一個isArray的函數用來區分數組的,具體可以看上一篇文章,關於數組api的總結。缺點是受具體的api的限制,有很多變量類型都沒有現成的api

var arr=[];
var obj={};
console.log(Array.isArray(arr)); //true
console.log(Array.isArray(obj)); //false

五、tostring

toString()方法是頂級父類Object對象的原生屬性,補充一點Object的原型指向Null,而該方法返回對象類型。缺點是無法判斷undefined類型。

var n=null;
console.log(Object.prototype.toString.call(null)); //[object Null]
var bool=true;
console.log(Object.prototype.toString.call(bool)); //[object Boolean]
var num=1
console.log(Object.prototype.toString.call(num)); //[object Number]
var str="1"
console.log(Object.prototype.toString.call(str));  //[object String]
var obj={};
console.log(Object.prototype.toString.call(obj)); //[object Object]
var fun=function(){};
console.log(Object.prototype.toString.call(fun)); //[object Function]
var arr=[];
console.log(Object.prototype.toString.call(arr)); //[object Array]
console.log(Object.prototype.toString.call(Math)); //[object Math]
console.log(Object.prototype.toString.call(new RegExp())); // [object RegExp]
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章