自定义一些类型


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. python 列表,字典,元组,字符串,QuerySet之间的相互转换

    1. 列表转换成字典list1 = ['key1','key2','key3']list2 = ['value1','value2'] dict1 = zip(list1,list2) # dict( ...

  2. jvm-learning-概述

    JVM整体结构: java代码的执行流程 JVM的架构模型 public class StackStruTest { public static void main(String[] args) { ...

  3. Java 中怎么获取一份线程 dump 文件?

    在 Linux 下,你可以通过命令 kill -3 PID (Java 进程的进程 ID)来获取 Java 应用的 dump 文件.在 Windows 下,你可以按下 Ctrl + Break 来获取 ...

  4. 并发场景下HashMap死循环导致CPU100%的问题

    参考链接:并发场景下HashMap死循环导致CPU100%的问题

  5. Javascript Range对象的学习

    Range对象有几个特别难理解的属性,这里学习总结下 Range.startOffset:返回一个表示 Range 起点在 startContainer 中的位置的数字.此属性的值与Range.sta ...

  6. 记录md的偏好设置

  7. 如何将Matlab中“模糊控制设计器”的隶属度函数导出图片(figure)

    如何将Matlab中"模糊控制设计器"的隶属度函数导出图片(figure)详情参考matlab官方帮助手册:plotmf()函数https://www.mathworks.com/ ...

  8. [源码解析] TensorFlow 分布式环境(7) --- Worker 动态逻辑

    [源码解析] TensorFlow 分布式环境(7) --- Worker 动态逻辑 目录 [源码解析] TensorFlow 分布式环境(7) --- Worker 动态逻辑 1. 概述 1.1 温 ...

  9. HTML5 & CSS3 内容收集(1)

    1. HTML发展历史介绍 2. 浏览器支持 2.1 新增标签支持 在html5 中新增了很多的标签,其中包括8个新增语义结构标签.header, section, footer, aside, na ...

  10. ES6-11学习笔记--Map

    Map:一种新的数据结构 常用方法 遍历 应用场景 WeakMap   常用方法: let map = new Map() let obj = { name: '张三' } map.set(obj, ...