第四节检测数据类型4种方式

1、typeof  用来检测数据类型的运算符
使用typeof检测数据类型,首先返回的都是一个字符串,其次字符串中包含了对应的数据类型,比如:"number","undefined","string","boolean","function","object"
局限性:type null---->"object"
不能细分是数组还是正则,还是对象中的其他值,因为使用typeof检测数据类型对于对象数据类型,最后返回结果都是“object”


2、Instanceof  检测某一个实例是否属于这个类    
var obj = [];
console.log(obj instanceof Array);
1>局线性:不能用来检测和处理字面量方式创建出来的基本数据类型值
对于基本数据类型来说,字面量方式创建出来的结果和实例方式创建出来的结果是有一定区别的,从严格意义上来讲,只有实例创建出来的对象才是标准的对象数据类型值,也是标准的String这个类的实例,对于字面量方式创建出来的结果是基本数据类型值,不是严谨的实例,但是由于js松散特点,导致了可以使用Number.prototype上提供的方法
    console.log("" instanceof String);
    console.log(true instanceof Boolean);
console.log(new String(1) instanceof String);
2>局线性:Instanceof特性:只要在当前原型链上,我们用其检测出来的结果都是true
    var obj = [];
    console.log(obj instanceof Array);
console.log(obj instanceof  Object);


3、constructor  构造函数  
1、constructor  可以处理基本数据类型的检测
      console.log('ZHAGNSAN'.constructor == String);
  2、作用和instanceof不一样
    var arr = [];
    console.log(arr.constructor == Array);
    console.log(arr.constructor == Object);
3、局线性:我们可以把类的原型进行重写,在重写的过程中很有可能出现把之前的constructor给覆盖了,这样检测出来的结果就是不准确的
             function Fn() {}
             Fn.prototype = new Array;
             var f = new Fn;
             console.log(f.constructor == Array);  //true
             console.log(f.constructor == Fn);   //false

4、Object.prototype.toString.call()首先获取Object原型上的toString方法,让方法执行,并且改变方法中的this关键字的指向
     
toString的理解
console.log((1).toString());相当于Number.prototype.toString,Number原型上toString转换为字符串,返回字符串1
console.log((1).__proto__.__proto__.toString());相当于Object.prototype.toString--->"[object Object]"

对于Number,String、Boolean Array RegExp  Date  Function原型上的toString方法都是把当前的数据类型转换为字符串类型(仅仅是转换为字符串的)
但是Object的toString()并不是用来转换为字符串的
console.log(({"name":"张三"}).toString())--->"[object Object]"
console.log((Math).toString())----->[object Math]

Object.prototype.toString()的作用是
var obj={"name": "张三"};
console.log(obj.toString());toString中的this是obj,返回obj的所属类的信息---->"[object Object]" 第一个object代表是当前实例是对象数据类型的,第二个Object代表的是obj所属类是Object

console.log((Math).toString())toString中的this是Math,那么返回的是Math所属类的信息
var ary=[];
console.log(Object.prototype.toString.call(ary));---->"[object Array]" 说明ary属于Array类的实例
console.log(Object.prototype.toString.call(null));[object Null]
console.log(Object.prototype.toString.call(true)); [object Boolean]
console.log(Object.prototype.toString.call(1));[object Number]
可以检测任意数据类型

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏黑泽君的专栏

Java继承中的几道面试题

922
来自专栏Golang语言社区

【Go 语言社区】Go 语言函数--转

Go 语言函数 函数是基本的代码块,用于执行一个任务。 Go 语言最少有个 main() 函数。 你可以通过函数来划分不同功能,逻辑上每个函数执行的是指定的任务...

3458
来自专栏Java开发者杂谈

关于多态

  多态是面向对象的核心思想之一,多态的实现有三要素: 1、 存在继承 2、子类对父类的方法进行了重写 3、父类引用指向子类对象。   前面说的还是有点虚,下面...

3347
来自专栏PHP在线

PHP字符串和数组操作函数

str_split() 函数把字符串分割到数组中。 stripslashes() 函数删除由 addslashes() 函数添加的反斜杠。 stripcslas...

3877
来自专栏Puppeteer学习

OOP in Javascript

1245
来自专栏深度学习与计算机视觉

算法-字符串替换空格

题目: 实现一个函数,把字符串中的每一个空格替换成”%20”。例如输入”We are happy.”,则输出”We%20are%20happy.”。 解题思...

2346
来自专栏猿人谷

运算符重载

  C++中预定义的运算符的操作对象只能是基本数据类型。但实际上,对于许多用户自定义类型(例如类),也需要类似的运算操作。这时就必须在C++中重新定义这些运算符...

2277
来自专栏闻道于事

JavaScript深入浅出补充——(一)数据类型,表达式和运算符

项目基本做完,在进行下一阶段学习之前先看视频学习回顾一下JavaScript 一、数据类型 JavaScript中有五种原始类型和一种对象类型 ? JavaSc...

3385
来自专栏JAVA技术站

Python学习一基础数据类型及赋值操作 原

字符串或串(String)是由数字、字母、下划线组成的一串字串,一些简单的操作如下

852
来自专栏Java帮帮-微信公众号-技术文章全总结

07.Java变量类型

07.Java变量类型 Java 变量类型 在Java语言中,所有的变量在使用前必须声明。声明变量的基本格式如下: ? 格式说明:type为Java数据类型。i...

3777

扫码关注云+社区