好得很程序员自学网

<tfoot draggable='sEl'></tfoot>

对象包装器

对象包装器

对象包装器也被称为 包装器 、 包装对象 .

所有包装器都是内置对象,如 Number 、 String 、 Boolean 等。

1. 装箱

通常在对 一个 变量赋值的时候,都会直接给定 一个 字面量。

  var  string  =   '996 say no!'  ; 

console .  log  (  typeof  string )  ;   //  输出 :"string" 
 

通过类型的检测,可以知道他是 一个 字符串。

但又可以访问到一些 属性 ,比如 length :

  var  string  =   '996 say no!'  ; 

console .  log  (  typeof  string )  ;   //  输出 :"string" 
console .  log  ( string . length )  ;   //  输出 :11 
 

照道理讲只有对象才能访问到 属性 ,字符串字面量只是 一个 值而已。

这里就是因为 JavaScript 内部的拆装箱的机制。

当把 一个 字面量像对象一样操作的时候, JavaScript 会进行装箱操作。

可以把上面这份 代码 理解成下面这份:

  var  string  =   '996 say no!'  ; 

console .  log  (  typeof  string )  ;   //  输出 :"string" 
console .  log  (  (  new   String  ( string )  )  . length )  ;   //  输出 :11 
 

其中的 new String 就是装箱操作, String 就是字符串的对象包装器。

这样将 字符串转换 成了对象,就能访问到其 属性 了。

需要注意的是,对 一个 字面量包装后不会 修改 原始值,上述例子中的 string 变量的值依然是字符串字面量,不会变成对象,所以每一次对 一个 字面量做访问 属性 或 方法 的操作时,都会做一次装箱操作。
许多开发者会考虑频繁装箱的 性能 影响,其实通常是不必要的,一是现在计算机和浏览器的处理执行速度很快了,几乎可以忽略不计装箱的开销,另外就是业务开发中在没有明确的 性能 要求下,是不考虑 性能 的,以完成业务逻辑为主。

2. 拆箱

拆箱操作很多时候是 隐式转换 过程中发生的。

如将字符串进行对象相等操作:

  var  obj  =   { 
  toString :   function  (  )   { 
     return   '996'  ; 
   }  , 
 }  ; 

console .  log  ( 
   '996'   ==  obj , 
 )  ;   //  输出 :true 
 

上述例子,在字符串字面量 996 和对象 obj 进行比较的时候,会尝试将右侧的对象转化成字符串,即 调用 toString 方法 (在 ES6 中则会先看有没有部署 Symbol.toPrimitive 方法 )。

这个即使拆箱的过程。

3. 小结

理解对象包装器的作用,可以更好的理解内置对象的用途。

jQuery ? ?变量提升

查看更多关于对象包装器的详细内容...

  阅读:38次

上一篇

下一篇

第1节:什么是 JavaScript    第2节:学习环境准备    第3节:调试方案    第4节:JavaScript 变量    第5节:JavaScript 数据类型    第6节:JavaScript if 语句    第7节:for 语句    第8节:JavaScript 算数运算符    第9节:JavaScript 比较运算符    第10节:JavaScript 逻辑运算符    第11节:JavaScript 函数    第12节:JavaScript 表达式    第13节:JavaScript 对象    第14节:JavaScript 字符串    第15节:JavaScript 数字    第16节:JavaScript 数组    第17节:JavaScript switch 语句    第18节:JavaScript while 语句    第19节:JavaScript 的 break 与 continue    第20节:JavaScript with    第21节:document.cookie    第22节:JavaScript Function    第23节:JavaScript Math    第24节:JavaScript Date    第25节:JavaScript RegExp    第26节:JavaScript JSON    第27节:什么是 DOM    第28节:DOM 和 JavaScript 的关系    第29节:获取和操作 DOM 节点    第30节:DOM 与事件    第31节:DOM 事件绑定    第32节:DOM 事件对象    第33节:DOM 事件流    第34节:事件相关的优化    第35节:自定义事件    第36节:表单校验    第37节:什么是 BOM    第38节:常用的 BOM 相关对象    第39节:BOM 常用属性和方法    第40节:AJAX    第41节:异常处理    第42节:三元运算符    第43节:逗号操作符    第44节:void    第45节:typeof    第46节:delete 操作符    第47节:debugger    第48节:getter & setter    第49节:new 运算符与构造函数    第50节:JavaScript 原型    第51节:JavaScript instanceof    第52节:JavaScript this    第53节:严格模式    第54节:作用域    第55节:闭包    第56节:变量提升    第57节:对象包装器    第58节:Lodash    第59节:moment    第60节:swiper    第61节:ECMAScript 6    第62节:Node.js    第63节:Babel    第64节:CSS 预处理器    第65节:代码规范    第66节:TypeScript    第67节:WebComponents    第68节:Vue、React、Angular    第69节:小程序    第70节:JavaScript 关键字    第71节:分号导致的问题    第72节:对象属性访问问题    第73节:this 使用问题    第74节:浮点数精度问题    第75节:独一无二的 NaN    第76节:避免全局污染    第77节:控制台观察对象问题    第78节:根据环境选择语言特性    第79节:相关资源