广告
返回顶部
首页 > 资讯 > 前端开发 > JavaScript >javaScript中一些常见的数据类型检查校验
  • 391
分享到

javaScript中一些常见的数据类型检查校验

2024-04-02 19:04:59 391人浏览 薄情痞子
摘要

目录前言常见的几种数据校验方式typeof操作符instanceofconstructorcall && applyObject.prototype.toString

前言

javascript中,数据类型分为两大类,一种是基础数据类型,另一种则是复杂数据类型,又叫引用数据类型

  • 基础数据类型:数字Number 字符串String 布尔Boolean Null Undefined Symbols BigInt
  • 引用数据类型:日期Dete,对象Object,数组Array,方法Function, 正则regex,带键的集合:Maps, Sets, WeakMaps, WeakSets

基础数据类型和引用数据类型的区别,在之前深拷贝的文章中提到过,这里不做详细赘述。

传送门:javaScript中深拷贝和浅拷贝简单梳理

常见的几种数据校验方式

接下来会针对下面几种数据类型,进行校验

// 基本数据类型
let str = "abc";
let num = 123;
let boo = true;
let undef = undefined;
let testNull = null;
let symb = Symbol("user");
let bigInt = BigInt(9007199254740999);

// 复杂-引用数据类型
let arr = [1, 2, 3, 4];
let func = function () {};
let obj = {};
let date1 = new Date();
let setObj1 = new Set();
let setObj2 = new Set([1, 2, 3]);
let mapObj = new Map();

typeof操作符

typeof操作符,会返回一个字符串,表示未经计算的操作数的类型


console.log(typeof str); //  string
console.log(typeof num); //  number
console.log(typeof boo); //  boolean
console.log(typeof undef); //  undefined
console.log(typeof testNull); //  object
console.log(typeof symb); //  symbol
console.log(typeof bigInt); //  bigint
console.log(typeof Object(bigInt)); // object
console.log(typeof arr); //  object
console.log(typeof func); //  function
console.log(typeof obj); //  object
console.log(typeof date1); //  object
console.log(typeof setObj1); //  object
console.log(typeof setObj2); //  object
console.log(typeof mapObj); //  object

小结

使用typeof操作符的时候,我们可以看到一些较为特殊的情况:

  • null,数组array,set,map 返回的是对象object

instanceof

instanceof用于检测构造函数的 prototype 属性是否出现在某个实例对象的原型链上。


console.log(str instanceof String); // false
console.log(new String("abc") instanceof String); // true
console.log(num instanceof Number); // false
console.log(new Number(123) instanceof Number); // true
console.log(boo instanceof Boolean); // false
console.log(new Boolean(true) instanceof Boolean); // false
console.log(undef instanceof undefined);
// Uncaught TypeError: Right-hand side of 'instanceof' is not an object
console.log(testNull instanceof null);
// Uncaught TypeError: Right-hand side of 'instanceof' is not an object
console.log(symb instanceof Symbol); // false 
// Symbol不是构造函数,没有new操作符
console.log(bigInt instanceof BigInt); // false
console.log(Object(BigInt("22")) instanceof Object); // true
console.log(Object(BigInt("22")) instanceof BigInt); // true
console.log(arr instanceof Array); // true
console.log(arr instanceof Object); // true
console.log(func instanceof Function); // true
console.log(func instanceof Object); // true
console.log(obj instanceof Object); // true
console.log(obj instanceof Function); // false
console.log(null instanceof Object); // false
console.log(date1 instanceof Object); // true
console.log(setObj1 instanceof Object); //  true
console.log(setObj2 instanceof Object); //  true
console.log(mapObj instanceof Object); //  true
console.log(setObj1 instanceof Array); //  false
console.log(setObj2 instanceof Array); //  false
console.log(mapObj instanceof Array); //  false

constructor


 
// 基本数据类型
let str = "abc";
let num = 123;
let boo = true;
let undef = undefined;
let testNull = null;
let symb = Symbol("user");
let bigInt = BigInt(9007199254740999);
// 复杂-引用数据类型
let arr = [1, 2, 3, 4];
let func = function () {};
let obj = {};
let date1 = new Date();
function constructorFn() {
  this.name = "11";
}
let con1 = new constructorFn();
let setObj1 = new Set();
let setObj2 = new Set([1, 2, 3]);
let mapObj = new Map(); 
console.log(str.constructor); // String
console.log(num.constructor); // Number
console.log(boo.constructor); // Boolean
// console.log(testUndefined.constructor); // Cannot read property 'constructor' of undefined
// console.log(testNull.constructor); // Cannot read property 'constructor' of null
console.log(symb.constructor); // Symbol
console.log(bigInt.constructor); // BigInt
console.log(arr.constructor); // Array
console.log(func.constructor); // Function
console.log(obj.constructor); // Object
console.log(date1.constructor); // Date
console.log(constructorFn.constructor); // Function
console.log(con1.constructor); // constructorFn
console.log(setObj1.constructor); // Set
console.log(setObj2.constructor); // Set
console.log(mapObj.constructor); // Map

console.log(Function.constructor); // Function
console.log(Object.constructor); // Function
console.log(Array.constructor); // Function
console.log(Date.constructor); // Function

Object.prototype.toString.call && Object.prototype.toString.apply
Object.prototype.toString()

在使用Object.prototype.toString.call或者Object.prototype.toString.apply检查数据类型之前,我们先了解一下Object.prototype.toString和JavaScript中的构造函数Function的原型方法apply和call:



let isObj = { name: "zhangsan" };
let isBoolean = true;
let isNumber = new Number(123);
let isString = "abc";
let isFun = new Function();
console.log(isObj.toString()); // [object Object]
console.log(isBoolean.toString()); // true
console.log(isNumber.toString()); // 123
console.log(isString.toString()); // abc
console.log(new Date().toString()); // Thu Apr 28 2022 16:37:19 GMT+0800 (中国标准时间)
console.log(isFun.toString()); // function anonymous() {}

call && apply


// call基本使用;
function a() {
	console.log(this);
}
function b() {
	console.log(this);
}
a.call(b); //		function b() {}
b.call(a); //		function a() {}

call和apply最简单的例子表明了,改变了当前方法的this指向

同时这两个方法的区别在于传参的方式

Object.prototype.toString结合Function.prototype.call && apply


 
let str = "abc";
let num = 123;
let boo = true;
let undef = undefined;
let testNull = null;
let symb = Symbol("user");
let bigInt = BigInt(9007199254740999);
// 复杂-引用数据类型
let arr = [1, 2, 3, 4];
let func = function () {};
let obj = {};
let date1 = new Date();
function testFun() {}
let newTest = new testFun();
let newFun = new Function();
let setObj1 = new Set();
let setObj2 = new Set([1, 2, 3]);
let mapObj = new Map();
console.log(Object.prototype.toString.apply(new String("sss"))); // [object String]
console.log(Object.prototype.toString.apply(str)); // [object String]
console.log(Object.prototype.toString.call(num)); // [object Number]
console.log(Object.prototype.toString.call(boo)); // [object Boolean]
console.log(Object.prototype.toString.call(undef)); // [object Undefined]
console.log(Object.prototype.toString.call(testNull)); // [object Null]
console.log(Object.prototype.toString.call(symb)); // [object Symbol]
console.log(Object.prototype.toString.call(Object(bigInt))); // [object BigInt]
console.log(Object.prototype.toString.call(bigInt)); // [object BigInt]
console.log(Object.prototype.toString.apply(arr)); // [object Array]
console.log(Object.prototype.toString.call(func)); // [object Function]
console.log(Object.prototype.toString.call(obj)); // [object Object]
console.log(Object.prototype.toString.call(date1)); // [object Date]
console.log(Object.prototype.toString.call(testFun)); // [object Function]
console.log(Object.prototype.toString.call(newTest)); // [object Object]
console.log(Object.prototype.toString.call(newFun)); // [object Function]
console.log(Object.prototype.toString.call(setObj1)); // [object Set]
console.log(Object.prototype.toString.call(setObj2)); // [object Set]
console.log(Object.prototype.toString.call(mapObj)); // [object Map]

其他校验数据类型的方法:

判断是否是数组:

console.log(Array.isArray([1, 2])); // true

判断一个对象是否是空对象

// 判断空对象
function isEmptyObj(obj) {
  for (name in obj) {
    console.log(name);
    return false; // 不是空对象
  }
  return true;
}
console.log(isEmptyObj({}));  // true

总结

  • 不管是typeof操作符,还是其他的操作方法,都有各自的缺陷
  • 在日常的开发过程中,我们需要知道当前操作的是对象,还是构造函数生成的对象或者方法,才能针对当前需要判断的数据类型,采用最适合的方法
  • Object.prototype.toString.call或者Object.prototype.toString.apply应该是最完善的方法,在我们不确定是否是引用类型或者基本数据类型的时候,建议作为首选
  • 在了解这些判断数据类型的方式之前或者说存有疑问:为什么array数组在使用instanceof和typeof 校验Object的时候都成立,这时候需要去了解一下引用数据类型的具体内容
  • 以上判断数据类型的方法,可以在项目开发过程中,可以写入到utils公共方法当中,作为开发中进行使用。

更多用法等待补充。

到此这篇关于javaScript中一些常见的数据类型检查校验的文章就介绍到这了,更多相关js数据类型检查校验内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

源码地址

码云 https://gitee.com/lewyon/Vue-note
githup Https://GitHub.com/akari16/vue-note

--结束END--

本文标题: javaScript中一些常见的数据类型检查校验

本文链接: https://www.lsjlt.com/news/148061.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • javaScript中一些常见的数据类型检查校验
    目录前言常见的几种数据校验方式typeof操作符instanceofconstructorcall && applyObject.prototype.toString...
    99+
    2022-11-13
  • 初识Java一些常见的数据类型
    目录1、Java是什么2、为什么总有人说Java是最好的语言3、一个简单的main函数4、运行Java程序5、Java书写 注意问题6、数据类型与运算符6.1变量和类型6.2 整型变...
    99+
    2022-11-12
  • 数据类型在Go语言中有哪些常见的类型?
    Go语言是一种快速、简洁、安全的编程语言,它的强类型系统和丰富的数据类型使其成为了一种非常流行的编程语言。在Go语言中,常见的数据类型有哪些呢?本文将详细介绍Go语言中常见的数据类型。 一、基本数据类型 布尔型(bool) 布尔型只有两...
    99+
    2023-08-05
    对象 接口 数据类型
  • ASP开发中常见的数据类型有哪些?
    在ASP开发中,使用不同的数据类型来存储和处理数据是非常常见的。本文将介绍ASP开发中常见的数据类型及其应用。 字符串类型(String) 字符串类型是ASP开发中最常见的数据类型之一。它用于存储文本数据,例如用户名、密码、电子邮件地...
    99+
    2023-06-18
    linux 数据类型 索引
  • Django中的对象数据类型:有哪些常见的?
    Django是一个流行的Web应用程序框架,它提供了一种简单而强大的方法来处理数据。在Django中,对象数据类型是非常重要的一部分,它们是构建Web应用程序的基本组成部分。本文将介绍Django中常见的对象数据类型及其用法。 CharF...
    99+
    2023-08-21
    django 对象 数据类型
  • Go编程中的数据类型有哪些常见问题?
    Go是一种高效、简洁、快速的编程语言,它支持多种数据类型,包括数字、字符串、布尔值、数组、切片、映射、结构体等。虽然Go的数据类型通常比其他语言更简单,但是仍然存在一些常见问题。在本文中,我们将探讨这些常见问题,并通过演示代码来说明它们的解...
    99+
    2023-08-08
    编程算法 数据类型 开发技术
  • ASP中常见的数据类型有哪些?面试必备!
    ASP(Active Server Pages)是一种Microsoft开发的服务器端脚本语言,它可以与HTML和CSS一起使用来创建动态网页。在ASP中,数据类型是非常重要的,因为它们定义了变量和常量的类型,以及它们可以存储的数据范围。在...
    99+
    2023-07-28
    数据类型 面试 http
  • Python数据类型在常见集合中的语法有哪些
    这篇文章将为大家详细讲解有关Python数据类型在常见集合中的语法有哪些,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。Python数据类型中的set和C#中的集合(collection)不是...
    99+
    2023-06-17
  • 数据库中常见的连接和连接类型有哪些
    这期内容当中小编将会给大家带来有关数据库中常见的连接和连接类型有哪些,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。数据库中常见的连接和连接类型有哪些根据连接中使用的操作符...
    99+
    2022-10-19
  • 重定向关键字在Python中有哪些常见的数据类型?
    在Python中,重定向关键字是一种非常有用的工具,它可以将程序的输入和输出重定向到不同的位置,例如文件、管道或者网络连接。这种功能在处理大型数据集或者需要与其他程序进行通信时非常有用。 在本文中,我们将讨论Python中常见的重定向关键...
    99+
    2023-09-12
    重定向 关键字 数据类型
  • ASP 中有哪些常见的数据类型,分别适用于哪些场景?
    ASP 是一种非常流行的 Web 开发技术,它使用 VBScript 或 JScript 作为脚本语言,可以方便地与数据库进行交互。在 ASP 中,数据类型是非常重要的一个概念,它决定了我们可以处理哪些数据以及如何处理它们。在本篇文章中,我...
    99+
    2023-07-28
    数据类型 分布式 关键字
  • PHP、NumPy 和 Unix 系统中常见的数据类型有哪些?如何相互转换?
    在编程中,数据类型是不可或缺的一部分。不同的编程语言和操作系统中,常用的数据类型都有所不同。在本文中,我们将探讨 PHP、NumPy 和 Unix 系统中常见的数据类型,以及如何相互转换。 一、PHP中常见的数据类型 字符串(Strin...
    99+
    2023-11-10
    numpy 数据类型 unix
  • Go 中有哪些常见的数据类型,以及如何使用 NPM 安装它们?
    Go 是一种现代化的编程语言,它的出现为开发者带来了更为高效和快速的编程体验。在 Go 语言中,数据类型是编写高效程序的关键之一。本文将介绍 Go 中常见的数据类型以及如何使用 NPM 安装它们。 一、Go 常见的数据类型 布尔型 布尔...
    99+
    2023-09-03
    数据类型 npm ide
  • Java中常见的数据类型和框架如何实现同步?让我们一起探讨。
    Java是一种非常流行的编程语言,被广泛应用于各种应用程序中。在Java中,有许多不同的数据类型和框架,这些都需要进行同步处理,以确保程序的正确性和可靠性。在本文中,我们将探讨Java中常见的数据类型和框架如何实现同步。 Java中常见的数...
    99+
    2023-09-14
    数据类型 框架 同步
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作