位置:首页 > 软件操作教程 > 编程开发 > JavaScript > 问题详情

JavaScript 使用 toString

提问人:刘团圆发布时间:2020-11-23

■知识点

在对象上调用Object的原型方法toString(),就会返回统一格式的字符串表示。例如:

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

//使用apply方法在对象上动态调用Object的原型方法toString ()

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

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

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

    仔细分析不同类型对象的toString()方法返回值,会发现由Object的原型方法toString()直接返回的字 符串的格式如下:

[object Class]

    其中,object表示对象的基本类型,Class表示对象的子类型,子类型的名称与该对象的构造函数名一一对应。例如,Object 对象的Class 为 Object, Array 对象的 Class 为 Array,Function 对象的 Class 为 Function, Date 对象的 Class 为 Date,Math 对象的 Class 为 Math,Error 对象(包括 Error 子类)的 Class 为Error等。

    宿主对象也有预定的Class值,如Window、Document和Form等。用户自定义的对象的Class为 Object。用户自定义的类型,可以根据这个格式自定义类型表示。

    Class值提供的信息与constructor属性值都能够检测数据类型,但是Class值是以字符串的形式提供这些信息,这在开发环境中是非常有用的。而使用typeof运算符进行类型检测,由于其返回的字符串表示比较有限,无法准确分辨Object、Function和Army等类型。

■实例设计

    设计typeOfO方法,利用其返回的数据类型的字符串表示,可以设计一种更安全、更强健的类型检测方法。

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"

    在上面检测的函数中,模拟typeof运算符的返回值格式,设计所有类型返回的字符串表示都以小写 的单个词来表示。

    在typeOfO方法的基础上扩展方法,专门检测某种类型数据。

['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

继续查找其他问题的答案?

相关视频回答
回复(0)
返回顶部