javascript-从toString方法在判断复杂数据类型上的妙用,引申到对原型链的理解...
关于 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方法在判断复杂数据类型上的妙用,引申到对原型链的理解...相关推荐
- JavaScript原型链的理解
一.原型链的概念 JavaScript是一门面向对象的编程语言,JavaScript 中的所有事物都是对象,并且对象与对象之间不是彼此独立的,而是有"继承"关系的. 这种" ...
- JavaScript高级第2天:定义函数的三种方式、函数的原型链结构、完整原型链、作用域以及作用域链、函数的四种调用模式、闭包、计数器、斐波那契数列优化、三种继承方式
JavaScript高级第二天 01-定义函数的三种方式 1.函数声明 function:可以先调用再声明,因为预解析(把函数声明.变量声明进行提升) function fn() {//函数体conl ...
- 【javascript】对原型对象、原型链的理解
原型对象,原型链这些知识属于基础类知识.但是平时开发过程中也很少用到. 看网上的意思,原型链用于es5开发场景下的继承.es6有了类语法糖之后,就自带继承了. 通过理解,个人画了一张原型链解构的关系图 ...
- JavaScript apply 和 call 和 bind,原型和原型链的理解
apply 和 call 改变 this 指向 apply 和 call 都可以让函数或方法调用 apply 第二参数是数组 call 参数是多个值 function f1(x,y){return x ...
- 进击的 JavaScript 之(七) 原型链
原文链接:周大侠啊 进击的 JavaScript (七) 之 原型链 算是记录一下自己的学习心得吧,哈哈 首先说一下,函数创建的相关知识 在JavaScript中,我们创建一个函数A(就是声明一个函数 ...
- 研究一下valueOf与toString方法
基本上,所有JS数据类型都拥有valueOf和toString这两个方法,null除外.它们俩解决javascript值运算与显示的问题. JavaScript 的 valueOf() 方法 valu ...
- toString()方法作用
toString()方法作用 1.把数据转换成字符串 (1)不同数据据类型,调用的toString方法都是该数据各自类型的原型链上的toString (2)把数值转换成对应进制的数字字符串 例如:co ...
- Java记录 -45- List的toString方法
在使用集合时,都习惯性的使用循环遍历其中的每个元素. 想知道集合中的每个元素的信息,是不是必须要循环遍历每个元素呢? 比如在打印日志信息时,有些集合如List需要记录下来,一般都使用循环遍历集合,将集 ...
- JavaScript原型彻底理解2---继承中的原型链
一.继承的概念 继承是所有的面向对象的语言最重要的特征之一.大部分的oop语言的都支持两种继承:接口继承和实现继承.比如基于类的编程语言Java,对这两种继承都支持.从接口继承抽象方法 (只有方法签名 ...
最新文章
- CVPR2021|CenterPoint :基于点云数据的3D目标检测与跟踪
- 《R语言数据挖掘》----1.12 数据集成
- 为何计算机科学领域的女性不多?
- PostgreSQL 10.1 手册_部分 II. SQL 语言_第 12 章 全文搜索_12.9. GIN 和 GiST 索引类型
- android xutils3.0获取服务器图片,Android端使用xUtils3.0实现文件上传
- [大數據、Big Data、巨量資料、海量資料]之分析模式工具
- java swing最小化_Java swing 窗口最小化到任务栏 点击右键显示菜单(复制代码即可运行查看效果)...
- nyoj116士兵杀敌2
- was not declared in this scope
- email邮件中 内嵌iframe_Python+Selenium执行结果,封装函数,用Python自动发送SMTP邮件...
- 微服务升级_SpringCloud Alibaba工作笔记0021---Nacos之DataId配置
- 各纬度气候分布图_气候分布图纬度_世界气候气压带风带分布图要图(需要表识纬度)_滁州气象...
- php调java_php调java接口
- 银联标准之MAC算法实现(POS终端加密)
- Fluent的融化凝固模型介绍
- native、方法区
- flac文件转wav_WAV文件真的比FLAC更好吗?
- Unity3D学习记录——NGUI Sprit
- perl范围声明our,my,local
- 华为为何不上市?任正非:猪养太肥懒得哼声
热门文章
- bzoj 4017: 小Q的无敌异或
- iOS-推送通知详解
- 如何实现TextBox与DropDownList的级联
- 1.5 欠拟合和过拟合
- 数据结构笔记(三十二)--二叉排序树的基本概念与查找
- html 链接 vf,VFP中超链接实现方法
- winform定义数据源名称_WinForm中使用CrystalReport水晶报表——基础,分组统计,自定义数据源...
- php常考面试题,面试常见的几道PHP面试题
- 字符串函数-STUFF函数
- android html模板下载地址,Android HTML模板