Vue中String() 和 .toString()的區(qū)別小結(jié)
想了解 String() 全局函數(shù)和 .toString() 方法的區(qū)別,這是 JavaScript 中常見的類型轉(zhuǎn)換知識(shí)點(diǎn),我會(huì)從用法、兼容性、邊界場(chǎng)景三個(gè)維度幫你講清楚,新手也能輕松理解。
核心區(qū)別總覽
表格
| 特性 | String() 全局函數(shù) | .toString() 方法 |
|---|---|---|
| 調(diào)用方式 | 函數(shù)調(diào)用(String(xxx)) | 實(shí)例方法調(diào)用(xxx.toString()) |
| 空值處理 | 可處理 null/undefined(不報(bào)錯(cuò)) | 處理 null/undefined 直接報(bào)錯(cuò) |
| 原始值處理 | 直接轉(zhuǎn)換原始值(如數(shù)字、布爾) | 原始值會(huì)先裝箱為對(duì)象,再調(diào)用方法 |
| 返回結(jié)果 | 所有合法輸入都返回字符串 | 僅非空值能返回字符串,空值拋錯(cuò) |
| 適用場(chǎng)景 | 不確定值是否為 null/undefined 時(shí) | 確定值為非空原始值 / 對(duì)象時(shí) |
總結(jié)
核心差異:
String()能安全處理null/undefined,.toString()會(huì)拋錯(cuò);結(jié)果一致場(chǎng)景:處理非空原始值(數(shù)字、布爾、字符串)時(shí),兩者返回結(jié)果相同;
特殊能力:
.toString()支持?jǐn)?shù)字進(jìn)制轉(zhuǎn)換,String()無此功能;開發(fā)建議:
- 不確定值是否為空 → 用
String(); - 確定值非空 + 需進(jìn)制轉(zhuǎn)換 → 用
.toString(); - 處理對(duì)象 / 數(shù)組 → 兩者結(jié)果一致,任選即可。
- 不確定值是否為空 → 用
具體用法&差異詳解
處理null/undefined(最核心區(qū)別)
這是兩者最關(guān)鍵的差異,也是實(shí)際開發(fā)中最容易踩坑的點(diǎn):
// 1. String() 處理 null/undefined → 不報(bào)錯(cuò),返回對(duì)應(yīng)字符串 console.log(String(null)); // "null" console.log(String(undefined)); // "undefined" // 2. .toString() 處理 null/undefined → 直接拋 TypeError console.log(null.toString()); // Uncaught TypeError: Cannot read properties of null (reading 'toString') console.log(undefined.toString());// Uncaught TypeError: Cannot read properties of undefined (reading 'toString')
處理原始值(數(shù)字、布爾、字符串)
兩者結(jié)果一致,但底層邏輯不同:
// 數(shù)字
console.log(String(123)); // "123"
console.log((123).toString()); // "123"
// 布爾
console.log(String(true)); // "true"
console.log(true.toString()); // "true"
// 空字符串
console.log(String('')); // ""
console.log(''.toString()); // ""
// 特殊數(shù)字(NaN/Infinity)
console.log(String(NaN)); // "NaN"
console.log(NaN.toString()); // "NaN"
底層差異:String(123) 直接轉(zhuǎn)換原始數(shù)字;(123).toString() 會(huì)先把 123 裝箱為 Number 對(duì)象(new Number(123)),再調(diào)用對(duì)象的 toString() 方法。
處理對(duì)象(數(shù)組、普通對(duì)象)
String()會(huì)調(diào)用對(duì)象的toString()方法(等同于obj.toString());- 普通對(duì)象的
toString()默認(rèn)返回"[object Object]",數(shù)組的toString()會(huì)拼接元素:
// 數(shù)組
const arr = [1, 2, 3];
console.log(String(arr)); // "1,2,3"
console.log(arr.toString()); // "1,2,3"
// 普通對(duì)象
const obj = { a: 1 };
console.log(String(obj)); // "[object Object]"
console.log(obj.toString()); // "[object Object]"
// 自定義對(duì)象(重寫 toString)
const customObj = {
toString() {
return "自定義字符串";
}
};
console.log(String(customObj)); // "自定義字符串"
console.log(customObj.toString());// "自定義字符串"
處理空字符串 / 空值的邊界場(chǎng)景
// 空字符串
console.log(String('')); // ""
console.log(''.toString()); // ""
// 0/空數(shù)組
console.log(String(0)); // "0"
console.log((0).toString()); // "0"
console.log(String([])); // ""
console.log([].toString()); // ""
實(shí)際開發(fā)中的選擇建議
優(yōu)先用String()
當(dāng)你不確定要轉(zhuǎn)換的值是否為 null/undefined 時(shí)(比如接口返回值、用戶輸入、變量可能未初始化),String() 更安全,不會(huì)報(bào)錯(cuò)。
// 示例:處理接口返回的可能為空的值
const res = { data: null };
const str = String(res.data); // "null"(不報(bào)錯(cuò))
用.toString()的場(chǎng)景
當(dāng)你明確知道值是非空的原始值 / 對(duì)象時(shí)(比如數(shù)字、數(shù)組),可以用 .toString(),語義更清晰。
// 示例:數(shù)字轉(zhuǎn)指定進(jìn)制字符串(toString 支持參數(shù),String 不支持) console.log((10).toString(2)); // "1010"(轉(zhuǎn)二進(jìn)制) console.log((10).toString(16)); // "a"(轉(zhuǎn)十六進(jìn)制)
補(bǔ)充:Number.prototype.toString(radix) 支持傳入進(jìn)制參數(shù)(2-36),這是 String() 沒有的功能。
到此這篇關(guān)于Vue中String() 和 .toString()的區(qū)別小結(jié)的文章就介紹到這了,更多相關(guān)Vue String() .toString()區(qū)別內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
vue點(diǎn)擊右鍵出現(xiàn)自定義操作菜單實(shí)現(xiàn)代碼
這篇文章主要給大家介紹了關(guān)于vue點(diǎn)擊右鍵出現(xiàn)自定義操作菜單實(shí)現(xiàn)的相關(guān)資料,在網(wǎng)頁中我們也希望可以像桌面軟件一樣,點(diǎn)擊右鍵后出現(xiàn)操作菜單,對(duì)選中的數(shù)據(jù)項(xiàng)進(jìn)行相應(yīng)的操作,需要的朋友可以參考下2023-08-08
Vue3?localStorage讀取數(shù)組并賦值的問題及解決
這篇文章主要介紹了Vue3?localStorage讀取數(shù)組并賦值的問題及解決,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2025-06-06
詳談vue+webpack解決css引用圖片打包后找不到資源文件的問題
下面小編就為大家分享一篇詳談vue+webpack解決css引用圖片打包后找不到資源文件的問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2018-03-03
vue3中reactive的對(duì)象清空所引發(fā)的問題解決方案(清空不了和清空之后再去賦值就賦值不了)
在使用reactive定義的變量時(shí),直接賦值會(huì)失去響應(yīng)式,為了清空?filters并確保響應(yīng)式,可以使用Object.assign({},?filters)或者遍歷對(duì)象逐個(gè)清除屬性,本文介紹vue3中reactive的對(duì)象清空所引發(fā)的問題解決方案(清空不了和清空之后再去賦值就賦值不了),感興趣的朋友一起看看吧2025-02-02
vue學(xué)習(xí)教程之帶你一步步詳細(xì)解析vue-cli
這篇文章的主題是vue-cli的理解?;蛟S,很多人在開發(fā)vue的時(shí)候,我們會(huì)發(fā)現(xiàn)一個(gè)問題——只會(huì)去用,而不明白它的里面的東西?,F(xiàn)在的框架可以說是足夠的優(yōu)秀,讓開發(fā)者不用為搭建開發(fā)環(huán)境而煩惱。但是有時(shí)候,我們還是得回到原始生活體驗(yàn)一下,才能夠讓自己更上層樓。2017-12-12

