基本介紹
javascript中的toString方法是我們在寫前端時經常要用的一個函數,也就是將我們的變量轉換成字符串的方法。
javascript中各種類型的toString方法
javascript中定義了7種數據類型,其中包含了6種原始的數據類型:Boolean
Null
Undefined
Number
String
Symbol(ECMAScript 6 新定義)
和 Object
,在這7中數據類型中,除了undefined和null類型之外,都有toString方法。
Boolean 類型的toString()
對於Boolean對象或值,內置的 toString 方法返回字符串 "true" 或 "false",具體返回哪個取決於布爾對象的值。
Number類型的toString()
Number對象的toString方法返回指定 Number 對象的字符串表示形式。其toString方法可以傳遞一個參數radix,這個參數的值得取值范圍為(2到36)表示進行toString時候所選用的進制,默認情況下選用10進制,如果radix的值不在2到36之間的話,則會拋出一個異常。
如果Number對象的toString方法的進制大於10的話,則會用字母代替,這就是為什么最大值為36了,其實就是0到9這十個數字再加上26個英文字母。如果對象為負數則保留負號。
var count = 10;
console.log(count.toString()); // 輸出 '10'
console.log((17).toString()); // 輸出 '17'
console.log((17.2).toString()); // 輸出 '17.2'
var x = 6;
console.log(x.toString(2)); // 輸出 '110'
console.log((254).toString(16)); // 輸出 'fe'
console.log((35).toString(36)); // 輸出 'z'
console.log((-10).toString(2)); // 輸出 '-1010'
console.log((-0xff).toString(2)); // 輸出 '-11111111'
console.log((-12.111).toString(16)) // 輸出 '-c.1c6a7ef9db23'
針對於數字的toString,其實還有一些坑需要爬:
-
如歸對數字直接使用toString方法的話,瀏覽器會報錯這個時候就需要我們用括號將數字個擴起來,再進行toString,這是因為javascript引擎在解釋代碼時對於“1.toString()”認為“.”是浮點符號,但因小數點后面的字符是非法的,所以報語法錯誤;而后面的“1..toString()和1.2.toStirng()”寫法,javascript引擎認為第一個“.”小數點,的二個為屬性訪問語法,所以都能正確解釋執行;對於“(1).toStirng()”的寫法,用“()”排除了“.”被視為小數點的語法解釋,所以這種寫法能夠被解釋執行;
-
純小數的小數點后面有連續6或6個以上的“0”時,小數將用e表示法進行輸出;
var num = 0.000006;//小數點后面有5個“0” console.log(num.toString());//"0.000006" var num = 0.0000006;//小數點后面有6個“0” console.log(num.toString());//"6e-7"
-
浮點數整數部分的位數大於21時,輸出時采用e表示法
ar num = 1234567890123456789012; console.log(num.toString());//"1.2345678901234568e+21"
String 類型的toString()
String 類型的toString() 方法返回指定對象的字符串形式。
var str = 'nihao'
console.log(str.toString()) // 輸出nihao
object 類型的toString()
對於object類型,也就是對象類型。每個對象都有一個toString()方法,當該對象被表示為一個文本值時,或者一個對象以預期的字符串方式引用時自動調用。默認情況下,toString()方法被每個Object對象繼承。如果此方法在自定義對象中未被覆蓋,toString() 返回 "[object type]",其中type是對象的類型。
可以自定義一個方法來取代默認的 toString() 方法。該 toString() 方法不能傳入參數並且必須返回一個字符串。自定義的 toString() 方法可以是任何需要的值,但如果它附帶有關對象的信息,它將變的非常有用。
例如
function Dog(name,breed,color,sex) {
this.name=name;
this.breed=breed;
this.color=color;
this.sex=sex;
}
var theDog = new Dog("Gabby","Lab","chocolate","female");
如果使用theDog.toString()的話,則會返回出來一個'[object Object]',接下來定義一toString方法來覆蓋object自帶的toString方法:
Dog.prototype.toString = function dogToString() {
var ret = "Dog " + this.name + " is a " + this.sex + " " + this.color + " " + this.breed;
return ret;
}
然后使用toString則返回 "Dog Gabby is a female chocolate Lab"
。
對於object的toString方法來說們不僅僅是將一個對象轉換成'[object Object]'這個用途,其實很多時候會使用object.toString.call()來檢測變量的類型。
var toString = Object.prototype.toString;
toString.call(new Date); // [object Date]
toString.call(new String); // [object String]
toString.call(Math); // [object Math]
//Since JavaScript 1.8.5
toString.call(undefined); // [object Undefined]
toString.call(null); // [object Null]
所以很多時候我們能夠通過toString這個方法來做一些類型檢測的工作。
數組類型的toString
對於數組的toString方法,其實有一個不同的地方,就是在我們調用數組的toString方法的時候。其實是調用數組中的每個元素的toString方法,最后將結果串聯起來。
[new Date(), 123, '23'].toString() // Wed May 20 2020 08:50:49 GMT+0800 (中國標准時間),123,23
[{}, 123].toString() // [object Object],123
[1,2, [3, 4]].toString() // 1,2,3,4
從上面的例子中,我們會發現一個如果是多維數組,通過toString轉換出來的結果其實和一維數組調用toString轉換出來的結果是一樣的。這個時候我們就能考慮到數組的toString的另外一個用法就是可以將多維數組一維化(或者說是數組的扁平化),其實這個將數組進行一維化的方是有一個弊端的,就是不區分數字類型的值字符串的值舉個例子:
[1, [2,3,4]].toString() // 1,2,3,4
['1', [2, '3', 4]].toString() // 1,2,3,4