在JavaScript中,有时候会遇到以下两种情况
  1. 基本类型的变量, 直接调用方法

     var item = 1234item.toString() // '1234'var num = 123;num.toFixed(2) // '123.00'复制代码
众所周知只有Object类型才有方法,那上述代码基本类型为什么也可以调用方法,其中涉及到JavaScript的装箱。

装箱的概念:把基本类型转化为相应的对象。而装箱又分为显式与隐式

上述代码就是典型的隐式装箱:
  1. 读取基本类型的值,后台创建一个临时的该基本类型所对应的对象。
  2. 对基本类型调用方法,实际是在该基本类型的对象上调用方法。
  3. 执行方法后该对象立马销毁。
     var item = 1234item.toString() // '1234'// 此代码等价于var item = new Number(1234);item.toString();var num = 1234;num.toFixed(2) // '1234.00'// 此代码等价于var num = new Number(1234)num.toFiexed(2)复制代码
显式装箱:用内置对象例如Number、Boolean、String、Object等 对基本类型进行显式装箱

var bool = new Boolean(true)
var Str = new String('123')复制代码

2.把引用类型的值当做基本类型的值来使用,这里面涉及到拆箱操作,拆箱是把引用类型转化为基本类型
var num = [1, 2, 3, 4]
var obj = {name: 'wsd'
}
console.log(num + 1) // 1,21
console.log(str.toString()) // [object Object]复制代码
拆箱内部过程是调用了一个抽象方法toPrimitive(val, type),该方法第一个参数接收转换的参数,第二个参数非必须,为对象被期待转换的类型。
这个方法的本质是:
  1. 如果val是object,则会先执行valueOf()方法,如果结果为原始值,则返回此结果;
  2. 否则再调用tostring方法;如果得出结果为原始值,则返回结果,否则抛出异常
    var num = [1, 2, 3, 4]
    console.log(num + 1) // 1,21//先执行valueOf()方法
    num.valueOf() //  [1, 2, 3, 4]//结果不是原始值,再调用toString方法
    num.valueOf().toString() // 1,2,3,4// 得到基本类型数据
    console(num + 1)   //  '1,2,3,4' + 1 = '1,2,3,41'复制代码

转载于:https://juejin.im/post/5d317501f265da1bc23fb144

JavaScript 基本类型的装箱与拆箱相关推荐

  1. [CLR via C#]5.3 值类型的装箱和拆箱

    原文:[CLR via C#]5.3 值类型的装箱和拆箱 在CLR中为了将一个值类型转换成一个引用类型,要使用一个名为装箱的机制. 下面总结了对值类型的一个实例进行装箱操作时内部发生的事: 1)在托管 ...

  2. C# tips ---值类型的装箱和拆箱

    装箱过程,如: myStruct myobj= new myStruct(); object baseobj =myobj; 在上述隐式转换中,myobj的内容被复制到堆上,放在一个装箱的对象上,ba ...

  3. 浅谈.NET中的类型和装箱、拆箱原理

    谈到装箱拆箱,大概的意思就是值类型和引用类型的相互转换呗---值类型到引用类型叫装箱,反之则叫拆箱.这当然没有问题,可是你只知道这么多,那么建议你花点时间看看楼主这篇文章 1. .NET中的类型 为了 ...

  4. 读CLR via C#总结(4) 值类型的装箱和拆箱

    值类型是比引用类型更"轻型"的一种类型,因为它们不作为对象在托管堆中分配,不会被垃圾回收,也不通过指针来引用.但在许多情况下,都需要获取对值类型的一个实例引用.为了将一个值类型转换 ...

  5. 包装类型与基本类型的装箱与拆箱操作

    文章目录 概述 Boolean 与 boolean Character 与 char Byte 与 byte Short 与 short Integer 与 int Float 与 float Dou ...

  6. JavaScript中的 自动装箱 自动拆箱

    常说"js万物皆对象",但是基本类型不是对象,它只有一个值,没有属性和方法.自动装箱的作用就是让基本类型可以表现的像对象. 自动装箱和自动拆箱是隐式发生的. 当尝试调用基本类型的属 ...

  7. 六个重要的.NET概念:栈、堆、值类型、引用类型、装箱和拆箱

    目录 介绍 当你声明一个变量时,里面有什么? 栈和堆 值类型和引用类型 那么哪些数据类型是引用类型,哪些是值类型? 装箱和拆箱 装箱和拆箱的性能含义 关于源代码 下载源代码 - 42.5 KB 介绍 ...

  8. C# 装箱和拆箱[整理]

    1. 装箱和拆箱是一个抽象的概念 2. 装箱是将值类型转换为引用类型 :拆箱是将引用类型转换为值类型 利用装箱和拆箱功能,可通过允许值类型的任何值与Object 类型的值相互转换,将值类型与引用类型链 ...

  9. C# 引用类型与值类型转换-装箱和拆箱

    文章目录 简介 用例 装箱 拆箱 博主写作不容易,孩子需要您鼓励 万水千山总是情 , 先点个赞行不行 简介 拆箱就是把 "引用" 类型转化为 "值" 类型: 装 ...

最新文章

  1. 《Adobe Flash CS6中文版经典教程》——导读
  2. 动态代理案例1:运用Proxy动态代理来增强方法
  3. VTK:可视化之BackgroundGradient
  4. [转]Angular 单元测试讲解
  5. 封装jQuery下载文件组件
  6. 关于Spring AOP,除了动态代理、CGLIB,你还知道什么?
  7. QS世界大学排名_百度百科
  8. 杭电1492 The number of divisors(约数) about Humble Numbers
  9. linux文件管理器thunar,文件管理器:Nautilus,Thunar,PCManFM,Konqueror,Dolphin,Krusader
  10. JSON的4种解析方式使用以及对比
  11. 小王Java学习打卡day07——模板方法设计,接口,多态
  12. opencv中关于cvtColor函数性能测试
  13. 2点睡10点起不算熬夜?除非你每天都能执行
  14. 编写一个计算图形面积和周长的程序
  15. C/C++ DLL封装及调用
  16. Tomcat启动异常:A child container failed during start 与 ClassNotFoundException解决方法
  17. 本土回忆! 即使你走的再远,也不能忘了让你生长的老家文化~
  18. OpenAI 最强对话模型 ChatGPT: 用户已破百万,落地将有几何
  19. C++使用CreateProcess执行cmd命令(实例演示)
  20. 入门Web前端开发需要学习哪些技术?薪资高吗?

热门文章

  1. JS如何判断浏览器类型和详细区分IE各版本浏览器
  2. Java设计模式陈列
  3. VISTA三步共享文件夹
  4. 圣地亚哥分校 计算机,加州大学圣地亚哥分校计算机怎么样?
  5. flutter 返回指定界面_Flutter 即学即用系列博客——04 Flutter UI 初窥
  6. python 3d重建_三维人脸重建(一)——Python读取obj文件
  7. Zookeeper原理架构
  8. Win XP环境Tuxedo8.1安装、配置指南
  9. MongoDB最大连接数的查看与修改
  10. Windows下底层数据包发送实战