位置:首頁 > 軟件操作教程 > 編程開發(fā) > JavaScript > 問題詳情

JavaScript 使用 toString

提問人:劉團圓發(fā)布時間:2020-11-23

■知識點

在對象上調(diào)用Object的原型方法toString(),就會返回統(tǒng)一格式的字符串表示。例如:

var _toString = Object .prototype. toString; //引用Object 的原型方法 toString ()

//使用apply方法在對象上動態(tài)調(diào)用Object的原型方法toString ()

console. log ( _toString.apply ( o    )); //表示為"[object  Object]"

console. log ( _toString.apply ( a    )); //表示為"[object  Array]"

console. log ( _toString.apply ( f    )); //表示為"[object  Function]"

    仔細分析不同類型對象的toString()方法返回值,會發(fā)現(xiàn)由Object的原型方法toString()直接返回的字 符串的格式如下:

[object Class]

    其中,object表示對象的基本類型,Class表示對象的子類型,子類型的名稱與該對象的構(gòu)造函數(shù)名一一對應(yīng)。例如,Object 對象的Class 為 Object, Array 對象的 Class 為 Array,F(xiàn)unction 對象的 Class 為 Function, Date 對象的 Class 為 Date,Math 對象的 Class 為 Math,Error 對象(包括 Error 子類)的 Class 為Error等。

    宿主對象也有預(yù)定的Class值,如Window、Document和Form等。用戶自定義的對象的Class為 Object。用戶自定義的類型,可以根據(jù)這個格式自定義類型表示。

    Class值提供的信息與constructor屬性值都能夠檢測數(shù)據(jù)類型,但是Class值是以字符串的形式提供這些信息,這在開發(fā)環(huán)境中是非常有用的。而使用typeof運算符進行類型檢測,由于其返回的字符串表示比較有限,無法準(zhǔn)確分辨Object、Function和Army等類型。

■實例設(shè)計

    設(shè)計typeOfO方法,利用其返回的數(shù)據(jù)類型的字符串表示,可以設(shè)計一種更安全、更強健的類型檢測方法。

function typeOf(obj){

    var str = Object.prototype.toString.call(obj); 

    return str.match(/\[object (.*?)\]/) [1].toLowerCase();

};

console.log( typeOf({}) ) ; //"object"

console.log( typeOf([]) ); //"array"

console.log( typeOf(0) ); //"number"

console.log( typeOf(null));      //"null"

console.log( typeOf(undefined)); //"undefined"

console.log( typeOf(/ /));       //"regex"

console.log( typeOf(new Date()));//"date"

    在上面檢測的函數(shù)中,模擬typeof運算符的返回值格式,設(shè)計所有類型返回的字符串表示都以小寫 的單個詞來表示。

    在typeOfO方法的基礎(chǔ)上擴展方法,專門檢測某種類型數(shù)據(jù)。

['Null','Undefined', 'Object', 'Array', 'String', 'Number', 'Boolean', 'Function', 'RegExp'].forEach(function (t) {

    typeOf['is' + t] = function (o) {

        return typeOf(o) === t.toLowerCase ();

    };

});

console.log( typeOf.isObject({}) ); //true

console.log( typeOf.isNumber(NaN) ); //true

console.log( typeOf.isRegExp(true) ); //false

繼續(xù)查找其他問題的答案?

相關(guān)視頻回答
回復(fù)(0)
返回頂部