JavaScript toString 方法与判断数据类型
toString
toString(radix)方法:除 undefined 和 null 之外的所有类型的值都具有 toString() 方法,其作用是返回对象的字符串表示。
var o1 = new Object();
o1.toString(); // "[object Object]"
var o2 = { a: 1 };
o2.toString(); // "[object Object]"
字符串 [object Object] 本身没有太大的用处,但是通过自定义 toString 方法,可以让对象在自动类型转换时,得到想要的字符串形式。
当对象用于字符串加法时,会自动调用 toString 方法。由于自定义了 toString 方法,所以返回字符串 hello world。
var obj = new Object();
obj.toString = function () {
return 'hello';
};
console.log(obj + ' ' + 'world'); // "hello world"
数组、字符串、函数、Date 对象都分别部署了自定义的 toString 方法,覆盖了 Object.prototype.toString 方法。
[1, 2, 3].toString(); // "1,2,3"
'123'
.toString()(
// "123"
function () {
return 123;
},
)
.toString()(
// "function () {
// return 123;
// }"
new Date(),
)
.toString();
// "Tue May 10 2016 09:11:31 GMT+0800 (CST)"
上面代码中,数组、字符串、函数、Date 对象调用 toString 方法,并不会返回 [object Object],因为它们都自定义了 toString 方法,覆盖原始方法。
| 对象 | 返回值 |
|---|---|
| Array | 将 Array 的元素转换为字符串。结果字符串由逗号分隔,且连接起来。 |
| Boolean | 如果 Boolean 值是 true,则返回 “true”。否则,返回 “false”。 |
| Date | 返回日期的文字表示法。 |
| Error | 返回一个包含相关错误信息的字符串。 |
| Function | 返回如下格式的字符串,其中 functionname 是被调用 toString 方法函数的名称:function functionname( ) { [native code] }。 |
| Number | 返回数字的文字表示。 |
| Object | 返回 “[object objectname]”,其中 objectname 是对象类型的名称。 |
| String | 返回 String 对象的值。 |
toString() 的应用:判断数据类型
Object.prototype.toString 方法返回对象的类型字符串,因此可以用来判断一个值的类型。
var obj = {};
obj.toString(); // "[object Object]"
上面代码调用空对象的 toString 方法,结果返回一个字符串 object Object,其中第二个 Object 表示该值的构造函数。这是一个十分有用的判断数据类型的方法。
由于实例对象可能会自定义
toString方法,覆盖掉Object.prototype.toString方法, 所以为了得到类型字符串,最好直接使用Object.prototype.toString方法。通过函数的call方法,可以在任意值上调用这个方法,帮助我们判断这个值的类型。
Object.prototype.toString.call(value);
上面代码表示对 value 这个值调用 Object.prototype.toString 方法。
不同数据类型的 Object.prototype.toString 方法返回值如下。
- 数值:返回
[object Number]。 - 字符串:返回
[object String]。 - 布尔值:返回
[object Boolean]。 undefined:返回[object Undefined]。null:返回[object Null]。- 数组:返回
[object Array]。 arguments对象:返回[object Arguments]。- 函数:返回
[object Function]。 Error对象:返回[object Error]。Date对象:返回[object Date]。RegExp对象:返回[object RegExp]。- 其他对象:返回
[object Object]。
Object.prototype.toString.call(2); // "[object Number]"
Object.prototype.toString.call(''); // "[object String]"
Object.prototype.toString.call(true); // "[object Boolean]"
Object.prototype.toString.call(undefined); // "[object Undefined]"
Object.prototype.toString.call(null); // "[object Null]"
Object.prototype.toString.call(Math); // "[object Math]"
Object.prototype.toString.call({}); // "[object Object]"
Object.prototype.toString.call([]); // "[object Array]"
通过 toString 判断数据类型
var type = function (o) {
var s = Object.prototype.toString.call(o);
return s.match(/\[object (.*?)\]/)[1].toLowerCase();
};
type({}); // "object"
type([]); // "array"
type(5); // "number"
type(null); // "null"
type(); // "undefined"
type(/abcd/); // "regex"
type(new Date()); // "date"
<script>
// 将 Array 的元素转换为字符串。结果字符串由逗号分隔,且连接起来。
var arr = new Array(1, 'mio', '88');
// 数组测试: 1,mio,88
console.log('数组测试:', arr.toString());
// 如果 Boolean 值是 true,则返回 “true”。否则,返回 “false”。
var boolean = new Boolean(false);
// 布尔测试:"false"
console.log('布尔测试:', boolean.toString());
// 返回日期的文字表示法。
var date = new Date('2020-01-01 20:30:30');
// Date测试: Wed Jan 01 2020 20:30:30 GMT+0800 (中国标准时间)
console.log('Date测试:', date.toString());
// 返回如下格式的字符串,其中 functionname 是被调用 toString 方法函数的名称:function functionname( ) { [native code] }
var fun = new Function();
console.log('函数测试:', fun.toString());
// 数字值。
var number = new Number(3.14);
// 数字测试: 3.14
console.log('数字测试:', number.toString());
// 对象本身
var obj = new Object({});
// 对象测试: [object Object]
console.log('对象测试:', obj.toString());
// 字符串值
var str = new String('3.1415');
// 字符串测试: 3.1415
console.log('字符串测试:', str.toString());
// true
console.log(str.toString() === str.valueOf());
</script>

还没有留言,来发表第一条吧~