装箱和拆箱(js的问题)

装箱:基本数据类型 -> 引用数据类型

html 复制代码
var num = 123;
var numObj = new Number(123);

console.log(typeof num) // number
console.log(typeof numObj) // object

拆箱:引用数据类型 -> 基本数据类型

html 复制代码
var numObj = new Number(123);

console.log(numObj.valueOf()) // 123

console.log(typeof numObj.valueOf()) // number

拆箱操作原理:

html 复制代码
内部执行

toPrimitive(input, type)
input 传入的值
type 值类型

1. 如果是原始类型的值直接返回
2. 如果不是,调用 input.valueOf() 是原始类型就返回
3. 如果不是,继续调用  input.toString() 是原始类型就返回
4. 报错
html 复制代码
valueOf()  有原始类型的值返回,没有返回对象本身
toString() 对象[object type] type:对象类型

例题1:

html 复制代码
console.log([] + [])
<empty string>

// 分析:
console.log([])
Array []

console.log([].valueOf())
Array []

console.log([].toString())
<empty string>

例题2:

html 复制代码
console.log([] + {})
[object Object]

// 分析:
console.log({}.valueOf())
{}

console.log({}.toString())
[object Object]

// 交换位置,{}可能被识别为代码块
console.log({} + [])
[object Object] 或 0

console.log(+ [])
0

console.log(+ '')
0

console.log(+ {})
NaN
相关推荐
2501_93070778几秒前
使用C#代码在 Word 文档页面中添加装订线
开发语言·c#·word
WF_YL2 分钟前
极光推送(JPush)快速上手教程(Java 后端 + 全平台适配)
java·开发语言
一路往蓝-Anbo4 分钟前
【第48期】:嵌入式工程师的自我修养与进阶之路
开发语言·网络·stm32·单片机·嵌入式硬件
一只小bit5 分钟前
Qt 多媒体:快速解决音视频播放问题
前端·c++·qt·音视频·cpp·页面
梦6505 分钟前
React 高阶组件
前端·react.js·前端框架
郝学胜-神的一滴5 分钟前
深入理解网络分层模型:数据封包与解包全解析
linux·开发语言·网络·程序人生·算法
CHU7290355 分钟前
智慧回收新体验:同城废品回收小程序的便捷功能探索
java·前端·人工智能·小程序·php
Marshmallowc5 分钟前
从URL变化到组件重绘:React Router 状态分发机制与组件挂载逻辑深度全解
前端·react.js·前端框架·react router·组件生命周期
程序小馆6 分钟前
Qt cmake add_subdirectory 后无法使用子模块的资源(如图片、翻译文件)的解决方案
开发语言·qt
派大鑫wink6 分钟前
【Day42】SpringMVC 入门:DispatcherServlet 与请求映射
java·开发语言·mvc