逐日 30 秒 ⏱ 数据类型大乱炖

《逐日 30 秒 ⏱ 数据类型大乱炖》

简介

字符串、数字、布尔值、Null、Undefined、对象、数组、函数、推断要领

JavaScript 中有两种数据范例,分别是基础数据范例和援用数据范例:

基础数据范例援用数据范例
Number、String、Boolean、Null、Undefined、SymbolObject、Array、Function

在开辟过程当中我们有时候会须要对变量举行范例推断,平常是应用 typeof 并搭配响应的特征 来完成。

Number

推断一个变量是不是是 Number 能够应用 typeof 推断是不是是 number 然则有个小坑就是 typeof NaN === number,能够应用 NaN !== NaN 的特征来加以推断。

const isNumber = val => typeof val === 'number' && val === val;

String

推断 String 就很简朴了没有那么多弯弯绕绕一个 typeof 搞定。

const isString = val => typeof val === 'string';

Boolean

Boolean 的推断也很简朴运用 typeof,固然也能够运用 === 来举行推断。

const isBoolean = val => typeof val === 'boolean';

Null 和 Undefined

为何要把这两个数据范例放在一同讲呢?

在其他编程语言中每每只要 NullUndefinedNil中的个中一个,而 JavaScript 却把它们两个都零丁举行了定义:

称号定义
null是一个对象,示意无值
undefined是一个迥殊属性,其值是未定义,示意缺乏值

因为在 JavaScript 中都有本身定义对应的值直接应用值来推断就能够了:

const isNull = val => val === null;
const isUndefined = val => val === undefined;
const isNil = val => val === undefined || val === null;

Symbol

Symbol 是 ES6 新引入的数据范例用于示意示意举世无双的值,因为是新引入并没有迥殊大的坑直接应用 typeof 梭它就对了。

const isSymbol = val => typeof val === 'symbol';

Object

Null 也是对象须要举行推断。

Object 能够是 PlainObject 字面量对象 也能够是由 new 操作符天生的对象:

在 JavaScript 中能够应用函数来完成类的功用:

function Person (name) {
    this.name = name;
}

var person = new Person('xiaoer')

关于如许的类对象 和 字面量对象、类对象范例 我们都能够运用下面要领举行推断,Object.constructor 当碰到 Null 和 Undefined 会返回一个空对象,不然则会返回赋予的对象。

const isObject = obj => obj === Object(obj);

而字面量对象则指的是经由过程 Object.constructor 要领建立的对象,固然 const a = {a: 1} 如许声明建立的对象实在也是调用了Object.constructor 要领,应用 constructortypeof 则能够举行推断。这里奇妙的应用 !! 来举行布尔值的转换来推断是不是为 Null 和 Undefined:

const isPlainObject = val => !!val && typeof val === 'object' && val.constructor === Object;

Array

Array 算是一个迥殊的 Object 不信你用上面的对象要领推断看看就知道了。

那我们这么推断
Array 呢?

ES6 供应了一个推断数组的要领 Array.isArray,然则假如你在运用不支持 ES6 的浏览器时须要本身完成一下这个要领了:

if (!Array.isArray) {
  Array.isArray = function(arg) {
    return Object.prototype.toString.call(arg) === '[object Array]';
  };
}

Function

Function 在援用数据范例中算是简朴只须要运用 typeof 举行推断:

const isFunction = val => typeof val === 'function';

JSON

在一样平常开辟中 JSON 实在是太常常运用拉,在这里我们也把它当作一种“范例”给出它的推断要领:

const isValidJSON = str => {
  try {
    const o = JSON.parse(str)
    return o != null && typeof o === "object"
  } catch (e) {
    return false;
  }
};

最终奥义

内容太多让你没法呼吸了?

没事小二这里另有杀手锏能够供应人人运用:

function getType(obj) {
    if(obj && obj.constructor && obj.constructor.name) {
        return obj.constructor.name;
    }
    return Object.prototype.toString.call(obj).replace(/^\[object (.+)\]$/,"$1").toLowerCase();
}

须要注重的是 NaN 在这里照旧返回的是 ‘number’,在 逐日 30 秒 ⏱ 最终等号 中有同砚提问了为何没有对 NaN 举行推断,在一样平常开辟中涌现 NaN 是一件不好的事变,所以小二就没有把它加到推断中去了,假如有须要能够应用 isNaN() 这个要领来举行推断。

一同生长

在疑心的城市里总少不了并肩偕行的
同伴 让我们一同生长。

  • 假如您想让更多人看到文章能够点个 点赞
  • 假如您想鼓励小二能够到 Github 给个 小星星
  • 假如您想与小二更多交换增加微信 m353839115

《逐日 30 秒 ⏱ 数据类型大乱炖》

本文原稿来自
PushMeTop

    原文作者:zhangxiangliang
    原文地址: https://segmentfault.com/a/1190000018580188
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞