主要参考
- Object.prototype.toString() - JavaScript | MDN
- Function.prototype.toString() - JavaScript | MDN
- Boolean.prototype.toString() - JavaScript | MDN
- Error.prototype.toString() - JavaScript | MDN
- Number.prototype.toString() - JavaScript | MDN
- String.prototype.toString() - JavaScript | MDN
- Array.prototype.toString() - JavaScript | MDN
- Date.prototype.toString() - JavaScript | MDN
转型函数String()
该方法的具体转换规则可分为以下三种情况:
null
值直接返回"null"
;undefined
值直接返回"undefined"
;其他类型的参数直接调用其
toString()
方法,并返回对应值。
各类型对象的toString()方法
此处仅讨论JavaScript中常见基础内置对象所定义的toString()
方法表现:
Object.prototype.toString()
返回值为:[object type]
可用来检测对象类型:
var toString = Object.prototype.toString; console.log(toString.call(new Object())); // "[object Object]" console.log(toString.call(new Date())); // "[object Date]" console.log(toString.call(null)); // "[object Null]" console.log(toString.call(undefined)); // "[object Undefined]"
按照原型链的查找规则,各类型对象直接调用
toString()
时,将优先调用自身重写的toString()
方法,此处注意区分结果值。
Function.prototype.toString()
对于用户定义的
Function
对象,将返回包含函数源码定义的字符串;对于内置函数对象或通过
Function.prototype.bind
生成的绑定新函数,将返回"function () {\n [native code]\n}"
,示例如下:function foo() { console.log("123"); } console.log(foo.bind("321").toString()); /* * function bound foo() { * [native code] * } */
Boolean.prototype.toString()
将根据对象的布尔值来返回
"true"
或"false"
Error.prototype.toString()
方法实现的具体语义可描述如下:
Error.prototype.toString = function() { 'use strict'; var obj = Object(this); if(obj !== this) { // Object(null) or Object(undefined): create and return an empty object throw new TypeError(); } var name = this.name; name = (name === undefined) ? 'Error' : String(name); var msg = this.message; msg = (msg === undefined) ? '' : String(msg); if(name === '') { return msg; } if(msg === '') { return name; } return name + ': ' + msg; }
Number.prototype.toString()
语法:
numObj.toString([radix])
该方法包含一个可选参数radix,用来指定数值基数(2-36),缺省为10,超出范围时将报错
如果数值包含负号,则返回值中也将保留负号
String.prototype.toString()
该方法返回值等同于
String.prototype.valueOf()
,将直接返回对象的字符串表示Array.prototype.toString()
将数组中各元素连接,并以逗号分隔,返回字符串:
var arr = ["aa", "bb", 123, 321]; console.log(arr.toString()); // "aa,bb,123,321"
实际数组中元素的返回也是调用各自的
toString()
方法:var arr = [{ "aa" : 123 }, { "bb" : 321 }]; console.log(arr.toString()); // "[object Object],[object Object]"
Date.prototype.toString()
将返回ECMA-262中定义的时间描述格式,如下示例:
console.log(new Date().toString()); // "Thu Sep 20 2018 15:09:22 GMT+0800"
可大致总结为:
[WeekDay] [MonthName] [Date] [Year] [Hour]:[Minute]:[Second] GMT[TimezoneOffsetSign: +/-][HourOffet][MinuteOffset]