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