- 看透JavaScript:原理、方法與實(shí)踐
- 韓路彪
- 717字
- 2020-11-28 15:50:47
6.2 直接量的封包與解包
直接量是單個值,并不是對象,當(dāng)然也就沒有屬性。但是在ES中,我們可以使用直接量來調(diào)用屬性方法,例如下面的例子。
function log(msg){ console.log(msg); } var s ="hello"; log(s.toUpperCase()); //HELLO log(s.substr(3, s.length)); //lo var n = 325.764; log(n.toPrecision(5)); //325.76 log(n.toExponential(5)); //3.25764e+2 n = 7596389; log(n.toLocaleString()); //7,596,389 log(n.toLocaleString("zh-Hans-CN-u-nu-hanidec")); //七,五九六,三八九 var b = true; log(b ===“true”); //false log(b.toString() ===“true”); //true log(b.toString() === true); //false
這個例子中,string類型的變量s調(diào)用了toUpperCase、substr和length屬性,分別用于將s的值變?yōu)榇髮?、截取s的一部分及獲取s的長度;number類型的變量n調(diào)用了toPrecision、toExponential和toLocaleString方法,分別用于設(shè)置n的精度、將n轉(zhuǎn)換為科學(xué)計(jì)數(shù)法,以及將n轉(zhuǎn)換為本地?cái)?shù)組表達(dá)格式;boolean類型的b屬性調(diào)用了toString方法,用于將boolean轉(zhuǎn)換為string類型。
既然直接量只是一個值而不是對象,那么它怎么可以調(diào)用屬性方法呢?原來ES有一種叫作自動封包/解包的功能。封包/解包對于熟悉Java的讀者來說一定不會陌生(在Java中也稱裝箱/拆箱,它們的含義都一樣),其作用是在程序執(zhí)行過程中按照實(shí)際需要自動在直接量和其所對應(yīng)的對象類型之間進(jìn)行轉(zhuǎn)化。將直接量轉(zhuǎn)換為對應(yīng)的對象進(jìn)行處理叫作封包,反過來,將對象轉(zhuǎn)換為直接量叫作解包。封包和解包都是JS引擎自動完成的,而且只是為了完成程序的執(zhí)行而進(jìn)行的暫時轉(zhuǎn)換,并不會實(shí)際修改變量的類型。有了封包/解包我們就不需要考慮什么時候使用直接量什么時候使用對象了,而且也不需要擔(dān)心變量類型會發(fā)生變化。上面的例子就使用了封包功能,下面我們再來看一個使用到解包功能的例子。
var m = new Number(5); var n = m+2; //m會自動解包為直接量后再計(jì)算 console.log(n); //7 console.log(typeof m); //object console.log(typeof n); //number
這個例子中,定義了對象類型的m變量,當(dāng)對其進(jìn)行加法計(jì)算時m會自動解包為直接量再進(jìn)行計(jì)算,但是計(jì)算之后m的類型并不會變化,還是object類型。
實(shí)際使用中我們很少直接使用直接量所對應(yīng)的包裝對象,所以封包功能使用得非常多,但是解包功能相對使用得就比較少了。
- Python數(shù)據(jù)分析入門與實(shí)戰(zhàn)
- 軟件項(xiàng)目管理(第2版)
- Hands-On Data Structures and Algorithms with JavaScript
- PowerCLI Cookbook
- 人人都是網(wǎng)站分析師:從分析師的視角理解網(wǎng)站和解讀數(shù)據(jù)
- Building Minecraft Server Modifications
- Building Serverless Applications with Python
- Mastering Web Application Development with AngularJS
- Spring Security Essentials
- Beginning C++ Game Programming
- 智能手機(jī)故障檢測與維修從入門到精通
- Greenplum構(gòu)建實(shí)時數(shù)據(jù)倉庫實(shí)踐
- 微前端設(shè)計(jì)與實(shí)現(xiàn)
- JavaEE架構(gòu)與程序設(shè)計(jì)
- ArcPy and ArcGIS(Second Edition)