判断数据类型

简介: 判断数据类型的偏方很多,但是很多就不是那么的特别准确,比如 typeof  没法判断是 Object 还是Array。通用方法就是查找该数据类型的原型。首先我们宏观的知道下,在 JavaScript 中所有的类型如果没有指明继承某个类型,则默认是继承的 Object 类型。

判断数据类型的偏方很多,但是很多就不是那么的特别准确,比如 typeof  没法判断是 Object 还是Array。

通用方法就是查找该数据类型的原型。

首先我们宏观的知道下,在 JavaScript 中所有的类型如果没有指明继承某个类型,则默认是继承的 Object 类型。这种 默认继承也是通过原型链的方式完成的。

可以理解 Array 继承了 Object,Number 继承了 Object 等。

来微观的理解下,这些关系。

Object 的原型:

object 的原型中有这些 属性或方法,一看我们就很直观的可以认为 这个 Object.prototype 是一个对象,正应了我们之前学习的 原型也是一个对象

 来看看 Array 的原型

图片有点长,就是截图全点,看到下面的 __proto__ 这个属性。 对比这里 __proto__ 再看看Object 的 prototype ,看看,是不是一毛一样啊! 眼镜有欺骗的嫌疑,我们用计算机代码说出事实。

对比这个直接翻译一下: 数组的原型的属性__proto__  等于 对象的原型。好像没明白这个意思。。。,这就是我们之前理解的 数组的原型对象继承了的 Object 的原型对象,怎么继承的?或者他们怎么关联的,就是通过这个 内部属性__proto__。

以上暂时理解这么多,下面接入正题,我们该如何正确的知道数据的类型是什么呢?

——————————————————————————————————————————————

来再看看 Object 的 prototype,

里面有个 toString 的方法,我们来调用下,返回了一个 "[object Object]" 的字符串

既然Array.prototype 也有toString 方法,那我们来调用一下。 返回的是一个空字符串。。。。 这是为啥呢,和Object 都有toString ( ),为啥我数组返回的就是一个空字符串。object 就能返回 一个 Object 的 字符串呢?纠结中,我哪不如人家对象了。。。。。 

不管为什么了,既然数组和对象有继承关系,那我数组不就是可以“借用” 我 “爹”的 能力了,这样想的话, call 和apply 就蹦出来了。

再来看看 number 

 集合一下:

这个方法就可以知道,我们能够很准确的判断我们的数据类型了。

 

结束:以上是我的个人看法,如果有不妥的地方,敬请批评指出,共同进步。

目录
相关文章
|
6月前
|
网络安全 Python
这个错误是由于在将字符串类型的值转换为字典类型时出现了问题
【2月更文挑战第20天】这个错误是由于在将字符串类型的值转换为字典类型时出现了问题
33 1
|
6月前
|
JavaScript 前端开发 索引
如何判断一个值是否在数组内?
如何判断一个值是否在数组内?
|
11天前
|
Python
布尔类型的值和类型
布尔类型的值和类型。
16 0
|
3月前
运算符有哪些?优先级是怎么样的?转换数据类型的方法?(最少4种)
运算符有哪些?优先级是怎么样的?转换数据类型的方法?(最少4种)
31 0
|
4月前
|
存储 Python
语音输入,python数据类型,type()用来查看数据类型,数据类型转换,int(x)转整数,float(x)转换为浮点数,str(x),将对象转为字符串,标识符,标识符不允许使用关键字,关键字参考
语音输入,python数据类型,type()用来查看数据类型,数据类型转换,int(x)转整数,float(x)转换为浮点数,str(x),将对象转为字符串,标识符,标识符不允许使用关键字,关键字参考
|
6月前
|
C++
【C++】istream类型对象转换为逻辑条件判断值
【C++】istream类型对象转换为逻辑条件判断值
【C++】istream类型对象转换为逻辑条件判断值
|
5月前
|
Dart
Dart之常用数据类型(字符串、数值、布尔、集合、映射)
Dart之常用数据类型(字符串、数值、布尔、集合、映射)
|
6月前
判断字符类型
该内容描述了一个字符判断和转换的逻辑:输入字符,根据条件进行操作。如果字符是大写字母,转为小写;如果是小写字母,转为大写;若是数字,输出其ASCII值;否则输出"错误"。判断条件包括:大写字母ASCII值在'A'和'Z'之间,小写字母在'a'和'z'之间,数字在'0'和'9'之间。转换利用ASCII值差32的特性,通过if-else if语句实现。内容中还包括两幅示例图片,显示了程序执行的结果。
44 1
|
6月前
|
存储 弹性计算 运维
判断用户输入的数据类型
【4月更文挑战第29天】
36 0
测试字符类型和布尔类型
测试字符类型和布尔类型
66 0
下一篇
无影云桌面