JavaScript類型轉(zhuǎn)換String()和.toString()的區(qū)別
String() 和 .toString() 都是把值轉(zhuǎn)成字符串的常見方式,但它們在 調(diào)用方式、可用性、返回結(jié)果 上有明顯區(qū)別。下面我用通俗的方式幫你徹底講清楚??
一句話總結(jié)
| 對比項(xiàng) | String() | .toString() |
|---|---|---|
| 類型 | 函數(shù)(全局函數(shù)) | 方法(對象實(shí)例的方法) |
| 能否處理 null / undefined | ? 可以 | ? 報錯 |
| 調(diào)用方式 | String(value) | value.toString() |
| 返回結(jié)果 | 返回值的字符串形式 | 返回對象自帶的字符串表示 |
| 典型用途 | 更安全地轉(zhuǎn)字符串 | 已知是對象或數(shù)字時調(diào)用更簡潔 |
一、String()是全局函數(shù)
它可以安全地轉(zhuǎn)換任何類型為字符串,包括 null 和 undefined。
String(123) // '123'
String(true) // 'true'
String(null) // 'null'
String(undefined) // 'undefined'
String({ a: 1 }) // '[object Object]'
?? 內(nèi)部邏輯(簡化版):
- 如果是
null或undefined→ 直接返回'null'/'undefined' - 否則 → 調(diào)用對象的
.toString()方法
二、.toString()是對象的方法
它是定義在大多數(shù)對象原型上的方法,比如:
Number.prototype.toString()Boolean.prototype.toString()Array.prototype.toString()Object.prototype.toString()
但 不能對 null 或 undefined 調(diào)用,否則直接報錯 ??
(123).toString() // '123'
true.toString() // 'true'
[1, 2, 3].toString() // '1,2,3'
({a:1}).toString() // '[object Object]'
null.toString() // ? TypeError: Cannot read properties of null
undefined.toString() // ? TypeError: Cannot read properties of undefined
三、什么時候用哪個?
| 使用場景 | 推薦方法 |
|---|---|
| 不確定值是不是 null/undefined | ? 用 String(value)(更安全) |
| 明確是數(shù)字、布爾值、數(shù)組等 | ? 用 .toString()(更語義化) |
| 想格式化對象內(nèi)容 | JSON.stringify(value) 更合適 |
舉個綜合例子:
const values = [123, true, null, undefined, [1,2], {x:1}];
values.forEach(v => {
console.log('String():', String(v));
console.log('toString():', v?.toString?.() ?? '? 無 toString 方法');
console.log('---');
});
輸出:
String(): 123 toString(): 123 --- String(): true toString(): true --- String(): null toString(): ? 無 toString 方法 --- String(): undefined toString(): ? 無 toString 方法 --- String(): 1,2 toString(): 1,2 --- String(): [object Object] toString(): [object Object]
總結(jié)
| 項(xiàng)目 | String() | .toString() |
|---|---|---|
| 調(diào)用方式 | 函數(shù)調(diào)用 | 方法調(diào)用 |
| 是否安全 | 安全(支持 null/undefined) | 不安全 |
| 適合場景 | 通用轉(zhuǎn)換 | 明確類型時使用 |
| 結(jié)果差異 | 基于類型的默認(rèn)規(guī)則 | 調(diào)用該對象原型鏈上的方法 |
到此這篇關(guān)于JavaScript類型轉(zhuǎn)換String()和.toString()區(qū)別的文章就介紹到這了,更多相關(guān)JS String() 和.toString()區(qū)別內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
BootStrap實(shí)現(xiàn)樹形目錄組件代碼詳解
這篇文章主要介紹了BootStrap實(shí)現(xiàn)樹形目錄組件代碼詳解的相關(guān)資料,非常不錯,具有參考借鑒價值,需要的朋友可以參考下2016-06-06
BOOTSTRAP時間控件顯示在模態(tài)框下面的bug修復(fù)
這篇文章主要介紹了BOOTSTRAP時間控件顯示在模態(tài)框下面的bug修復(fù),需要的朋友可以參考下2015-02-02
JavaScript進(jìn)行數(shù)據(jù)去重的多種實(shí)現(xiàn)方式
在數(shù)據(jù)處理的過程中,數(shù)據(jù)去重是一個常見且重要的任務(wù),在 JavaScript 中,有多種方法可以實(shí)現(xiàn)數(shù)據(jù)去重,每種方法都有其適用場景和優(yōu)缺點(diǎn),下面我們就來詳細(xì)講講吧2025-05-05
JavaScript學(xué)習(xí)筆記之ES6數(shù)組方法
ES6給數(shù)組添加了一些新特性,而這些新特性到目前為止完全可以運(yùn)用到自己的業(yè)務(wù)層。在這一節(jié)中將總結(jié)有關(guān)于ES6給數(shù)組提供一些新特性的使用方法2016-03-03
Javascript農(nóng)歷與公歷相互轉(zhuǎn)換的簡單實(shí)例
下面小編就為大家?guī)硪黄狫avascript農(nóng)歷與公歷相互轉(zhuǎn)換的簡單實(shí)例。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2016-10-10
JavaScript 點(diǎn)擊觸發(fā)復(fù)制功能實(shí)例詳解
這篇文章主要介紹了JavaScript 點(diǎn)擊觸發(fā)復(fù)制功能實(shí)例詳解,需要的朋友可以參考下2018-11-11
js窗口關(guān)閉提示信息(兼容IE和firefox)
這篇文章主要介紹了當(dāng)關(guān)閉窗口的時候,顯示窗口提示信息,友好的進(jìn)行提示,防止丟失重要信息,需要的朋友可以參考一下2015-10-10
js實(shí)現(xiàn)手機(jī)web圖片左右滑動效果
這篇文章主要為大家詳細(xì)介紹了js實(shí)現(xiàn)手機(jī)web圖片左右滑動效果,具有一定的參考價值,感興趣的小伙伴們可以參考一下2017-12-12
JavaScript實(shí)現(xiàn)單例模式的六種方式
單例模式確保一個類只有一個實(shí)例,并提供全局訪問點(diǎn),文章介紹了JavaScript中實(shí)現(xiàn)單例模式的幾種常見方式,包括對象字面量、閉包實(shí)現(xiàn)、ES6類實(shí)現(xiàn)、改進(jìn)的class實(shí)現(xiàn)、ES6模塊模式的單例以及ES6模塊本身就是單例,每種方式都有其特點(diǎn)和適用場景,需要的朋友可以參考下2025-12-12

