JavaScript: 装箱/包装类型/万能检测数据类型

JavaScript: 装箱/包装类型/万能检测数据类型

在JavaScript中,值的类型分为基本数据类型引用数据类型,也可以叫做:原始值类型对象类型

基本数据类型分为: string、boolean、number、null 和 undefined

引用数据类型即:object

其中,string、boolean、number有着对应的String、Boolean、Number对象,两者存在一定的区别

  typeof 'hello';  // 'string'
  typeof new String('hello');  // 'object'

但是,我们会发现即使使用的是基本数据类型的数据,依旧可以使用其对应的对象中的方法,这里就涉及到了JavaScript中的装箱

装箱:

装箱就是把基本数据类型转化为对应的引用数据类型的操作,即:对基本数据类型进行包装

所以,包装数据类型也就是装箱

var s = "abc"
s.indexOf("a");  //即使是基本类型的数据,依然可以使用String对象中的方法

装箱的实现机制(原理):

​ 1、创建一个基本数据类型的数据,这个时候,js会自动创建一个对应的对象,这个对象也可以叫做包装数据类型对象

​ 2、通过这个对象,我们的基本类型数据就可以使用对象中的方法了

​ 3、使用完方法之后,销毁这个实例

 //实现原理
 var s1 = "abc";
 var s2 = new String("abc");
 s1 = s2.indexOf("a");
 s2 = null;

拆箱

拆箱就是把引用数据类型转化为基本数据类型的操作

//将引用数据类型的数据转换为对应的基本数据类型
var s = new String("abc");
console.log(typeof s); //object
    
var s1 = s.toString();
var s2 = s.valueOf();
console.log(typeof s1);//string
console.log(typeof s2);//string

拆箱的实现机制:

toString() 或 valueOf() 可以获取到数据最原始的数据类型,

通过这个机制,可以实现对引用数据类型的转化。

万能检测数据类型

对所有数据的检测也是根据拆箱所提供的方法,

Object.prototype.toString.call(数据)

括号中填要检测的数据,返回值为检测数据的数据类型

	var a = Object.prototype.toString.call("abc");
    var b = Object.prototype.toString.call(10);
    var c = Object.prototype.toString.call(undefined);
    var d = Object.prototype.toString.call([1,2,3,4]);
    var e = Object.prototype.toString.call({name: "zs"});
    var f = Object.prototype.toString.call(function(){console.log("函数");});
    console.log(a);  // [object String]
    console.log(b);  // [object Number]
    console.log(c);  // [object Undefined]
    console.log(d);  // [object Array]
    console.log(e);  // [object Object]
    console.log(f);  // [object Function]

注:

这行代码不懂什么意思不重要,直接可以拿来用;

当然,代码的意思还是得解释一下:

Object:最顶层的对象,也可以叫做对象的构造函数。由于object有一个构造函数Obejct ,即 var o = new Obejct() 可以创造对象

prototype: 函数的原型(是一个对象,里面存放操作着object类型的方法)

tostring(): 获取数据最原始的数据类型,

call() : 改变this的指向

所有代码的意思为:通过对象的原型中的tostring方法,让方法中的this指向数据,来获取到数据的数据类型

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值