*#type.js
函數 Person(姓名, 年齡) {
this.name = 名稱;
this.age = 年齡;
}
var d = {an: '物件'};
var a = ['蘋果', '香蕉'];
var f = function() {};
var s = '大衛';
var n = 33;
var b = true;
var o = new Object();
var person = new Person('Mark', 22);
console.log(typeof(d) ': ' d.constructor);
console.log(typeof(a) ': ' a.constructor);
console.log(typeof(f) ': ' f.constructor);
console.log(typeof(s) ': ' s.constructor);
console.log(typeof(n) ': ' n.constructor);
console.log(typeof(b) ': ' b.constructor);
console.log(typeof(o) ': ' o.constructor);
console.log(typeof(person) ': ' person.constructor);
運行$node type.js得
物件: function Object() { [本機程式碼] }
物件: function Array() { [本機程式碼] }
函數: function Function() { [原生程式碼] }
字串: function String() { [本機程式碼] }
數字: function Number() { [本機程式碼] }
布林值: function Boolean() { [本地程式碼] }
物件: function Object() { [本機程式碼] }
物件: function Person() { [本機程式碼] }
可見,使用typeof操作符和constucor屬性檢測物件類型傳回值是存在差異的。
如果變數是數組,typeof運算子回傳object,建構子屬性回傳Array;
如果變數是建構函數對象,typeof操作符會傳回對象,建構子屬性會傳回該建構子
每個變數都有其建構屬性,該屬性不單一提供了這個是否是對象,也提供了這個物件是什麼類型的對象。 總之,建構函數屬性保存了一個指向物件的建構函數,無論是自訂的還是原生類型的物件。
有一點要注意的是,不同的瀏覽器對 typeof 運算子偵測正規表示式會有所不同,IE 和 Firefox 會回傳「object」。
好了,今天的內容就先到這裡了,小夥伴們如有疑問,就在下方留言吧。