一、js中資料型別
二、判斷資料型別
下面將對如下資料進行判斷它們的型別
var bool = truevar num = 1
var str = 'abc'
var und =undefined
var nul = null
var arr = [1,2,3]
var obj =
var fun = function()
1. 使用typeof
console.log(typeof bool); //boolean
console.log(typeof num);//
number
console.log(typeof str);//
string
console.log(typeof und);//
undefined
console.log(typeof nul);//
object
console.log(typeof arr);//
object
console.log(typeof obj);//
object
console.log(typeof fun);//
function
結論:由結果可知typeof可以測試出```number```、```string```、```boolean```、```undefined```及```function```,而對於```null```及陣列、物件,typeof均檢測出為object,不能進一步判斷它們的型別。
2. 使用instanceof
console.log(bool instanceof boolean);//false
console.log(num instanceof number);//
false
console.log(str instanceof string);//
false
console.log(und instanceof object);//
false
console.log(arr instanceof array);//
true
console.log(nul instanceof object);//
false
console.log(obj instanceof object);//
true
console.log(fun instanceof function);//
true
var bool2 = new
boolean()
console.log(bool2
instanceof boolean);//
true
var num2 = new
number()
console.log(num2
instanceof number);//
true
var str2 = new
string()
console.log(str2
instanceof string);//
true
function
person(){}
var per = new
person()
console.log(per
instanceof person);//
true
function
student(){}
student.prototype = new
person()
var haoxl = new
student()
console.log(haoxl
instanceof student);//
true
console.log(haoxl instanceof person);//
true
結論:從結果中看出instanceof不能區別undefined和null,而且對於基本型別如果不是用new宣告的則也測試不出來,對於是使用new宣告的型別,它還可以檢測出多層繼承關係。
3. 使用constructor
undefined和null沒有contructor屬性
console.log(bool.constructor === boolean);//true
console.log(num.constructor === number);//
true
console.log(str.constructor === string);//
true
console.log(arr.constructor === array);//
true
console.log(obj.constructor === object);//
true
console.log(fun.constructor === function);//
true
console.log(haoxl.constructor === student);//
false
console.log(haoxl.constructor === person);//
true
結論:constructor不能判斷undefined和null,並且使用它是不安全的,因為contructor的指向是可以改變的
4. 使用object.prototype.tostring.call
console.log(object.prototype.tostring.call(bool));//[object boolean]
console.log(object.prototype.tostring.call(num));//
[object number]
console.log(object.prototype.tostring.call(str));//
[object string]
console.log(object.prototype.tostring.call(und));//
[object undefined]
console.log(object.prototype.tostring.call(nul));//
[object null]
console.log(object.prototype.tostring.call(arr));//
[object array]
console.log(object.prototype.tostring.call(obj));//
[object object]
console.log(object.prototype.tostring.call(fun));//
[object function]
function
person(){}
function
student(){}
student.prototype = new
person()
var haoxl = new
student()
console.log(object.prototype.tostring.call(haoxl));
//[object object]
結論:原理(摘自高階程式設計3):在任何值上呼叫 object 原生的 tostring() 方法,都會返回乙個 [object nativeconstructorname] 格式的字串。每個類在內部都有乙個 [[class]] 屬性,這個屬性中就指定了上述字串中的建構函式名。
但是它不能檢測非原生建構函式的建構函式名。
js檢測資料型別
要檢測乙個變數是不是基本資料型別?typeof 操作符是最佳的工具。說得更具體一 點,typeof 操作符是確定乙個變數是字串 數值 布林值,還是undefined 的最佳工具。如果變 量的值是乙個物件或null,則typeof 操作符會像下面例子中所示的那樣返回 object var s nich...
JS資料型別檢測
在js的日常使用中,經常需要檢測資料的型別,現在,就來看一下,js有哪些方法可以檢測資料的型別。typeof操作符返回乙個字串,表示未經計算的運算元的型別。typeof是js原生提供用來檢測型別的api,然而,並沒有什麼用。為什麼呢?因為,typeof不能準確地檢測出我們所想要知道的資料的型別。ty...
JS 資料型別檢測
tpeof val 用來檢測資料型別的運算子。基於typeof檢測出來的結果 首先是乙個字串 字串中是對應的型別 侷限性 typeof null object 但是null並不是物件 基於typeof 無法細分出當前值是普通物件還是陣列物件等,只要是物件型別,返回結果都是 object typeof...