专栏首页河湾欢儿的专栏第四节检测数据类型4种方式

第四节检测数据类型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 条评论
登录 后参与评论

相关文章

  • Vue.js基础特性

    计算属性 computed 与data,el,methods属性一样,都是vm实例的属性(选项) 理解其大致意思即可

    河湾欢儿
  • 04-修改 维护

    想要改变图标的位置? 新功能,加个图标? 画布太大,文件空白太多? 图标多余,要删除?

    河湾欢儿
  • wx 小程序

    1.首先我们拿到一个新的框架(我感觉wx小程序和框架差不多),先分析里面的东西 例如这个微信小程序 我们先看下面的四个文件[图片上传失败...(image-...

    河湾欢儿
  • MySQL 到底是怎么解决幻读的?

    https://www.cnblogs.com/wdy1184/p/10655180.html

    Java技术栈
  • 浏览器 Event Loop 机制

    event loop是一个执行模型,在不同的地方有不同的实现。浏览器和NodeJS基于不同的技术实现了各自的Event Loop。

    小皮咖
  • 快速掌握JavaScript面试基础知识(三)

    根据StackOverflow 调查, 自 2014 年一来,JavaScript 是最流行的编程语言。当然,这也在情理之中,毕竟 1/3 的开发工作都需要一些...

    Fundebug
  • 观疫情·谈文旅 | 刘锋:疫情之下中国旅游业何去何从?

    ? 刘锋 腾讯文旅产业研究院特聘专家、巅峰智业创始人 ? “愁云惨淡万里凝”,2020年似乎比人们预想的还要难,一开年就被新型冠状病毒肺炎疫情给打了个措手不...

    腾讯文旅
  • dom啦3

    用户7873631
  • 理解装饰器是怎么使用的

    js 和 ts 中经常看到@+函数名的字样这个就是装饰器。它可以修饰类,类的属性,类的原型上的方法,说的简单一点它就是一个函数,可以传递参数在修饰的时候把这个类...

    小丑同学
  • 【用python玩花样】python实现点阵字体

    今天给大家分享的是利用python实现点阵字体,可能大家对这个名词不太熟悉。给各位找了专业的解释:点阵字体是把每一个字符都分成16×16或24×24个点,然后用...

    小草AI

扫码关注云+社区

领取腾讯云代金券