1、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; //true Object.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] }"

  demo:https://www.cnblogs.com/youhong/p/6209054.html

Object.toString与Object.prototype.toString区别的更多相关文章

  1. typeof 和 Object.prototype.toString.call 数据类型判断的区别

    使用 typeof 来判断数据类型,只能区分基本类型,即 “number”,”string”,”undefined”,”boolean”,”object” 五种. 但 Object.prototype ...

  2. 前端面试题1:Object.prototype.toString.call() 、instanceof 以及 Array.isArray()三种方法判别数组的优劣和区别

    1. Object.prototype.toString.call() 每一个继承 Object 的对象都有 toString 方法,如果 toString 方法没有重写的话,会返回 [Object ...

  3. instance of type of object.prototype.tostring 区别

    typeof typeof 是一个操作符,其右侧跟一个一元表达式,并返回这个表达式的数据类型.   返回的结果用该类型的字符串(全小写字母)形式表示,包括以下 6 种:   number.boolea ...

  4. Object.prototype.toString.call()和typeof()区别

    js中判断数据类型都知道用tyoeof(),但是他只能判断object,boolean,function,string,number,undefined还有symbol(es6新增)这几种初步类型,比 ...

  5. instanceof, typeof, & Object.prototype.toString

    /** * * @authors Your Name (you@example.org) * @date 2016-11-18 09:31:23 * @version $Id$ */instanceo ...

  6. Object.prototype.toString.call() 区分对象类型

    判断一个对象的类型: /** * 判断对象是否为数组 * @param {Object} source 待判断的对象 * @return {Boolean} true|false */ Object. ...

  7. Object.prototype.toString.call() 区分对象类型(判断对象类型)

    在 JavaScript 里使用 typeof 来判断数据类型,只能区分基本类型,即 “number”,”string”,”undefined”,”boolean”,”object” 五种.对于数组. ...

  8. Object.prototype.toString.call()

    源码中有这样一段: class2type = {}, toString = class2type.toString,   function type(obj) { //obj为null或者undefi ...

  9. 从toString()方法到Object.prototype.toString.call()方法

    一.toString方法和Object.prototype.toSting.call()的区别 var arr=[1,2]; 直接对一个数组调用toString()方法, console.log(ar ...

  10. 关于toString()和valueOf()以及Object.prototype.toString.call()的结合理解

    一.先说说String(): String()是全局函数,把对象的值转换为字符串. 语法:String(obj); 任何值(对象)都有String()方法,执行过程是这样的:首先,如果该对象上有toS ...

随机推荐

  1. Day17-JavaSE总结

    不多说了,直接去看视频吧! 链接 完结撒花!!!

  2. 10 soundJs 初体验

    最近想做一个h5的小游戏所以用上了soundjs. 还在开发中  http://www.hetenglife.com/mouse/game.html 刚刚把控制做完. 首先是要导入这个文件 <s ...

  3. 【redis-cli】常用命令

    -- 查看数据库下key存储数 redis-cli INFO | grep ^db -- 选择数据库 select [0-15] -- 列出所有key keys * -- 列出key模糊匹配 keys ...

  4. 核函数(kernel function)

    在接触反演.算法等方面的知识后,经常听到"核"这个字,它不像对原始变量的线性变换,也不像类似于机器学习中激活函数那样的非线性变换,对原始数据进行变换,就可以将复杂的问题简单化.接下 ...

  5. 创建一个HashMap实例,该实例具有足够高的“初始容量”

    创建一个HashMap实例,该实例具有足够高的"初始容量" /** * 创建一个{@link HashMap}实例,该实例具有足够高的"初始容量" * * @p ...

  6. C# core 最简单的方式写入日志

    System.IO.StreamWriter sw = System.IO.File.AppendText( LogPath + LogFielPrefix + "Error-" ...

  7. Bug的前后台分类及定位技巧

    必备工具:Firefox debug工具 一般浏览器F12即可   如何区分页面的bug问题归属:前端or后端 前端bug主要分为3个类别:HTML,CSS,Javascript三类问题 给个最大的区 ...

  8. 搭建sftp服务器

    sftp采用的是ssh加密隧道,安装性方面较ftp强,而且依赖的是系统自带的ssh服务,不像ftp还需要额外的进行安装 1.  创建sftp组 # groupadd sftp   创建完成之后使用ca ...

  9. 如何找到并使用makecert.exe

    如果安装visual studio 后,visual studio command  仍然无法识别 makecert.exe 命令. 则需要手动安装 Windows Software Developm ...

  10. 【Docker】Postgres 安装

    1.docker pull postgres 2.docker run --name postgres -v /home/postgre/data:/var/lib/postgresql/data - ...