国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > JavaScript > 正文

Javascript中將變量轉換為字符串的三種方法

2019-11-19 15:23:21
字體:
來源:轉載
供稿:網友

前言

大家應該都知道,對于JavaScript,有3種不同方法可以將變量轉換為字符串。這篇文章將詳細介紹這些方法,并比較他們的優劣。下面話不多說了,來一起看看詳細的介紹吧。

3種方法

將變量轉換為字符串的3種方法如下:

  • value.toString()
  • "" + value
  • String(value)

當value為null或者undefined時,第1種方法就不行了。而方法2和方法3基本上是一樣的。

""+value: 將value與空字符串相加,即可將其轉換為字符串。這種方法其實是一種稍微晦澀的技巧,可能會讓別人難于理解開發者的意圖。不過,這一點見仁見智,有些人偏愛這種方法。

String(value): 這種方法非常清晰:使用String()函數將value轉換為字符串。不過,String()有兩種不同用法,容易混淆,尤其對于Java開發者來說。當String()和運算符new一起作為構造函數使用時,它返回一個新創建的String對象;當不用new運算符調用String()時,它只把value轉換成原始的字符串。這兩者是非常不同的:

> String("Fundebug") === new String("Fundebug")false> typeof String("Fundebug")'string'> String("Fundebug") instanceof Stringfalse> typeof new String("Fundebug")'object'> new String("Fundebug") instanceof Stringtrue

事實上,將String()作為構造函數使用并不常見,因此僅使用它來轉換字符串就好了。

“”+value與String(value)的細微差別

""+valueString(value)都可以將value轉換為字符串,它們是如何做到的呢?事實上,它們雖然結果相同,但是方法稍有區別。

將primitive基本類型轉換為字符串

兩種方法都使用內部函數ToString()將primitive基本類型轉換為字符串。ToString()函數在ECMAScript 5.1 (§9.8)中定義了,但是并不能直接使用,因此稱作內部函數。下面的表格顯示了ToString()函數如何將primitive基本類型轉換為字符串:

參數 結果
undefined "undefined"
null "null"
Boolean "true"或者 "false"
Number 將數字轉換為字符串,例如: "1.765"
String 無需轉換

將Object轉換為字符串

轉換為字符串之前,兩種方法都會先將Object轉換為primitive。不同的是,""+value使用內部函數ToPrimitive(Number) (除了date類型),而String(value)使用內部函數ToPrimitive(String)

  • ToPrimitive(Number) : 先調用obj.valueOf ,若結果為primitive則返回;否則再調用obj.toString() ,若結果為primitive則返回;否則返回TypeError。
  • ToPrimitive(String) : 與ToPrimitive(Number)類似,只是先調用obj.toString() ,后調用obj.valueOf()

可以通過以下示例了解區別,obj如下:

var obj = { valueOf: function() {  console.log("valueOf");  return {}; }, toString: function() {  console.log("toString");  return {}; }};

調用結果:

> "" + objvalueOftoStringTypeError: Cannot convert object to primitive value> String(obj)toStringvalueOfTypeError: Cannot convert object to primitive value

它們的結果相同

""+valueString(value)雖然不同,但是我們很少能感覺到。因為,大多數object使用默認的valueOf() ,它返回對象本身:

> var x = {}> x.valueOf() === xtrue

由于valueOf()返回值并非primitive,因此ToPrimitive(Number)會跳過valueOf() ,而返回toString()的返回值。這樣,與ToPrimitive(String)的返回值就一樣了。

當object是Boolean、Number或者String實例時,valueOf()將返回primitive。這就意味著兩者的計算過程是這樣的:

  • ToPrimitive(Number) valueOf()返回primitive值,然后使用ToString()轉換為字符串。
  • ToPrimitive(String) : toString()通過ToString()函數將primitive值轉換為字符串。

可知,雖然計算過程不同,但是它們的結果是一樣的。

結論

那么你該選擇哪種方法呢?如果你可以確保value值不是null和undefined,那么不妨使用value.toString() 。否則,你只能使用""+valueString(value) ,它們基本上是一樣的。

總結

以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作能帶來一定的幫助,如果有疑問大家可以留言交流,謝謝大家對武林網的支持。

參考

原文: Converting a value to string in JavaScript

譯者: Fundebug

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 奇台县| 潮安县| 昆山市| 屏东县| 九台市| 鹤山市| 西藏| 灵丘县| 丁青县| 丰宁| 中西区| 木里| 土默特右旗| 银川市| 平昌县| 夏津县| 那曲县| 巴青县| 盖州市| 建始县| 迁西县| 青州市| 新兴县| 防城港市| 斗六市| 赣榆县| 邻水| 施秉县| 临夏县| 嵊州市| 崇明县| 密云县| 金沙县| 东辽县| 共和县| 郧西县| 莆田市| 通许县| 井研县| 锦屏县| 韩城市|