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

JavaScript 使用 toString

提問人:劉團(tuán)圓發(fā)布時(shí)間:2020-11-23

■知識(shí)點(diǎn)

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

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

//使用apply方法在對(duì)象上動(dòng)態(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]"

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

[object Class]

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

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

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

■實(shí)例設(shè)計(jì)

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

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"

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

    在typeOfO方法的基礎(chǔ)上擴(kuò)展方法,專門檢測(cè)某種類型數(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)
返回頂部