這次主要說說javascript的類型判斷函數typeof和判斷構造函數原型instanceof的用法和注意的地方。
先來說說typeof吧。首先要注意的是,typeof方法回傳一個字串,來表示資料的型別。
我們先來看看各個資料型態對應typeof的值:
資料型別 | Type |
---|---|
Type | |
“ object” | |
「boolean」 | |
「number」 | ) 新增元🜎 |
宿主物件(JS環境提供的,例如瀏覽器) | |
函數物件 | |
函數物件 | |
// Numbers typeof 37 === 'number'; typeof 3.14 === 'number'; typeof Math.LN2 === 'number'; typeof Infinity === 'number'; typeof NaN === 'number'; // 尽管NaN是"Not-A-Number"的缩写,意思是"不是一个数字" typeof Number(1) === 'number'; // 不要这样使用! // Strings typeof "" === 'string'; typeof "bla" === 'string'; typeof (typeof 1) === 'string'; // typeof返回的肯定是一个字符串 typeof String("abc") === 'string'; // 不要这样使用! // Booleans typeof true === 'boolean'; typeof false === 'boolean'; typeof Boolean(true) === 'boolean'; // 不要这样使用! // Symbols typeof Symbol() === 'symbol'; typeof Symbol('foo') === 'symbol'; typeof Symbol.iterator === 'symbol'; // Undefined typeof undefined === 'undefined'; typeof blabla === 'undefined'; // 一个未定义的变量,或者一个定义了却未赋初值的变量 // Objects typeof {a:1} === 'object'; // 使用Array.isArray或者Object.prototype.toString.call方法可以从基本的对象中区分出数组类型 typeof [1, 2, 4] === 'object'; typeof new Date() === 'object'; // 下面的容易令人迷惑,不要这样使用! typeof new Boolean(true) === 'object'; typeof new Number(1) ==== 'object'; typeof new String("abc") === 'object'; // 函数 typeof function(){} === 'function'; typeof Math.sin === 'function'; 登入後複製 | 我們會發現一個問題,就是typeof來判斷資料型別其實並不準確。例如數組、正規、日期、物件的typeof回傳值都是object,這就會造成一些誤差。 所以在typeof判斷類型的基礎上,我們還需要利用 |
我們來看看在相同資料類型的情況下,toString方法和typeof方法傳回值的差異: |
new String(“foo”)String
new Number(1.2) | Number | |
---|---|---|
boolean | new Boolean (true) | |
object | new Date() | |
object | new Array(1, 2, 3) | |
object | /abc/g | |
object |
以上是深入理解JavaScript中typeof和instanceof的區別的詳細內容。更多資訊請關注PHP中文網其他相關文章!