最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

JavaScript中將一個值轉(zhuǎn)換為字符串的方法分析[譯]

 更新時間:2012年09月21日 00:20:13   作者:  
在JavaScript中,主要有三種方法能讓任意值轉(zhuǎn)換為字符串.本文講解了每種方法以及各自的優(yōu)缺點

譯者注:前兩天在看ES5的時候順便出了一道題,今天看到這篇文章,剛好解釋的很清楚,就翻譯了一下.
在JavaScript中,主要有三種方法能讓任意值轉(zhuǎn)換為字符串.本文講解了每種方法以及各自的優(yōu)缺點.

1.轉(zhuǎn)換字符串的三種方法
這三種將value轉(zhuǎn)換為字符串的方法是:

1.value.toString()
2."" + value
3.String(value)

第一種方法存在的問題是,它不能把null和undefined轉(zhuǎn)換為字符串.還有第二種和第三種方法,這兩種方法的效果基本一樣.

•""+value: 使用加法運算符配合一個空字符串可以把任意值轉(zhuǎn)換為字符串,我覺得這種方法代碼的可讀性很差,但相對String(value)來,還是有一些人更喜歡用這種轉(zhuǎn)換方式.
•String(value): 這種方法可讀性更好,唯一的問題是,這種函數(shù)調(diào)用可能會迷惑一些人,尤其是那些熟悉Java的的程序員,因為String同時也是一個構(gòu)造函數(shù).要注意的是它作為普通函數(shù)和作為構(gòu)造函數(shù)時的表現(xiàn)完全不同:

復制代碼 代碼如下:

> String("abc") === new String("abc")
false

> typeof String("abc")
'string'
> String("abc") instanceof String
false

> typeof new String("abc")
'object'
> new String("abc") instanceof String
true


String作為普通函數(shù)時會產(chǎn)生一個字符串(一個原始值).作為構(gòu)造函數(shù)時會產(chǎn)生一個String對象的實例.后者在JavaScript中很少用到,所以基本上你可以忽略掉String作為構(gòu)造函數(shù)的用法,但一定要記得它是個轉(zhuǎn)換函數(shù).

2.""+value 和 String(value)的細微差別
到現(xiàn)在你已經(jīng)知道了+ 和 String()都可以將它們的“參數(shù)”轉(zhuǎn)換為字符串.但他們的轉(zhuǎn)換方式還是著有細微的差別,不過幾乎所有的情況下,轉(zhuǎn)換結(jié)果都是一樣的.

2.1 將原始值轉(zhuǎn)換為字符串
這兩種方法都是使用引擎內(nèi)部的ToString()操作將原始值轉(zhuǎn)換為字符串的.“內(nèi)部操作”的意思是:這個操作函數(shù)是在ECMAScript 5.1 (§9.8)中定義的,但ES語言本身并不能訪問到它.下面這個表格解釋了ToString()是如何轉(zhuǎn)換原始值的.



參數(shù) 結(jié)果
undefined "undefined"
null "null"
布爾值 "true"或者"false"
數(shù)字 數(shù)字作為字符串,比如"1.765"
字符串 無需轉(zhuǎn)換

2.2 將對象值轉(zhuǎn)換為字符串

這兩種方法都先將對象值轉(zhuǎn)換為原始值,然后再將原始值轉(zhuǎn)換為字符串.但是在這個轉(zhuǎn)換中, + 使用的是內(nèi)部的ToPrimitive(Number)操作(除非被轉(zhuǎn)換的是date對象),而String()用的是ToPrimitive(String).

•ToPrimitive(Number): 將一個對象值轉(zhuǎn)換為原始值,首先調(diào)用obj.valueOf().如果返回值是一個原始值,則返回這個原始值.如果不是,則再調(diào)用obj.toString().如果返回值是個原始值,返回這個原始值.否則,拋出TypeError異常.
•ToPrimitive(String): 和上面的方法類似,只是優(yōu)先調(diào)用obj.toString()方法而不是obj.valueOf().
通過轉(zhuǎn)換下面的這個對象,你可以看到它們之間的差別:
復制代碼 代碼如下:

var obj = {
valueOf: function () {
console.log("valueOf");
return {}; // 不是原始值,繼續(xù)執(zhí)行
},
toString: function () {
console.log("toString");
return {}; // 不是原始值,繼續(xù)執(zhí)行
}
};

//運行:
> "" + obj
valueOf
toString
TypeError: Cannot convert object to primitive value

> String(obj)
toString
valueOf
TypeError: Cannot convert object to primitive value

2.3 結(jié)果通常都相同
上面講的區(qū)別,在實際情況中幾乎不太可能遇到.因為:大部分對象都使用了默認的繼承而來的valueOf()方法,返回值總是這個對象本身.

復制代碼 代碼如下:

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


因此, ToPrimitive(Number)通常會跳過valueOf方法返回toString()方法的返回值,這就表現(xiàn)的和ToPrimitive(String)完全一樣.但是,如果這個對象是Boolean,Number或者String的對象實例,那么它的valueOf()會返回一個原始值(被這個對象包裝前的原始值).那么這兩種操作就會按照如下步驟執(zhí)行:

•ToPrimitive(Number)返回了對象的valueOf()方法的返回值(被包裝前的原始值)再經(jīng)過ToString()操作后的結(jié)果.
•ToPrimitive(String)返回了對象的toString()方法的返回值(在該對象被包裝前的原始值上進行ToString()操作的返回值).
就這樣,他們還是返回了相同的結(jié)果,只是轉(zhuǎn)換的途徑不同.

3.結(jié)論

你應(yīng)該選擇哪種方式來將其他類型的值轉(zhuǎn)換為字符串呢?如果你能確保這個值永遠不會是null或者undefined,則可以用value.toString()來轉(zhuǎn)換.否則,""+value和String(value)選哪個都可以,看個人喜好,我認為String(value) 更明確一點.

4.相關(guān)文章

  1. JavaScript values: not everything is an object [原始值和對象值的區(qū)別]
  2. What is {} + {} in JavaScript? [解釋了+運算符的工作原理]
  3. String concatenation in JavaScript [怎樣才能更好的連接多個字符串]

相關(guān)文章

  • js獲取上傳文件的絕對路徑實現(xiàn)方法

    js獲取上傳文件的絕對路徑實現(xiàn)方法

    下面小編就為大家?guī)硪黄猨s獲取上傳文件的絕對路徑實現(xiàn)方法。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2016-08-08
  • js實現(xiàn)簡單的選項卡效果

    js實現(xiàn)簡單的選項卡效果

    本文主要介紹了js實現(xiàn)簡單的選項卡效果的示例代碼,具有很好的參考價值,下面跟著小編一起來看下吧
    2017-02-02
  • javascript事件冒泡和事件捕獲詳解

    javascript事件冒泡和事件捕獲詳解

    最近在學習javascript中遇到了一些困難,比如冒泡和捕獲,很多次被提到,但又不知究竟應(yīng)用在何處。找到了一些好文章解惑,在這里分享給大家。
    2015-05-05
  • JS 操作Array數(shù)組的方法及屬性實例解析

    JS 操作Array數(shù)組的方法及屬性實例解析

    本篇文章主要是對JS操作Array數(shù)組的方法及屬性進行了詳細的介紹,需要的朋友可以過來參考下,希望對大家有所幫助
    2014-01-01
  • javascript檢測頁面是否縮放的小例子

    javascript檢測頁面是否縮放的小例子

    簡單寫了下,只測試了chrome,道理很簡單,其他瀏覽器自行擴充。
    2013-05-05
  • Kendo Grid editing 自定義驗證報錯提示的解決方法

    Kendo Grid editing 自定義驗證報錯提示的解決方法

    Kendo UI是一個強大的框架用于快速HTML5 UI開發(fā)?;谧钚碌腍TML5、CSS3和JavaScript標準。今天小編通過分享本文給大家介紹Kendo Grid editing 自定義驗證報錯提示的解決方法
    2016-11-11
  • JavaScript中的數(shù)值范圍介紹

    JavaScript中的數(shù)值范圍介紹

    這篇文章主要介紹了JavaScript中的數(shù)值范圍介紹,本文是對JavaScript中Number類型的追根究底,讀完本文將會對Number類型有一個徹底了解,需要的朋友可以參考下
    2014-12-12
  • PyQt中QLabel標簽組件使用指南

    PyQt中QLabel標簽組件使用指南

    QLabel是PyQt中用于顯示文本和圖像的組件,本文詳細介紹了其基本用法和高級特性,首先,介紹如何創(chuàng)建QLabel,以及如何用它來顯示圖像,接著,探討了如何使用HTML標簽格式化文本,設(shè)置文本對齊方式,以及如何實現(xiàn)自動換行
    2024-10-10
  • 微信小程序用戶自定義模版用法實例分析

    微信小程序用戶自定義模版用法實例分析

    這篇文章主要介紹了微信小程序用戶自定義模版用法,結(jié)合實例形式較為詳細的分析了微信小程序自定義模板的定義、數(shù)據(jù)調(diào)用、布局設(shè)置等簡單使用技巧,需要的朋友可以參考下
    2017-11-11
  • JavaScript中this的學習筆記及用法整理

    JavaScript中this的學習筆記及用法整理

    在本篇文章里小編給大家整理的是關(guān)于JavaScript中this的使用以及代碼實例,需要的朋友們學習下。
    2020-02-02

最新評論

廊坊市| 扶沟县| 台江县| 永顺县| 休宁县| 桃园市| 成安县| 武隆县| 武鸣县| 平顶山市| 兴化市| 龙陵县| 桦南县| 临洮县| 楚雄市| 宁波市| 固始县| 轮台县| 内乡县| 清流县| 株洲市| 渭源县| 巴东县| 扶绥县| 城步| 伊金霍洛旗| 玉环县| 耒阳市| 乐平市| 探索| 壶关县| 昆明市| 景德镇市| 平原县| 邛崃市| 东阿县| 关岭| 永福县| 揭西县| 翼城县| 宁乡县|