自定义一些类型


const boolean = true
const string = '这是一个字符串'
const number = 1
const array = []
const object = { name: '张三' }
const functionType = function () {}
const nan = NaN
const undefinedType = undefined
const nullType = null
const Reg = new RegExp()
const set = new Set()
const map = new Map()
const date = new Date()
const math = Math

1、typeof


console.log(typeof boolean); // boolean
console.log(typeof string); // string
console.log(typeof number); // number
console.log(typeof array); // object
console.log(typeof object); // object
console.log(typeof functionType); // function
console.log(typeof nan); // number
console.log(typeof undefinedType); // undefined
console.log(typeof nullType); // object
console.log(typeof Reg); // object
console.log(typeof set); // object
console.log(typeof map); // object
console.log(typeof date); // object
console.log(typeof math); // object
console.log(typeof window); // object
console.log(typeof document); // object

缺点:typeof只能识别boolean、string、number、object、function

2、instanceof


console.log(boolean instanceof Boolean); // false
console.log(string instanceof String); // false
console.log(number instanceof Number); // false
console.log(array instanceof Array); // true
console.log(object instanceof Object); // true
console.log(functionType instanceof Function); // true
console.log(nan instanceof Number); // false

缺点:instanceof不能能识别基本类型和null、undefined

3、constructor

缺点:constructor的指向可能会被改变,且null,和undefined 没有constructor

4、Obeject.prototype.toString.call()


console.log(Object.prototype.toString.call(boolean)); // [object Boolean]
console.log(Object.prototype.toString.call(string)); // [object String]
console.log(Object.prototype.toString.call(number)); // [object Number]
console.log(Object.prototype.toString.call(array)); // [object Array]
console.log(Object.prototype.toString.call(object)); // [object Object]
console.log(Object.prototype.toString.call(functionType)); // [object Function]
console.log(Object.prototype.toString.call(nan)); // [object Number]
console.log(Object.prototype.toString.call(undefinedType)); // [object Undefined]
console.log(Object.prototype.toString.call(nullType)); // [object Null]
console.log(Object.prototype.toString.call(Reg)); // [object RegExp]
console.log(Object.prototype.toString.call(set)); // [object Set]
console.log(Object.prototype.toString.call(map)); // [object Map]
console.log(Object.prototype.toString.call(date)); // [object Date]
console.log(Object.prototype.toString.call(math)); // [object Math]
console.log(Object.prototype.toString.call(window)); // [object Window]
console.log(Object.prototype.toString.call(document)); // [object HTMLDocument]

大部分类型还是可以识别的

缺点:Obeject.prototype.toString.call()不能能识别非原生构造函数的构造函数名

js 如何判断变量类型的更多相关文章

  1. [JS]js中判断变量类型函数typeof的用法汇总[转]

    1.作用: typeof 运算符返回一个用来表示表达式的数据类型的字符串.  可能的字符串有:"number"."string"."boolean&q ...

  2. 16. js 判断变量类型,包括ES6 新类型Symbol

    相信大家在开发中遇到需要判断变量类型的问题,js变量按存储类型可分为值类型和引用类型,值类型包括Undefined.String.Number.Boolean,引用类型包括object.Array.F ...

  3. JavaScript 变量克隆和判断变量类型

    一.变量克隆 在js中经常会遇到将一个变量赋值给一个新的变量这种情况,这对于基本类型很容易去实现,直接通过等号赋值就可以了,对于引用类型就不能这样了.(注:像函数,正则也可以直接通过等号赋值) 这里我 ...

  4. Javascript 判断变量类型的陷阱 与 正确的处理方式

    Javascript 由于各种各样的原因,在判断一个变量的数据类型方面一直存在着一些问题,其中最典型的问题恐怕就是 typeof null 会返回 object 了吧.因此在这里简单的总结一下判断数据 ...

  5. Js中判断变量存不存在的问题

    前面写过jquery对象存在与否的判断.现在谈下Js中判断变量存不存在的问题. 如果这样if(!a),当变量a在js中没有申明时,就会报错,那么接下去的代码将不会被执行.注意,这种判断只要变量申明过, ...

  6. PHP判断变量类型和类型转换的三种方式

    前言: PHP 在变量定义中不需要(不支持)明确的类型定义.变量类型是根据使用该变量的上下文所决定的.所以,在面对页码跳转.数值计算等严格的格式需求时,就要对变量进行类型转换. 举例如下: $foo ...

  7. php判断变量类型

    php判断变量类型 一.总结 一句话总结: gettype()函数:gettype(1);返回的是integer is_array():is系列函数 1.PHP empty.isset.isnull的 ...

  8. JS 中对变量类型判断的几种方式

    文章整理搬运,出处不详,如有侵犯,请联系~   数据类型判断和数据类型转换代码工具 在 JS 中,有 5 种基本数据类型和 1 种复杂数据类型,基本数据类型有:Undefined, Null, Boo ...

  9. JS 中对变量类型的判断

    总结:1. 一般简单的使用 typeof 或 instanceof 检测(这两种检测的不完全准确)          2. 完全准确的使用 原生js中的 Object.prototype.toStri ...

随机推荐

  1. 什么是SpringCloudConfig?

    在分布式系统中,由于服务数量巨多,为了方便服务配置文件统一管理,实时更新,所以需要分布式配置中心组件.在Spring Cloud中,有分布式配置中心组件spring cloud config ,它支持 ...

  2. 请简述下你在哪些场景下会选择 Kafka?

    日志收集:一个公司可以用Kafka可以收集各种服务的log,通过kafka以统一接口服务的方式开放给各种consumer,例如hadoop.HBase.Solr等. 消息系统:解耦和生产者和消费者.缓 ...

  3. Hashmap如何同步?

    当我们需要一个同步的HashMap时,有两种选择: ●使用Collections.synchronizedMap(..)来同步HashMap. ●使用ConcurrentHashMap的 这两个选项之 ...

  4. JWT jti和kid属性的说明

    jti chaim=== JWT ID " jti"(JWT ID)声明为JWT提供了唯一的标识符. 标识符值的分配方式必须确保将相同值偶然分配给不同数据对象的可能性可以忽略不计: ...

  5. Spring 配置文件 ?

    Spring 配置文件是个 XML 文件,这个文件包含了类信息,描述了如何配置它们,以及如何相互调用.

  6. 用maven建立一个工程4

    在命令行里面输入cd C:\Users\admin\Documents\hello 然后按回车 再输入这行代码 mvn archetype:generate -DgroupId=com.liyongz ...

  7. Spring源码分析笔记--事务管理

    核心类 InfrastructureAdvisorAutoProxyCreator 本质是一个后置处理器,和AOP的后置处理器类似,但比AOP的使用级别低.当开启AOP代理模式后,优先使用AOP的后置 ...

  8. SpringCloud个人笔记-01-Eureka初体验

    eureka是一个高可用的组件,它没有后端缓存,每一个实例注册之后需要向注册中心发送心跳,在默认情况下erureka server也是一个eureka client ,必须要指定一个 serve &l ...

  9. MySQL怎么用命令修改字段名

    一.SQL MySQL怎么用命令修改字段名的 -- alter table 表名 change 旧属性 新属性 新的数据类型 ==>(可以不写) COMMENT '备注' ALTER TABLE ...

  10. Visual Studio App Center 中的 Bug 跟踪服务

    我在之前的一篇文章 <使用 Visual Studio App Center 持续监视应用使用情况和问题> 中介绍了 App Center 的基本功能及使用入门,其中 诊断 可以自动手机用 ...