当前位置: 首页 > news >正文

检测数据类型

检测数据类型

        • [1]typeof
        • [2]isNaN
        • [3]instanceof
        • [4]isArray
        • [5]万能检测数据类型

[1]typeof

typeof一般是用于检测简单数据类型的;

(1)语法:

  • typeof(数据)
  • typeof 数据

(2)缺点:

  • 结果具有不准确性–>对于null、array数据 检测结果为object

(3)举例说明

console.log(typeof 0) // number
console.log(typeof '0') // string
console.log(typeof true) // boolean
console.log(typeof undefined) // undefined
console.log(typeof null) //object
typeof [] // object
typeof function(){} // function
let sy=Symbol('xx')
console.log(typeof sy); //symbol

[2]isNaN

  • isNaN是window的方法,可以用于检测数据是否为数字类型;

  • 语法

    • window.isNaN(value)
      
  • 举例说明

    • isNaN(111) // false
      
  • 缺点

    • 结果存在不准确性

      • 数字、(转化为Number类型不为NaN的)字符串、(转化为Number类型不为NaN的)的数组、null都会被认作数字

      • isNaN('11') // false
        isNaN('a') // true
        isNaN(11) // false
        isNaN(null) // false
        isNaN(undefined) // true
        isNaN([11]) // false
        isNaN([11.,12]) // true
        

[3]instanceof

(1)语法: 数据 instanceof 构造函数

(2)执行原理(本质):检测右面构造函数的原型对象是否在左侧数据地原型链上;

(3)缺点:结果存在不准确性;

(4)以检测数组为例(前提:数组的构造函数为Array)

 console.log([111] instanceof Array); // true
 console.log([111] instanceof Function); // false
 console.log([111] instanceof Object); // true
  • [1]当检测[111]是否为数组----true(原因是因为Array.prototype==[111].proto)

img

  • [2]当检测[111]是否为函数—false
    • 因为[111]的原型链上没有Function.prototype
  • [3]当检测[111]是否为对象–true(结果错误)
    • [111].proto.protp=Object.prototype

img

[4]isArray

Array原型上存在isArray方法,用于检测数据是否为数组;

(1)语法:Array.isArray(value)

(2)举例说明:

console.log(Array.isArray([111])) //true
console.log(Array.isArray({ 1: '111' })) //false

[5]万能检测数据类型

(1)语法:Object.prototype.toString.call(数据)

(2)优点:

  • (1)对于任何数据都适用;
  • (2)没有错误情况;

(3)原理:

  • 前提:
    • 很多构造函数的原型对象都具有toString方法,eg:Array.toString();
    • 但是只有Object构造函数的toString方法的作用是检测数据类型的;
  • 执行原理:
    • 检测数据类型,修改toString方法的this指向;
    • 相当于此数据去调用Object原型对象上的toString方法;
    • 这样就检测出此数据的数据类型了!
  • 注意点:
    • 原理上null与undefined是不能够修改this指向的(修改是失败的);
    • 但js是弱语言,很多地方不太完整(很多时候null,undefined是当作对象的)

(4)举例说明

 console.log(Object.prototype.toString.call(1)) // [object Number]
      console.log(Object.prototype.toString.call('1')) // [object String]
      console.log(Object.prototype.toString.call(true)) // [object Boolean]
      console.log(Object.prototype.toString.call(null)) // // [object Null]
      console.log(Object.prototype.toString.call(undefined)) // [object Undefined]
      console.log(Object.prototype.toString.call(Symbol('xx')))// [object Symbol]
      console.log(Object.prototype.toString.call([111])) // [object Array]
      console.log(Object.prototype.toString.call({ 1: '11' }))// [object Object]
      console.log(
        Object.prototype.toString.call(function a () {
          console.log('11')
        })
      ) // [object Function]

相关文章:

  • java多线程面试总结,字节跳动java面试题
  • python读取json格式文件大量数据,以及python字典和列表嵌套用法详解
  • 前端新特性
  • 有什么低价好用的电容笔推荐?大一新生必备物品
  • Vite打包优化插件
  • 一文搞懂nginx的反向代理 负载均衡
  • Redis的哨兵模式搭建
  • 闭包、闭包应用场景
  • 瑞吉外卖 —— 2、后台登录和登出
  • 阿里云配置hadoop远程连接Web页面(如50070端口)
  • Linux 任务调度
  • Github每日精选(第32期):HTML智能仪表盘tabler
  • 对多个 CSV 文件做关联
  • 记录一次数据库CPU被打满的排查过程
  • 金九银十准备季:Java IO流面试题(含答案)
  • Angular 2 DI - IoC DI - 1
  • dva中组件的懒加载
  • Fundebug计费标准解释:事件数是如何定义的?
  • javascript 总结(常用工具类的封装)
  • Java编程基础24——递归练习
  • jQuery(一)
  • JS变量作用域
  • Python socket服务器端、客户端传送信息
  • Spark in action on Kubernetes - Playground搭建与架构浅析
  • vue-cli在webpack的配置文件探究
  • 阿里云前端周刊 - 第 26 期
  • 初探 Vue 生命周期和钩子函数
  • 搭建gitbook 和 访问权限认证
  • 工作中总结前端开发流程--vue项目
  • 机器学习 vs. 深度学习
  • 前端面试总结(at, md)
  • 适配mpvue平台的的微信小程序日历组件mpvue-calendar
  • 看到一个关于网页设计的文章分享过来!大家看看!
  • 阿里云服务器如何修改远程端口?
  • 摩拜创始人胡玮炜也彻底离开了,共享单车行业还有未来吗? ...
  • #define,static,const,三种常量的区别
  • #常见电池型号介绍 常见电池尺寸是多少【详解】
  • $.ajax()方法详解
  • (1)(1.13) SiK无线电高级配置(六)
  • (day 2)JavaScript学习笔记(基础之变量、常量和注释)
  • (day6) 319. 灯泡开关
  • (阿里巴巴 dubbo,有数据库,可执行 )dubbo zookeeper spring demo
  • (二)WCF的Binding模型
  • (附源码)springboot 个人网页的网站 毕业设计031623
  • (附源码)基于ssm的模具配件账单管理系统 毕业设计 081848
  • (十三)Maven插件解析运行机制
  • (一)80c52学习之旅-起始篇
  • (转)eclipse内存溢出设置 -Xms212m -Xmx804m -XX:PermSize=250M -XX:MaxPermSize=356m
  • (转)ORM
  • (转载)从 Java 代码到 Java 堆
  • .NET Core 将实体类转换为 SQL(ORM 映射)
  • .NET/ASP.NETMVC 大型站点架构设计—迁移Model元数据设置项(自定义元数据提供程序)...
  • .NET版Word处理控件Aspose.words功能演示:在ASP.NET MVC中创建MS Word编辑器
  • /run/containerd/containerd.sock connect: connection refused
  • @CacheInvalidate(name = “xxx“, key = “#results.![a+b]“,multi = true)是什么意思