你不知道的JavaScript(六)Box&Unbox
2015-05-21 21:03
267 查看
很多语言中都有Box和Unbox的概念,很多书籍把Box翻译为”装箱操作”,指的是將基本数据类型包装成对象;Unbox和它相反,把对象类型转换为基本类型。
我们知道JavaScript中只有对象才有属性和方法,看下面的代码,你可能会产生一些疑惑:
<script type="text/javascript"> var str = "hello world"; var num = 200; alert(typeof str);//string alert(typeof num);//number alert(str.length);//11 alert(num.toString());//200 </script>
细心的朋友会发现,我们定义两个变量,str变量存放string类型数据,num 变量则存放number类型数据。下面我们竟然可以使用
str.length属性获取字符串的长度,还可以直接使用
num.toString()这种形式將数值转换为字符串。
为什么可以这样调用呢?不是说只有对象才有属性和方法吗?
上一节中提到JS提供一些内置对象模版,每种基本类型都有相应的对象模版与之对应,例如string->String,number->Number等等。事实上,当我们使用基本类型调用属性或方法时,JS引擎会自动將基本类型装箱成对象模版对应的对象。
str.length
这段代码JS引擎会自动做类似与下面的处理:
new String(str).length
为了证明这一点,笔者写了下面一段代码:
<script type="text/javascript"> String.prototype.getLen = function() { return this.length; } var str = "hello world"; alert(str.getLen()); </script>
为String对象模版增加一个自定义的成员方法getLen(),可以看到我们一样可以使用
str.getLen()形式调用。
所以出于提高性能考虑,请尽量不要写下面类似的代码:
<script type="text/javascript"> var str = "hello world"; //for循环中使用str.length for(i=0;i<str.length;i++) { //... } </script>
拆箱操作(Unbox)就更简单了,分为自动拆箱和手动拆箱两种,例如:
<script type="text/javascript"> var strObj = new String("hello world"); alert(typeof strObj);//object alert(typeof (strObj + ""));//string alert(typeof strObj.valueOf());//sring </script>
当对象类型和基本类型数据进行运算时会自动拆箱,我们还可以手动调用对象的valueOf()方法进行拆箱。
演示代码地址:https://github.com/rongbo-j/you-dont-know-js
相关文章推荐
- 你不知道的JavaScript(六)Box&Unbox
- 你不知道的JavaScript(六)Box&Unbox
- 你不知道的Javascript笔记:up & going
- 你不知道的javascript之运算符||和&&
- 【转载】JavaScript中“&&”和“||”操作符(总结篇)_javascript技巧
- 你不知道的JavaScript(三)字符串
- 《你不知道的JavaScript-上卷》笔记
- Javascript 中的 && 和 || 使用小结
- 第一章 js简介& 第二章 在HTML中使用JavaScript
- JavaScript_A Beginner's Guide - Understanding variables - 09/21/2012
- Notes On <Professional.Javascript.For.Web.Developer> - 1
- JavaScript(二)-13-(全局方法&Number对象)
- 你不知道的JavaScript--Item1 严格模式
- href="javascript:void(0);"与#差异
- Writing Modular JavaScript With AMD, CommonJS & ES Harmony
- 你不知道的JavaScript博文参考书籍
- JavaScript 实现 复选框…
- javascript 禁止输入、禁止粘…
- 你可能不知道的10个JavaScript小技巧
- javascript 动态调用方法和传参数