摘要:因此當(dāng)執(zhí)行時(shí),會(huì)自動(dòng)將基本類(lèi)型包裝成對(duì)應(yīng)的對(duì)象,調(diào)用對(duì)象上的方法,完成之后自動(dòng)將對(duì)象銷(xiāo)毀。所以,這個(gè)函數(shù)正確寫(xiě)法應(yīng)該用轉(zhuǎn)換函數(shù)將轉(zhuǎn)為。
網(wǎng)上看到下面這段代碼,很有意思。
String.prototype.cut = function (len) { return this.length > len ? this.substring(0, len) + "..." : this; }; var obj = ["Superman", "Batman", "Iron Man"]; console.log(typeof obj[1].cut(6)); console.log(obj[1].cut(6));
這段代碼很簡(jiǎn)單,判斷字符串的長(zhǎng)度,如果大于給定長(zhǎng)度(L)輸出,輸出字符串前L位加上“…”,否則輸出字符串本身。
那么,上面的代碼是不是和我們期待的一樣輸出下面的內(nèi)容呢?
"String" "Batman"
答案是否定的,實(shí)際的輸出其實(shí)是:
"object"
這其實(shí)是因?yàn)镾tring對(duì)象(String Object)和String基本類(lèi)型(String Primitive)的不同導(dǎo)致的。字符串在JavaScript中有兩種存在形式:
new String("object");// String Object "primitive";// String Primitive
String的所有實(shí)用方法其實(shí)都是在String對(duì)象的prototype上,String基本類(lèi)型是沒(méi)有這些方法的。
因此當(dāng)執(zhí)行"primitive".slice(0)時(shí),JavaScript會(huì)自動(dòng)將基本類(lèi)型包裝成對(duì)應(yīng)的對(duì)象,調(diào)用對(duì)象上的方法,完成之后自動(dòng)將對(duì)象銷(xiāo)毀。因此,最上面的cut函數(shù)中this其實(shí)已經(jīng)不是String Primitive而是String Object,當(dāng)我們直接返回this時(shí),返回值其實(shí)是”Batman”的String Object,所以typeof返回object。
所以,這個(gè)cut函數(shù)正確寫(xiě)法應(yīng)該用String轉(zhuǎn)換函數(shù)將Object轉(zhuǎn)為Primitive。
String.prototype.cut = function (len) { return this.length > len ? this.substring(0, len) + "..." : String(this); };
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://m.hztianpu.com/yun/78562.html
摘要:將與空字符串相加,即可將其轉(zhuǎn)換為字符串。這兩者是非常不同的事實(shí)上,將作為構(gòu)造函數(shù)使用并不常見(jiàn),因此僅使用它來(lái)轉(zhuǎn)換字符串就好了。這就意味著兩者的計(jì)算過(guò)程是這樣的返回值,然后使用轉(zhuǎn)換為字符串。 譯者按: 語(yǔ)言的細(xì)枝末節(jié)了解一下就可以了,不需要太較真,不過(guò)如果一點(diǎn)也不知道的話(huà),那就不太妙了。 原文: Converting a value to string in JavaScript 譯...
摘要:結(jié)論最后證明相對(duì)于對(duì)原始值賦值,給對(duì)象賦值是它的一個(gè)唯一優(yōu)勢(shì)。而且,原始值是不可變的,你不可能通過(guò)改變他們的屬性值來(lái)修改他們。而且,我認(rèn)為對(duì)原始值深刻的理解,以及當(dāng)使用他們的時(shí)候知道具體發(fā)生了什么是深入理解這門(mén)語(yǔ)言邁出重要的一步。 第一次翻譯,可能有很多地方不恰當(dāng),歡迎指正。 原文地址:http://javascriptweblog.wordpress.com/2010/09/27/...
摘要:所謂裝箱轉(zhuǎn)換,正是把基本類(lèi)型轉(zhuǎn)換為對(duì)應(yīng)的對(duì)象,他是類(lèi)型轉(zhuǎn)換中一種相當(dāng)重要的種類(lèi)。拆箱轉(zhuǎn)換在標(biāo)準(zhǔn)中,規(guī)定了函數(shù),它是對(duì)象類(lèi)型到基本類(lèi)型的轉(zhuǎn)換即,拆箱轉(zhuǎn)換。拆箱轉(zhuǎn)換會(huì)嘗試調(diào)用和來(lái)獲得拆箱后的基本類(lèi)型。 JavaScript隱式類(lèi)型轉(zhuǎn)換 基本數(shù)據(jù)類(lèi)型 ECMAScript 一共定義了七種 build-in types,其中六種為 Primitive Value,Null, Undefined...
摘要:值傳遞引用傳遞是值傳遞,是引用傳遞。但這影響會(huì)根據(jù)父類(lèi)是屬于還是而有微妙差別。我們?cè)O(shè)想有一個(gè)父類(lèi),和兩個(gè)繼承了他的子類(lèi)和。這時(shí),子類(lèi)修改該不會(huì)影響到父類(lèi)本身,更不會(huì)傳遞到其他子類(lèi)上。 Javascript有兩種基本數(shù)據(jù)類(lèi)型,Primitive和Object。Object是properties的聚合,其property可以是Object也可以是Primitive。Primitive只有v...
摘要:類(lèi)型判斷類(lèi)型檢測(cè)主要包括了和的三種方式來(lái)判斷變量的類(lèi)型。對(duì)于這里的返回的確卻是,,有些人說(shuō)被認(rèn)為是沒(méi)有一個(gè)對(duì)象。但是各種運(yùn)算符或條件判斷中是需要特定類(lèi)型的,比如判斷時(shí)會(huì)將判斷語(yǔ)句轉(zhuǎn)換為布爾型。顧名思義就是將變量轉(zhuǎn)換為對(duì)象類(lèi)型。 概述 JavaScript的類(lèi)型判斷是前端工程師們每天代碼中必備的部分,每天肯定會(huì)寫(xiě)上個(gè)很多遍if (a === xxx)或if (typeof a === o...
閱讀 1398·2021-09-04 16:40
閱讀 3514·2021-07-28 00:13
閱讀 2949·2019-08-30 11:19
閱讀 2671·2019-08-29 12:29
閱讀 3222·2019-08-29 12:24
閱讀 1171·2019-08-26 13:28
閱讀 2458·2019-08-26 12:01
閱讀 3503·2019-08-26 11:35