❶ 如何正確判斷js數據類型
了解js的都知道, 有個typeof 用來判斷各種數據類型,有兩種寫法:typeof xxx ,typeof(xxx)
如下實例:
typeof 2 輸出 number
typeof null 輸出 object
typeof {} 輸出 object
typeof [] 輸出 object
typeof (function(){}) 輸出 function
typeof undefined 輸出 undefined
typeof '222' 輸出 string
typeof true 輸出 boolean
這裡麵包含了js裡面的五種數據類型 number string boolean undefinedobject和函數類型 function
看到這里你肯定會問了:我怎麼去區分對象,數組和null呢?
接下來我們就用到另外一個利器:Object.prototype.toString.call
這是對象的一個原生原型擴展函數,用來更精確的區分數據類型。
我們來試試這個玩兒意兒:
var gettype=Object.prototype.toString
gettype.call('aaaa')輸出 [object String]
gettype.call(2222) 輸出 [object Number]
gettype.call(true) 輸出 [object Boolean]
gettype.call(undefined) 輸出 [object Undefined]
gettype.call(null) 輸出 [object Null]
gettype.call({}) 輸出 [object Object]
gettype.call([]) 輸出 [object Array]
gettype.call(function(){}) 輸出 [object Function]
看到這里,剛才的問題我們解決了。
其實js 裡面還有好多類型判斷
[object HTMLDivElement] div 對象 ,
[object HTMLBodyElement] body 對象,
[object Document](IE)或者
[object HTMLDocument](firefox,google) ......
各種dom節點的判斷,這些東西在我們寫插件的時候都會用到。
可以封裝的方法如下:
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
var gettype=Object.prototype.toString
var utility={
isObj:function(o){
return gettype.call(o)=="[object Object]";
},
isArray:function(o){
return gettype.call(o)=="[object Array]";
},
isNULL:function(o){
return gettype.call(o)=="[object Null]";
},
isDocument:function(){
return gettype.call(o)=="[object Document]"|| [object HTMLDocument];
}
........
}
❷ JS-判斷js數據類型的幾種方式
js的數據類型分為兩大類:
基本類型:也稱為簡單類型,由於其占據空間固定,是簡單的數據段,為了便於提升變數查詢速度, 將其存儲在棧中,即按值訪問 。
引用類型:也稱為復雜類型,由於其值的大小會改變,所以不能將其存放在棧中,否則會降低變數查詢速度,因此, 其值存儲在堆中 ,而存儲在變數處的值,是一個指針,指向存儲對象的內存處,即 按址訪問 。引用類型除 Object 外,還包括 Function 、Array、RegExp、Date 等等。
引用類型和基本類型的區別:
1、基本類型按 值 訪問
需要注意的是:
A instanceof B用來判斷A是否屬於B的實例,返回true或者false。
需要注意的是:
ES5中可以用Array.isArray([])來准確判斷數組的實例
當創建變數b時,js會在b的原型上添加constructor屬性,指向b的引用
js在創建內置對象時,也是這么做的:
Object對象有tostring方法返回:
而非object對象,則需要call/apply才能正確返回類型,返回格式為字元串類型的 "[object 數據類型xxx]" :
以上幾種方式可以在不同場景使用。
❸ 如何判斷js中的數據類型
可以使用typeof來檢測數據類型:
「undefined」-->這個變數是未定義的(為初始化的變數和未聲明的變數的typeof操作都返回undefined)
」boolean「-->這個值是布爾值
」string「 -->這個值是字元串
」number「-->這個值是數字
」object「-->這個值為null或者obejct
」function「-->這個值是函數
方法為:
if(typeof(XX) == "undefined"){
alert("這是個未定義的變數");
}
依次列出這些類型即可以做的判斷了,希望對你有幫助,望採納!
❹ js數據類型
js中有六種數據類型,包括五種基本數據類型(Number,String,Boolean,Undefined,Null),和一種復雜數據類型(Object)。
1、Number類型
Number類型包含整數和浮點數(浮點數數值必須包含一個小數點,且小數點後面至少有一位數字)兩種值。
2、String類型
在JS中字元串需要使用引號引起來。使用雙引號或單引號都行,但是不要混著用。引號不能嵌套,雙引號不能放雙引號,單引號不能放單引號。
3、Boolean類型
該類型只有兩個值,true和false。
4、Undefined類型
只有一個值,即undefined值。使用var聲明了變數,但未給變數初始化值,那麼這個變數的值就是undefined。
5、Null類型
null類型被看做空對象指針,null類型也是空的對象引用。
6、Object類型
js中對象是一組屬性與方法的集合。這里就要說到引用類型了,引用類型是一種數據結構,用於將數據和功能組織在一起。引用類型有時候也被稱為對象定義,因為它們描述的是一類對象所具有的屬性和方法。
❺ js判斷數據類型方法匯總
在前端開發中我們經用到的操作有很多,比如判斷數據類型、去重、深拷貝等等,最近也在整理常用的知識點,便於積累和後期查看,這里呢我對js中數據類型判斷方法以及判斷結果進行了匯總。
一、匯總表格
二、4種方式說明
1、typeof
對於原始類型:除了null其它都可以顯示正確
對於對象的話:除了function 其它均顯示為 「object」
2、 instanceof : 內部機制是通過原型鏈來判斷的 方法是 a instanceof b (a是不是b的實例)
針對於對象:可以很明顯的區分Array、Date、regExp,但是他們都是Object的實例。所以,instanceof 最好是用來判斷兩個對象是否屬於實例關系, 而不是判斷一個對象實例具體屬於哪種類型。
3、constructor a.constructor===Function / Symbol / String / Number / Boolean / Object / RegExp / Date
對於原始類型:無法處理null、undefined(這兩個會報錯)
對於對象:均可以判斷
函數的 constructor 是不穩定的,這個主要體現在自定義對象上,當開發者重寫 prototype 後,原有的 constructor 引用會丟失,constructor 會默認為 Object
4、 toString
toString() 是 Object 的原型方法,調用該方法,默認返回當前對象的 [[Class]] 。這是一個內部屬性,其格式為 [object Xxx] ,其中 Xxx 就是對象的類型。
對於 Object 對象,直接調用 toString() 就能返回 [object Object] 。而對於其他對象,則需要通過 call / apply 來調用才能返回正確的類型信息。
可以判斷所有類型: Object.prototype.toString.call(xxx) 對向的話可以直接使用 Object.toString(obj)
三、整理一個可以判斷任意數據類型的方法
注意:在es6中用class定義類的時候,通過typeof判斷出的結果是Function,而通過Object.toString判斷的結果是Object。js中class應該是Function類型,所以這點需要注意。
function getType(para) { //判斷任意數據類型
const type = typeof para;
if (type === "number" && isNaN(para)) return "NaN";
if (type !== "object") return type;
return Object.prototype.toString
.call(para)
.replace(/[\[\]]/g, "")
.split(" ")[1]
.toLowerCase();
}
四、小結
js中數據類型判斷的方式有4種:typeof、instance、constructor、toString,typeof簡單方便,比較適合原始類型判斷,toString繁瑣一點但是判斷全面,所以這兩個的結合判斷我是比較推薦的。
❻ js如何判斷變數的數據類型
檢測簡單抄的數據類型的方法
typeof方法用於檢測簡單的數據類型如typeof 12
instanceof的實例方法檢測如[] instanceof Array // true
arr.constructor == Array判斷arr的構造函數是否為數組,如果是則arr是數組
Array.isArray([])判斷是否是數組
精確判斷數據類型Object.prototype.toString.call(arr)
❼ JS數據類型(七種基礎,三種引用)
在JS的學習與工作中,搞清楚相關數據類型是基礎中的基礎,平均一百家公司面試前端工程師的時候九十九家都會問,請你簡單舉例一下JS的數據類型,於是菜狗我就將對此進行一些自己粗淺的總結為自己留作筆記同時為各位想要學習的同學提供小小的幫助。
首先,我們要明白,在JS中,數據類型分為一下兩種:
基礎數據類型分為七種
①Number 數字型 (包含所有的整數,浮點數,負數等)
②String 字元串型 (包含任意文本)
③boolean 布爾型 (僅有兩種類型,ture與false)
④Undefined 未定義 (僅有一種,undefined)
⑤Null 空/不存在 (僅有一種,null)
⑥Symbol (實現唯一標識)
對此進行簡單的舉例
⑦BigInt(任意精度整數)(將與ES10中出現)
對此數據類型存在進行簡單解釋
BigInt 通過數字加n的方法來表示,支持二進制,八進制,十六進制
以下寫法結果均為轉換為字元串後得而結果,BigInt類型轉換字元串後不會再帶著n
Ⅰ.通常寫法
Ⅱ .十六進制
Ⅲ.八進制(注意區分數字0與字母o)
Ⅳ. 二進制
引用數據類型共有三種
①Array類型 (數組型)
②Object類型 (對象型)
③Function類型 (函數/方法)
以上就是十種JS中的數據類型,如有錯誤,歡迎指正。
如果本文能幫到你,那麼菜狗很開心,大家一起 加油!
❽ 如何判斷js中的數據類型
最常見的判斷方法:typeof
alert(typeof a) ------------> string
alert(typeof b) ------------> number
alert(typeof c) ------------> object
alert(typeof d) ------------> object
alert(typeof e) ------------> function
alert(typeof f) ------------> function
其中typeof返回的類型都是字元串形式,需注意,例如:
alert(typeof a == "string") -------------> true
alert(typeof a == String) ---------------> false
另外typeof 可以判斷function的類型;在判斷除Object類型的對象時比較方便。
判斷已知對象類型的方法: instanceof
alert(c instanceof Array) ---------------> true
alert(d instanceof Date)
alert(f instanceof Function) ------------> true
alert(f instanceof function) ------------> false
注意:instanceof 後面一定要是對象類型,並且大小寫不能錯,該方法適合一些條件選擇或分支。
根據對象的constructor判斷: constructor
alert(c.constructor === Array) ----------> true
alert(d.constructor === Date) -----------> true
alert(e.constructor === Function) -------> true
注意: constructor 在類繼承時會出錯
eg,
function A(){};
function B(){};
A.prototype = new B(); //A繼承自B
var aObj = new A();
alert(aobj.constructor === B) -----------> true;
alert(aobj.constructor === A) -----------> false;
而instanceof方法不會出現該問題,對象直接繼承和間接繼承的都會報true:
alert(aobj instanceof B) ----------------> true;
alert(aobj instanceof B) ----------------> true;
言歸正傳,解決construtor的問題通常是讓對象的constructor手動指向自己:
aobj.constructor = A; //將自己的類賦值給對象的constructor屬性
alert(aobj.constructor === A) -----------> true;
alert(aobj.constructor === B) -----------> false; //基類不會報true了;
通用但很繁瑣的方法: prototype
alert(Object.prototype.toString.call(a) === 『[object String]』) -------> true;
alert(Object.prototype.toString.call(b) === 『[object Number]』) -------> true;
alert(Object.prototype.toString.call(c) === 『[object Array]』) -------> true;
alert(Object.prototype.toString.call(d) === 『[object Date]』) -------> true;
alert(Object.prototype.toString.call(e) === 『[object Function]』) -------> true;
alert(Object.prototype.toString.call(f) === 『[object Function]』) -------> true;