辨別類型、判斷對象屬性是否存在

辨別類型

javaScript目前共有7種類型,number、string、undefined、null、boolean、object、symbol。
Array 和function 是object的一個子類型。

/*===== 辨別類型 =====*/
console.log(typeof 42 === "number") // true
console.log(typeof '42' === "string") // true
console.log(typeof undefined === "undefined") // true
console.log(typeof true === "boolean") // true
console.log(typeof {} === "object") // true
console.log(typeof Symbol() === "symbol") // true

/*===== 特殊類型 (空值、數(shù)組、函數(shù)) =====*/
console.log(typeof null === "object") // true -- null為object是個bug
console.log(typeof [1, 2, 3] === "object") // true 
console.log(typeof
    function doSomething(a, b) {} === "function") // true
// 函數(shù)的屬性
function doSomething(a, b) {}
console.log(doSomething.length) // 2

辨別空值的方法

var a = null
// 方法1 判斷a為空并且是對象
console.log(!a && typeof a === "object") // true
// 方法2 跨原型鏈調用toString() (推薦)
console.log(Object.prototype.toString.call(null)) // [object Null]

辨別數(shù)組的方法

var myArr = [1, 2, 3]
// 方法1 isPrototypeOf() -- 判斷myArr是否在Array的原型鏈中
console.log(Array.prototype.isPrototypeOf(myArr)) // true 

// 方法2 instanceof 實際是在檢測對象的繼承關系,不可靠 (不推薦)
// myArr屬于Array(Array是JS中的內置構造函數(shù))
// 此方法雖然可用,但難于理解,并且會有異常情況產(chǎn)生錯誤判斷
console.log(myArr instanceof Array) // true 

// 方法3 跨原型鏈調用toString() (推薦)
console.log(Object.prototype.toString.call(myArr)) // [object Array]
console.log(Object.prototype.toString.call(myArr).match(/^\[object\s(.*)\]$/)[1] === 'Array') // true

// 方法4 Array.isArray(obj) (推薦) 
// 此方法屬于ES5的范疇,如需舊瀏覽器支持,需要做兼容處理
console.log(Array.isArray(myArr)) // true

// 方法5 constructor構造器屬性
console.log(myArr.constructor == Array) // true

寫個跨原型鏈調用toString()獲得object實際類型的函數(shù)

var money = null
var skillArr = ['js', 'css', 'html']

function getObjType(obj, objType) {
    return Object.prototype.toString.call(obj).match(/^\[object\s(.*)\]$/)[1] === objType
}
console.log(getObjType(money, 'Null')) // true
console.log(getObjType(skillArr, 'Array')) // true

判斷某個屬性是否存在于某個對象中

function Animal() {} //定義Animal構造函數(shù)
Animal.prototype = { //定義Animal原型
    species: "動物",
    say: function () {
        console.log('i can say word')
    }
}
var cat = new Animal()

var MyAnimal = {
    species: '動物',
    say: function () {
        console.log('i can say word')
    }
}

// 方法1 hasOwnProperty()
console.log(Animal.hasOwnProperty('species')) // false -- 不是自有屬性
console.log(MyAnimal.hasOwnProperty('species')) // true -- 是自有屬性
// 方法2 in
console.log('species' in cat) // true -- 包含該屬性,可以非自有

辨別非數(shù)字

var a =2
Number.isNaN(a) // false

判斷兩個值絕對相等

var a = 2/"foo"  // NaN
var b = -3*0   // -0

Object.is(a, NaN)  // true
Object.is(b, -0)   // true
Object.is(b, 0)   // false
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

友情鏈接更多精彩內容