不同类型值的toString方法:

//Number
const num = 123;
num.toString();        // '123'
(123).toString();      // '123' 整数必须赋值给变量后或放在括号中再调用toString
1.23.toString();       // '1.23' 小数可直接调用NaN.toString();        // 'NaN'
Infinity.toString();   // 'Infinity'-Infinity.toString();  // -Infinity 根据运算符优先级关系,先执行toString再将String转为Number//数字通过toString进行进制转换
num.toString();        // '123' 默认转为十进制
num.toString(2);       // '1111011'
num.toString(8);       // '173'
num.toString(16);      // '7b'//Array
[1,2,3].toString();    // '1,2,3' 结果与数组的join()方法相同//Object
({}).toString();       // "[object Object]"//Function
const func = function(){};
func.toString();       // "function(){}"//Boolean
const t = true, f = false;
t.toString();          // 'true' 返回对应字符串
f.toString();          // 'false' //undefined、null对象没有toString方法

Object.toString与Object.prototype.toString的区别

首先明确一下toString相同的调用方式:

console.log(toString === window.toString); // true
console.log(window.toString === Object.prototype.toString); // true

Object原型链上的toString方法可以用于对象类型的判断,如常用的区分数组与普通对象。(参考文章)

Object.prototype.toString.call('');                            //[object String]
Object.prototype.toString.call(1);                             //[object Number]
Object.prototype.toString.call(true);                          //[object Boolean]
Object.prototype.toString.call([]);                            //[object Array]
Object.prototype.toString.call({});                            //[object Object]
Object.prototype.toString.call(undefined);                     //[object Undefined]
Object.prototype.toString.call(null);                          //[object Null]
Object.prototype.toString.call(new Function());                //[object Function]
Object.prototype.toString.call(new Date());                    //[object Date]
Object.prototype.toString.call(new RegExp());                  //[object RegExp]
Object.prototype.toString.call(new Error());                   //[object Error]Object.prototype.toString.call(document);                      //[object HTMLDocument]
document.toString();                                           //[object HTMLDocument]
Object.prototype.toString.call(window);                        //[object Window]
window.toString();                                             //[object Window]//toString通过原型链调用Object.prototype.toString,可达到同样效果
toString.call([]);                                             //[object Array]

由此而引出疑问,为何通过Object.toString的方式不能调用原型链上的toString方法呢?

虽然所有对象的原型链最顶端都是Object.prototype,但同时Object本身也是一个构造函数,继承于Function,调用Object.toString最终通过原型链调用的是Function.prototype.toString。相关关系如下:

Object.prototype.__proto__ === null; // true
Function.prototype.__proto__ === Object.prototype; //trueObject.toString === Function.prototype.toString; //true

JS内置对象即构造函数的toString方法

Number、String,Boolean,Array,RegExp、Date、Function等内置对象均重写了Object原型上的toString方法,作用为将当前数据类型转为字符串类型。

Number.toString();           // "function Number() { [native code] }"
String.toString();           // "function String() { [native code] }"
Boolean.toString();          // "function Boolean() { [native code] }"
Array.toString();            // "function Array() { [native code] }"
RegExp.toString();           // "function RegExp() { [native code] }"
Date.toString();             // "function Date() { [native code] }"
RegExp.toString();           // "function RegExp() { [native code] }"
Function.toString();         // "function Function() { [native code] }"

JS中的toString、Object.toString、Object.prototype.toString相关推荐

  1. 由Object.prototype.toString.call( )引发关于toString( )方法的思考

    引言 前端面试中有这么一道经典的问题,如何判断一个对象是否为数组? ES5提供了一个确定对象是否为数组的函数 Array.isArray(object); 复制代码 其中,object是必须的,表示要 ...

  2. JS中Prototype属性解释及常用方法

    1.prototype的定义 javascript中的每个类都有prototype属性,其prototype属性的解释是:返回对象类型原型的引用.每一个构造函数都有一个属性叫做原型.这个属性非常有用: ...

  3. 关于js中的时间处理

    关于js编程, 主要是, 绝大部分是用 jquery. 但是, js原生的一些方法和属性也是要掌握的, 这个只是在 遇到的时候, 记一下就好了, 如: event的relatedTarget属性: 主 ...

  4. 说说JS中的浅拷贝与深拷贝

    outline: 为什么要说JS中深拷贝与浅拷贝 JS对类型的分类 immutable与mutable 简单类型检测 浅拷贝VS深拷贝 为什么要说JS中深拷贝与浅拷贝 近来在研读underscore的 ...

  5. js中的暂停和异步问题

    除了Narrative JS,jwacs(Javascript With Advanced Continuation Support)  也致力于通过扩展JavaScript语法来避免编写让人头痛的异 ...

  6. js中的sleep、pause 实现

    除了Narrative JS,jwacs(Javascript With Advanced Continuation Support)  也致力于通过扩展JavaScript语法来避免编写让人头痛的异 ...

  7. JS中常见的几种继承

    1原型链继承 子类构造函数.prototype = 父类的实例; 子类构造函数.prototype.constructor = 子类构造函数 特点: 1.js继承是把父类的原型放到子类的原型链上,实例 ...

  8. Js中自定义对象四种方式

    Js中自定义对象四种方式 1 类似JAVA有参构造方式: 1.定义对象: function 对象(属性[age]){追加属性:如(this.age = age)[this代表当前对象的地址值的引用]追 ...

  9. js定义全局变量 vue页面_vue.js中如何定义全局变量?

    vue.js中如何定义全局变量?下面本篇文章给大家介绍一下在 Vuejs 项目中如何定义全局变量.有一定的参考价值,有需要的朋友可以参考一下,希望对大家有所帮助. 在 Vuejs 项目中如何定义全局变 ...

  10. js中关于类及类继承

    在面向对象的程序设计语言中,类和类之间有显式的继承关系,一个类可以显式的指定继承了哪个类,子类将具有父类的所有属性和方法.js虽然也支持类.对象的概念,但没有继承的概念,只能通过特殊的手段来扩展原有的 ...

最新文章

  1. python中关于sqlite3数据库删除数据的使用
  2. block为什么用copy以及如何解决循环引用
  3. 微信自定义tabbar有小红点_自定义微信小程序tabBar组件上边框的颜色
  4. ubuntu安装后需了解的基本操作
  5. WinForm的App.config
  6. python 通信模块_python 多进程通信模块
  7. django orm_Django ORM简介
  8. 史上最拉风年货?苏宁门店私人飞机开售 网友:这个真香不了吧
  9. java项目qq聊天室_简单的qq聊天室项目(作者涂俊伟)
  10. 第三百九十一节,Django+Xadmin打造上线标准的在线教育平台—404,403,500页面配置...
  11. POJ NOI MATH-7656 李白的酒
  12. 你真的懂病毒式营销吗
  13. Git 版本控制原理
  14. 光功率 博科交换机_交换机是否支持查看光模块型号及收发光功率
  15. nginx配置Strict Transport Security
  16. scala特征加工中的报错记录和调试
  17. 单片机IO口低电平不为0V
  18. mini2440----keil for AMR之IIC读写EEPROM(AT24C08)
  19. linux 参数解析,Linux 命令行参数解析
  20. (面经总结)一篇文章带你整理面试过程中关于OSI 七层模型的相关知识

热门文章

  1. layui java_LayUI 的安装及使用LayUI 的介绍
  2. 初中计算机应用微课的教学设计,信息技术微课教案
  3. 自学编程和计算机科班出身的差别在哪里
  4. 《Continual lifelong learning with neural networks : A review》阅读笔记
  5. 干货!通过结合答案相关性改进以查询为中心的自动文本摘要
  6. 星空主题设计理念_星空规划设计说明
  7. hcl新华三 vlan实验
  8. dialog弹出时,点击dialog之外的地方时,dialog不消失。
  9. 协同过滤与隐语义模型推荐系统实例3: 基于矩阵分解(SVD)的推荐
  10. 污水处理程序西门子Wincc+S7-300污水处理大项目 带西门子Wincc上位机+S7-300程序