ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

js中的数据类型及判断

2021-09-28 19:57:53  阅读:141  来源: 互联网

标签:判断 Object 数据类型 object js toString call prototype


js数据类型有哪些

ECMAScript 规范中, 分为 基本类型引⽤类型 两⼤类,如下所示: 基本数据类型(值类型): 
  • number: NaN\Infinity\正常数字
    string: 正常字符串\模版字符串
    boolean: true\false
    null: 空 typeof null ==> "object"
    undefined: 未定义
    symbol: 唯一值 
    bigInt: 大数字
引用数据类型:  (对象数据类型)
  • 在js中Object是一个基类
    object:Object、Array、function、Date、RegExp。  

基本数据类型和引用数据类型的区别

基本类型  也称为简单类型,由于其占据空间固定,是简单的数据段,为了便于提升变量查询速度,将其 存储在栈中,即按值访问。 引⽤类型  也称为复杂类型,由于其值的⼤⼩会改变,所以不能将其存放在栈中,否则会降低变量查询速度,因此,其值存储在堆(heap) 中,⽽存储在变量处的值,是⼀个指针,指向存储对象的内存处,即按址访问。

堆栈内存

堆(内存) Heap 存储计算所用的数据 仓库

栈(内存) Stack 存贮计算过程空间 先进先出 先进后出

基本数据类型和引用数据类型在内存中的执行(图)

 


js中常见的数据类型判断

  • typeof 只能判断基本数据类型(null==>object); 判断引用数据类型 都返回object
       let str = 'dhvd' 
       console.log(typeof(str)); //string

       let num = 123
       console.log(typeof(num)); //number

       let flag = false
       console.log(typeof(flag)); //boolean

       let s = Symbol('s')
       console.log(typeof(s)); //symbol

       let obj = {} 
       console.log(typeof(obj)); //object

       let arr = [] 
       console.log(typeof(arr)); //object
  • instanceof 只有知道数据类型才可以判断 语法: 要判断数据类型的变量 instanceof Array,返回结果为布尔值,true/false。
        [] instanceof Array;// true
        {} instanceof Object;// true
        new Date() instanceof Date;// true
        function Person() { };
        console.log(new Person() instanceof Person); 
        [] instanceof Object;// true
        new Date() instanceof Object;// true
        new Person instanceof Object;// true

        *由于Object 是 js 的一个基类,根据原型链的机制,[] instanceof Object; 也返回 true 。 

  • constructor 语法: 要判断数据类型的变量.constructor === Array
        console.log('数据类型判断' -  constructor);
        console.log(arr.constructor === Array); //true
        console.log(date.constructor === Date); //true
        console.log(fn.constructor === Function); //true

        *null 和 undefined 是⽆效的对象,因此是不会有 constructor 存在的。

  • Object.prototype.toString.call()  原生js最全能的数据类型判断 "[object 数据类型]"
        Object.prototype.toString.call(''); // [object String]
        Object.prototype.toString.call(1); // [object Number]
        Object.prototype.toString.call(true);// [object Boolean]
        Object.prototype.toString.call(Symbol());//[object Symbol]
        Object.prototype.toString.call(undefined);// [object Undefined]
        Object.prototype.toString.call(null);// [object Null]
        Object.prototype.toString.call(new Function());// [object Function]
        Object.prototype.toString.call(new Date());// [object Date]
        Object.prototype.toString.call([]);// [object Array]
        Object.prototype.toString.call(new RegExp());// [object RegExp]
        Object.prototype.toString.call(new Error());// [object Error]
        Object.prototype.toString.call(document);// [object HTMLDocument]
        Object.prototype.toString.call(window);//[object global] window 是全局对象global 的引⽤
  • Array.isArray()  数组API
  • Number.isNaN()  是不是 不是一个数 NaN ===> not a number


手写  Object.toType(a)  方法判断 js 数据类型

        // Object.toType(a) ==> "数据类型"
        function toType(data) {
            if (typeof data !== 'object') return typeof data;
            if (typeof data === 'object' && data == null) return 'null';
            let obj = {},
                type = obj.toString.call(data),
                result;
            type.replace(/\[object (\w+)\]/, (q, p) => {
                result = p.toLowerCase();
            })
            return result;
        }

标签:判断,Object,数据类型,object,js,toString,call,prototype
来源: https://blog.csdn.net/hao_xiao_guang/article/details/120534370

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有