JavaScript数据类型及判断方法

本文深入解析JavaScript中的数据类型,区分基本类型与引用类型,并详细阐述它们的存储方式、访问方式及类型检测方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

两种类型:基本类型和引用类型

【基本类型】

6种基本类型:String,Number,Boolean,Null,Undefined,Symbol

访问:基本数据类型的值是按值访问的。

存储:基本类型的变量是存放在栈内存(Stack)里的。

【引用类型】

1种引用类型:Object

访问:引用类型的值是按引用访问的。

存储:引用类型的值是保存在堆内存(Heap)中的对象(Object)。

【注】

  • 栈内存中包含了变量的标示符和指向堆内存中该对象的指针
  • 堆内存中包含了对象的内容
  • JavaScript 不能直接操作对象的内存空间(堆内存)

检测类型:

  • typeof: 经常用来检测一个变量是不是基本数据类型
  • 例:若结果是object或function,就不是基本数据类型
        var a;
        typeof a;    // undefined
       
        a = null;
        typeof a;    // object
        
        a = true;
        typeof a;    // boolean
        
        a = 1;
        typeof a;    // number 
        
        a = "111111111";
        typeof a;    // string
        
        a = Symbol();
        typeof a;    // symbol
        
        a = function(){}
        typeof a;    // function
        
        a = [];
        typeof a;    // object
        
        a = {};
        typeof a;    // object
        
        a = /aaa/g;
        typeof a;    // object 
  • instanceof: 用来判断某个构造函数的 prototype 属性所指向的对象是否存在于另外一个要检测对象的原型链上。
    简单说就是判断一个引用类型的变量具体是不是某种类型的对象
  • 例:
  •     ({}) instanceof Object              // true
        
        ([]) instanceof Array               // true
        
        (/aa/g) instanceof RegExp           // true
        
        (function(){}) instanceof Function  // true

     Object.prototype.toString.call()(这个是判断类型最准确的类型判断方法)。toString是Object原型对象上的一个方法,该方法默认返回其调用者的具体类型,更严格的讲,是 toString运行时this指向的对象类型, 返回的类型格式为[object,xxx],xxx是具体的数据类型,其中包括:String,Number,Boolean,Undefined,Null,Function,Date,Array,RegExp,Error,HTMLDocument,… 基本上所有对象的类型都可以通过这个方法获取到

Object.prototype.toString.call('') ;   // [object String]
Object.prototype.toString.call(1) ;    // [object Number]
Object.prototype.toString.call(true) ; // [object Boolean]
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 window] 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值