关于 toString 方法在有关js的开发中使用应该是相当广泛的,这两天在看jQuery的源码,从 toString 本身了解与巩固了不少知识,写出来与大家一同分享。
首先先上一段代码:

var arr=[1,2,3];
toString.call(arr);

来看一下效果:

众所周知,判断数据类型,我们大多会使用typeof操作符,但是typeof操作符只能判断基本数据类型,对于复杂的数据类型一律返回object,而使用toString方法在这里可以做一个很好的补充。

问:为什么要使用toString.call(arr),而不能直接使用arr.toString()
再上一段代码:

var arr=[1,2,3];
toString.call(arr);
arr.toString();

来看一下效果:

很明显直接使用toString,得不到我们想要的效果,博主第一次看到这个结果时也是一脸懵逼。

其实,这里面就涉及到js原型及原型链的相关知识
再上一段代码:

var arr=[1,2,3];
Object.prototype.toString.call(arr);
Array.prototype.toString.call(arr);

来看一下效果:

看到这里大家都应该明白了,其实只有Object.prototype上的toString才能用来进行复杂数据类型的判断。

简单解释一些原型链的概念:
我们都知道js中的对象都继承自Object,所以当我们在某个对象上调用一个方法时,会先在该对象上进行查找,如果没找到则会进入对象的原型(也就是.prototype)进行查找,如果没找到,同样的也会进入对象原型的原型进行查找,直到找到或者进入原型链的顶端Object.prototype才会停止。

所以,当我们使用arr.toString()时,不能进行复杂数据类型的判断,因为它调用的是Array.prototype.toString,虽然Array也继承自Object,但js在Array.prototype上重写了toString,而我们通过toString.call(arr)实际上是通过原型链调用了Object.prototype.toString

javascript-从toString方法在判断复杂数据类型上的妙用,引申到对原型链的理解...相关推荐

  1. JavaScript原型链的理解

    一.原型链的概念 JavaScript是一门面向对象的编程语言,JavaScript 中的所有事物都是对象,并且对象与对象之间不是彼此独立的,而是有"继承"关系的. 这种" ...

  2. JavaScript高级第2天:定义函数的三种方式、函数的原型链结构、完整原型链、作用域以及作用域链、函数的四种调用模式、闭包、计数器、斐波那契数列优化、三种继承方式

    JavaScript高级第二天 01-定义函数的三种方式 1.函数声明 function:可以先调用再声明,因为预解析(把函数声明.变量声明进行提升) function fn() {//函数体conl ...

  3. 【javascript】对原型对象、原型链的理解

    原型对象,原型链这些知识属于基础类知识.但是平时开发过程中也很少用到. 看网上的意思,原型链用于es5开发场景下的继承.es6有了类语法糖之后,就自带继承了. 通过理解,个人画了一张原型链解构的关系图 ...

  4. JavaScript apply 和 call 和 bind,原型和原型链的理解

    apply 和 call 改变 this 指向 apply 和 call 都可以让函数或方法调用 apply 第二参数是数组 call 参数是多个值 function f1(x,y){return x ...

  5. 进击的 JavaScript 之(七) 原型链

    原文链接:周大侠啊 进击的 JavaScript (七) 之 原型链 算是记录一下自己的学习心得吧,哈哈 首先说一下,函数创建的相关知识 在JavaScript中,我们创建一个函数A(就是声明一个函数 ...

  6. 研究一下valueOf与toString方法

    基本上,所有JS数据类型都拥有valueOf和toString这两个方法,null除外.它们俩解决javascript值运算与显示的问题. JavaScript 的 valueOf() 方法 valu ...

  7. toString()方法作用

    toString()方法作用 1.把数据转换成字符串 (1)不同数据据类型,调用的toString方法都是该数据各自类型的原型链上的toString (2)把数值转换成对应进制的数字字符串 例如:co ...

  8. Java记录 -45- List的toString方法

    在使用集合时,都习惯性的使用循环遍历其中的每个元素. 想知道集合中的每个元素的信息,是不是必须要循环遍历每个元素呢? 比如在打印日志信息时,有些集合如List需要记录下来,一般都使用循环遍历集合,将集 ...

  9. JavaScript原型彻底理解2---继承中的原型链

    一.继承的概念 继承是所有的面向对象的语言最重要的特征之一.大部分的oop语言的都支持两种继承:接口继承和实现继承.比如基于类的编程语言Java,对这两种继承都支持.从接口继承抽象方法 (只有方法签名 ...

最新文章

  1. CVPR2021|CenterPoint :基于点云数据的3D目标检测与跟踪
  2. 《R语言数据挖掘》----1.12 数据集成
  3. 为何计算机科学领域的女性不多?
  4. PostgreSQL 10.1 手册_部分 II. SQL 语言_第 12 章 全文搜索_12.9. GIN 和 GiST 索引类型
  5. android xutils3.0获取服务器图片,Android端使用xUtils3.0实现文件上传
  6. [大數據、Big Data、巨量資料、海量資料]之分析模式工具
  7. java swing最小化_Java swing 窗口最小化到任务栏 点击右键显示菜单(复制代码即可运行查看效果)...
  8. nyoj116士兵杀敌2
  9. was not declared in this scope
  10. email邮件中 内嵌iframe_Python+Selenium执行结果,封装函数,用Python自动发送SMTP邮件...
  11. 微服务升级_SpringCloud Alibaba工作笔记0021---Nacos之DataId配置
  12. 各纬度气候分布图_气候分布图纬度_世界气候气压带风带分布图要图(需要表识纬度)_滁州气象...
  13. php调java_php调java接口
  14. 银联标准之MAC算法实现(POS终端加密)
  15. Fluent的融化凝固模型介绍
  16. native、方法区
  17. flac文件转wav_WAV文件真的比FLAC更好吗?
  18. Unity3D学习记录——NGUI Sprit
  19. perl范围声明our,my,local
  20. 华为为何不上市?任正非:猪养太肥懒得哼声

热门文章

  1. bzoj 4017: 小Q的无敌异或
  2. iOS-推送通知详解
  3. 如何实现TextBox与DropDownList的级联
  4. 1.5 欠拟合和过拟合
  5. 数据结构笔记(三十二)--二叉排序树的基本概念与查找
  6. html 链接 vf,VFP中超链接实现方法
  7. winform定义数据源名称_WinForm中使用CrystalReport水晶报表——基础,分组统计,自定义数据源...
  8. php常考面试题,面试常见的几道PHP面试题
  9. 字符串函数-STUFF函数
  10. android html模板下载地址,Android HTML模板