zoukankan      html  css  js  c++  java
  • js知识点~js数据类型判断

      JavaScript 中有七种内置类型:

        1、空值 (null)

        2、未定义 (undefined)

        3、布尔值 (boolean)

        4、数字 (number)

        5、字符串 (string)

        6、对象 (object)

        7、符号 (symbol,ES6中新增)

    1、获取数据类型

    /**
         *  **** getType 获取数据的类型 **
         * 返回值的元类型,返回值的 constructor 名的小写字母。undefined 或者 null 将会返回 undefined 或 null。
         * @param v 为传入判断的数据
         * @return string 返回数据类型
         */
        const getType = v => v === undefined ? 'undefined' : v === 'null' ? 'null' : v.constructor.name.toLowerCase();
        console.log("=======> getType")
        console.log(getType(new Set([1, 2, 3]))); // set
        console.log(getType(new Array(1, 2, 3))); // array
        console.log(getType(Object.create({ a: 1 }))); // object
        console.log(getType("1212")); // string
        console.log(getType(1212)); // number
        console.log(getType(true)); // boolean
        console.log(getType(Symbol('x'))); // symbol
    
        /**
         *  **** isType 判断数据的类型 **
         * 返回值的元类型,返回值的 constructor 名的小写字母。undefined 或者 null 将会返回 undefined 或 null。
         * @param v 为传入判断的数据
         * @return string 返回数据类型
         */
        const isType = val => Object.prototype.toString.call(val).slice(8, -1).toLowerCase();
        console.log("=======> isType")
        console.log(isType("1212")) // string
        console.log(isType(1212)) // number
        console.log(isType(true)) // boolean
        console.log(isType(null)) // null
        console.log(isType(undefined)) // undefined
        console.log(isType(NaN)) // number
        console.log(isType(Symbol('x'))) // symbol

    2、检测提供的 val 是否属于指定的类型 type

    /**
         *  **** is 检测提供的 val 是否属于指定的类型 type。 **
         * 运用 Array.includes() 确保 undefined 和 null 被排除在外,并且比较 val 的 constructor 属性和指定的类型 type 是否相等。
         * @param type 指定的类型
         * @param val 为传入判断的数据
         * @return Boolean 返回数据类型
         */
        const is = (type, val) => ![, null].includes(val) && val.constructor === type;
        console.log("=======> is")
        console.log(is(Array, [1])); // true
        console.log(is(ArrayBuffer, new ArrayBuffer())); // true
        console.log(is(Map, new Map())); // true
        console.log(is(RegExp, /./g)); // true
        console.log(is(Set, new Set())); // true
        console.log(is(WeakMap, new WeakMap())); // true
        console.log(is(WeakSet, new WeakSet())); // true
        console.log(is(String, '')); // true
        console.log(is(String, new String(''))); // true
        console.log(is(Number, 1)); // true
        console.log(is(Number, new Number(1))); // true
        console.log(is(Boolean, true)); // true
        console.log(is(Boolean, new Boolean(true))); // true

    3、检测数据是否为布尔值(Boolean)

    /**
         *  **** isBoolean 检测提供的变量是否是布尔类型。 **
         * 用 typeof 来检测 val 是否应该归为布尔原型。
         * @param val 为传入判断的数据
         * @return Boolean 返回数据类型
         */
        const isBoolean = val => typeof val === 'boolean';
        console.log("=======> isBoolean")
        console.log(isBoolean(null)); // false
        console.log(isBoolean(false)); // true
        console.log(isBoolean(undefined)); // false

    4、检测数据是否为空

      注意: 检测提供的变量是否为 null 或者变量的 length 属性是否等于0

    /**
         *  **** isEmpty 检测数据是否为空 **
         *  注意:检测提供的变量是否为 null 或者变量的 length 属性是否等于0。
         *  如果 value 是一个空的 object 、collection 、map 或者 set ,或者没有任何可枚举的属性以及任何没有被当做 collection 的类型都返回 true 。
         *  **** 数字类型与布尔值类型,直接检测为空, undefined, null 也为空
         * @param val 为传入判断的数据
         * @return Boolean 返回数据类型
         */
        const isEmpty = val => val == null || !(Object.keys(val) || val).length;
        console.log("=======> isEmpty")
        console.log(isEmpty(new Map())); // true
        console.log(isEmpty(new Set())); // true
        console.log(isEmpty([])); // true
        console.log(isEmpty({})); // true
        console.log(isEmpty('')); // true
        console.log(isEmpty([1, 2])); // false
        console.log(isEmpty({ a: 1, b: 2 })); // false
        console.log(isEmpty('text')); // false
        console.log(isEmpty(123)); // true
        console.log(isEmpty('123')); // false
        console.log(isEmpty(true)); // true
        console.log(isEmpty(false)); // true
        console.log(isEmpty(undefined)); // true
        console.log(isEmpty(null)); // true

    5、检测数据是否为function

    /**
         *  **** isFunction 检测提供的变量的类型是否是 function 。 **
         *  使用 typeof 进行判断给定的变量是否是 function 原型。
         * @param val 为传入判断的数据
         * @return Boolean 返回数据类型
         */
        const isFunction = val => typeof val === 'function';
        console.log("=======> isFunction")
        console.log(isFunction('x')); // false
        console.log(isFunction(x => x)); // true

    6、检测数据是否为null 或者 undefined

    /**
         *  **** isNil 检测提供的变量的类型是否是 null 或者 undefined 。 **
         *  使用严格相等运算符去对变量进行是否等于 null 或者 undefined 的检测。
         * @param val 为传入判断的数据
         * @return Boolean 返回数据类型
         */
        const isNil = val => val === undefined || val === null;
        console.log("=======> isNil")
        console.log(isNil(null));  // true
        console.log(isNil(undefined));  // true
        console.log(isNil("1212")); // false

    7、检测数据是否为null

    /**
         *  **** isNull 检测提供的变量的类型是否是 null。 **
         *  使用严格相等运算符去对变量进行是否等于 null的检测。
         * @param val 为传入判断的数据
         * @return Boolean 返回数据类型
         */
        const isNull = val => val === null;
        console.log("=======> isNull")
        console.log(isNil(null));  // true
        console.log(isNil(undefined));  // false
        console.log(isNil("1212")); // false

    8、检测数据是否为undefined

    /**
         *  **** isUndefined 检测提供的变量的类型是否是 undefined **
         *  使用严格相等运算符去对变量进行是否等于 undefined的检测。
         * @param val 为传入判断的数据
         * @return Boolean 返回数据类型
         */
        const isUndefined = val => val === undefined;
        console.log("=======> isUndefined")
        console.log(isUndefined(null));  // false
        console.log(isUndefined(undefined));  // true
        console.log(isUndefined("1212")); // false

    9、检测数据是否为number

    /**
         *  **** isNumber 检测提供的变量的类型是否是 number **
         *  使用严格相等运算符去对变量进行是否等于 number的检测。
         *  注意: NaN 类型也是number
         * @param val 为传入判断的数据
         * @return Boolean 返回数据类型
         */
        const isNumber = val => typeof val === 'number';
        console.log("=======> isNumber")
        console.log(isNumber('1'));  // false
        console.log(isNumber(1));  // true
        console.log(isNumber(NaN)); // true
        console.log(isNumber([1, 3])); // false
        console.log(isNumber(null)); // false
        console.log(isNumber(undefined)); // false

    10、检测数据是否为object

    /**
         *  **** isObject 检测给定的变量是否为 object 类型。**
         *  使用 Object 的 constructor 对给定的变量构造一个对象。如果变量是 null 或者 undefined ,将会生成一个空对象。否则生成一个类型和变量本身相等的对象。
         * @param val 为传入判断的数据
         * @return Boolean 返回数据类型
         */
        const isObject = obj => obj === Object(obj);
        console.log("=======> isObject")
        console.log(isObject([1, 2, 3, 4])); // true
        console.log(isObject([])); // true
        console.log(isObject(['Hello!'])); // true
        console.log(isObject({ a: 1 })); // true
        console.log(isObject({})); // true
        console.log(isObject(x => x)); // true
        console.log(isObject(true)); // false

    11、检测数据是否为string

    /**
         *  **** isString 检测提供的变量的类型是否是 string **
         *  使用严格相等运算符去对变量进行是否等于 string
         * @param val 为传入判断的数据
         * @return Boolean 返回数据类型
         */
        const isString = val => typeof val === 'string';
        console.log("=======> isString")
        console.log(isString('10')); // true
        console.log(isString(10)); // false
        console.log(isString(true)); // false

    12、检测数据是否为symbol

    /**
         *  **** isSymbol 检测一个变量是否是 symbol 类型。 **
         *  使用严格相等运算符去对变量进行是否等于 symbol的检测。
         * @param val 为传入判断的数据
         * @return Boolean 返回数据类型
         */
        const isSymbol = val => typeof val === 'symbol';
        console.log("=======> isSymbol")
        console.log(isSymbol('x')); // false
        console.log(isSymbol(Symbol('x'))); // true

    13、检测数据是否为合法的 JSON

        注意:null 也为合法的json, 传入字符串数据(需要排除布尔值,数字 =》返回全部为true)

    /**
         *  **** isValidJSON 检测一个变量是否是合法的 JSON 。 **
         *  使用 JSON.parse() 结合 try… catch 对变量进行判断,如果能正确解析返回 true ,否则返回 false 。
         * 注意: null 也为合法的json, 传入字符串数据(需要排除布尔值,数字 =》返回全部为true)
         * @param val 为传入判断的数据
         * @return Boolean 返回数据类型
         */
        const isValidJSON = obj => {
            try {
                JSON.parse(obj);
                return true;
            } catch (e) {
                return false;
            }
        };
        console.log("=======> isValidJSON")
        console.log(isValidJSON('{"name":"Adam","age":20}')); // true
        console.log(isValidJSON('{"name":"Adam",age:"20"}')); // false
        console.log(isValidJSON(null)); // true
        console.log(isValidJSON(undefined)); // false
        console.log(isValidJSON(122)); // true
        console.log(isValidJSON('122')); // true
        console.log(isValidJSON('')); // false
        console.log(isValidJSON(false)); // true
        console.log(isValidJSON(false)); // true

    14、检测数据是否为NaN

      注意:以下4种方法中,只有 => ES6中提供的isNaN()方法,可以自动转换为Number类型,其他则不自动转化。

    /**
         *  **** isStrictNaN 检测提供的变量的类型是否是 NaN **
         *  注意:不存在类型转换
         * @param val 为传入判断的数据
         * @return Boolean 返回数据类型
         */
        const isStrictNaN = val => val !== val;
        console.log("=======> isStrictNaN")
        console.log(isStrictNaN(NaN)); // true
        console.log(isStrictNaN('a')); // false
        console.log(isStrictNaN(null)); // false
        console.log(isStrictNaN(undefined)); // false
        console.log(isStrictNaN(true)); // false
        console.log(isStrictNaN(123)); // false
    
        /**
         *  **** hasNaN 检测提供的变量的类型是否是 NaN **
         *   ES6中提供的Object.is()方法。
         *  注意:不存在类型转换
         * @param val 为传入判断的数据
         * @return Boolean 返回数据类型
         */
        const hasNaN = val => Object.is(val, NaN);
        console.log("=======> hasNaN")
        console.log(hasNaN(NaN)); // true
        console.log(hasNaN('a')); // false
        console.log(hasNaN(null)); // false
        console.log(hasNaN(undefined)); // false
        console.log(hasNaN(true)); // false
        console.log(hasNaN(123)); // false
    
    
        /**
         *  **** isNaN 检测提供的变量的类型是否是 NaN **
         *   ES6中提供的Number.isNaN()
         * 注意:不存在类型转换
         */
        console.log("=======> Number.isNaN")
        console.log(Number.isNaN(NaN)); // true
        console.log(Number.isNaN('a')); // false
        console.log(Number.isNaN(null)); // false
        console.log(Number.isNaN(undefined)); // false
        console.log(Number.isNaN(true)); // false
        console.log(Number.isNaN(123)); // false
    
        /**
         *  **** isNaN 检测提供的变量的类型是否是 NaN **
         *   ES6中提供的isNaN()。
         * 注意:存在类型转换,转化为Number类型
         */
        console.log("=======> isNaN")
        console.log(isNaN(NaN)); // true
        console.log(isNaN('a')); // false
        console.log(isNaN(null)); // false
        console.log(isNaN(undefined)); // true
        console.log(isNaN(true)); // false
        console.log(isNaN(123)); // false
  • 相关阅读:
    洛谷 P1119 灾后重建
    [NOIP 2011] 观光公交
    AtCoder Beginner Contest 071 D
    UOJ #228. 基础数据结构练习题
    bzoj 3673&3674: 可持久化并查集 by zky
    bzoj 2427: [HAOI2010]软件安装
    都市环游
    poj2299——Ultra-QuickSort
    poj1958——Strange Towers of Hanoi
    洛谷 P4139 上帝与集合的正确用法
  • 原文地址:https://www.cnblogs.com/songmeiling/p/12469434.html
Copyright © 2011-2022 走看看