资讯专栏INFORMATION COLUMN

js中检查数据类型最佳实践

cpupro / 1688人阅读

摘要:如果想要检查原始数据类型之外的任何内容,我们可能一些额外的检查技巧,例如判断构造函数。它们实际上是对象,会为它们返回要知道某个东西是否真的是数组,可以将其构造函数与数组进行比较。是对象,因此唯一需要检查的是构造函数是否为。

Javascript中检查数据类型一直是老生常谈的问题,今天俺看了一篇国外的文章总结了实际开发中常见的几种技巧,俺觉得讲的很不错,因此跟大家一起分享。

检查js中数据类型不是想的那么简单。js语言中本身提供了typeof 运算符,typeof操作符返回一个字符串,表示未经计算的操作数的类型。typeof操作符返回一个字符串,表示未经计算的操作数的类型。

然而,javascript数据类型和typeof运算符并不完美。很多时候都不是我们预想的结果, 例如,对于数组和null,返回“object”。如果想要检查原始数据类型之外的任何内容,我们可能一些额外的检查技巧,例如判断构造函数。
String
字符串总是一个字符串,所以检查字符串很简单。 如果使用new(new String)调用,typeof将返回“object”。 所以也要包含那些可以使用的字符串instanceof。

function isString (value) {
   return typeof value === "string" || value instanceof String;
}

Number
从typeof中得到的不仅仅是一个普通的数字,还会返回“number”,比如NaN和Infinity。要知道一个值是否真的是一个数字,还需要使用isFinite来判断数字是否有限。

function isNumber (value) {
   return typeof value === "number" && isFinite(value);
}

Array
在javascript中,数组不像在java和其他语言中那样是真正的数组。它们实际上是对象,typeof会为它们返回"object"要知道某个东西是否真的是数组,可以将其构造函数与数组进行比较。

function isArray (value) {
   return value && typeof value === "object" && value.constructor === Array;
}

// ES5可以使用该方法 IE9以上
Array.isArray(value);

Function
在js中判断函数使用typeof就可以了。

function isFunction (value) {
   return typeof value === "function";
}

Object
javascript中的很多东西都是对象。要知道一个值是否是一个可以具有属性并循环遍历的对象,可以将其构造函数与对象进行比较。它不适用于用class创建的对象,使用class创建的对象可以使用instanceof操作符来判断。

function isObject (value) {
   return value && typeof value === "object" && value.constructor === Object;
}

Null 和 undefined
大多数时候,您不需要显式地检查null和undefined,因为它们都是假值。不过,在下面的函数中这样做就可以了。

// Returns if a value is null
function isNull (value) {
return value === null;
}

// Returns if a value is undefined
function isUndefined (value) {
return typeof value === "undefined";
}

Boolean
对于boolean typeof检查符也足够用来检查了。

// Returns if a value is a boolean
function isBoolean (value) {
   return typeof value === "boolean";
}

RegExp
RegExp是对象,因此唯一需要检查的是构造函数是否为RegExp。

// Returns if a value is a regexp
function isRegExp (value) {
return value && typeof value === "object" && value.constructor === RegExp;
}

Error
javascript中的错误与许多其他编程语言中的“异常”相同。它们有两种不同的形式,例如Error、TypeError和RangeError。对于它们来说,一个instanceof语句就足够了,但是为了确保我们还检查了错误具有的“message”属性。

// Returns if value is an error object
function isError (value) {
   return value instanceof Error && typeof value.message !== "undefined";
}

Date
Date在javascript中并不是真正的数据类型。但是要知道某个对象是否是Date对象,可以使用instanceof进行检查。

// Returns if value is a date object
function isDate (value) {
   return value instanceof Date;
}

Symbol
ES6新增的Symbol,用typeof就足够了。

// Returns if a Symbol
function isSymbol (value) {
return typeof value === "symbol";
}

欢迎大家一起学习讨论,欢迎访问我的博客。
原文链接:https://www.pipipi.net/code/1...

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/106453.html

相关文章

  • JS学习笔记(第24章)(最佳实践

    摘要:大多数情况下,可以是同局部变量完成相同的事情而不引入新的作用域。选择正确的方法避免不必要的属性查找一旦多次用到属性对象,应该将其存储在局部变量中。尽可能多的使用局部变量将属性查找替换为值查找。 1、可维护性 1.1 可维护代码特征 1. 可理解性 2. 直观性 3. 可适应性 4. 可扩展性 5. 可调试性 1.2 代码约定 1、可读性(代码缩进和代码注释) 2、变量和函数命名 变量...

    cnTomato 评论0 收藏0
  • React.js 最佳实践(2016)_链接修正版

    摘要:译者按最近依旧如火如荼相信大家都跃跃欲试我们团队也开始在领域有所尝试年应该是逐渐走向成熟的一年让我们一起来看看国外的开发者们都总结了哪些最佳实践年在全世界都有很多关于新的更新和开发者大会的讨论关于去年的重要事件请参考那么年最有趣的问题来了我 译者按:最近React(web/native)依旧如火如荼,相信大家都跃跃欲试,我们团队也开始在React领域有所尝试. 2016年应该是Reac...

    syoya 评论0 收藏0
  • 摸索 JS 内深拷贝的最佳实践

    摘要:想要简单点难道我深拷贝一个变量还要引入这么麻烦吗没有简单点的办法吗嗯,可能有点不是那么酷炫,但是他确实可以满足要求,而且也无须引入其他的库。 问题 由于 js 的传参方式有时会遇到这样的场景: function setTime(data) { let result = {}; result.obj = data.obj || {}; result.obj.time = Da...

    Jonathan Shieber 评论0 收藏0
  • 高程3总结#第24章最佳实践

    摘要:也就是说避免属性查找或其他的操作。简化循环体循环体是执行最多的,所以要确保其被最大限度地优化。代码组织组织代码要考虑到可维护性并不一定是传送给浏览器的最好方式。 最佳实践 可维护性 什么是可维护性的代码 如果说代码是可维护的,它需要遵循以下特点 可理解性——其他人可以接手代码并理解它的意图和一般途径,而无需原开发人员的完整解释。 直观性——代码中的东西一看就能明白,不管其操作过程多...

    zhiwei 评论0 收藏0
  • 9项你不得不知道的Kubernetes安全最佳实践

    摘要:今年年初,由于控制台中的配置错误,特斯拉被一个恶意挖掘加密货币的软件所感染。为了帮助您完成这项工作,本文将为您介绍项安全最佳实践。授权失败可能意味着攻击者试图滥用被盗凭据。 上个月,全球最受欢迎的容器编排引擎Kubernetes,被爆出首个严重的安全漏洞,使得整个Kubernetes生态发生震荡。该漏洞(CVE-2018-1002105)使攻击者能够通过Kubernetes API服务...

    wslongchen 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<