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

Javascript中valueOf與toString區(qū)別淺析

 更新時(shí)間:2013年03月19日 10:46:11   作者:  
Javascript中valueOf與toString區(qū)別淺析,需要的朋友可以參考一下

前言

基本上,所有JS數(shù)據(jù)類型都擁有這兩個(gè)方法,null除外。它們倆解決javascript值運(yùn)算與顯示的問題,重寫會(huì)加大它們調(diào)用的優(yōu)化。

測(cè)試分析

先看一例:

復(fù)制代碼 代碼如下:

var aaa = {
 i: 10,
 valueOf: function() { return this.i+30; },
 toString: function() { return this.valueOf()+10; }
}

alert(aaa > 20); // true
alert(+aaa); // 40
alert(aaa); // 50


之所以有這樣的結(jié)果,因?yàn)樗鼈兺低档卣{(diào)用valueOf或toString方法。
但如何區(qū)分什么情況下是調(diào)用了哪個(gè)方法呢,我們可以通過另一個(gè)方法測(cè)試一下。
由于用到console.log,請(qǐng)?jiān)谘b有firebug的FF中實(shí)驗(yàn)!
復(fù)制代碼 代碼如下:

var bbb = {
 i: 10,
 toString: function() {
  console.log('toString');
  return this.i;
 },
 valueOf: function() {
  console.log('valueOf');
  return this.i;
 }
}

alert(bbb);// 10 toString
alert(+bbb); // 10 valueOf
alert(''+bbb); // 10 valueOf
alert(String(bbb)); // 10 toString
alert(Number(bbb)); // 10 valueOf
alert(bbb == '10'); // true valueOf
alert(bbb === '10'); // false


結(jié)果給人的感覺是,如果轉(zhuǎn)換為字符串時(shí)調(diào)用toString方法,如果是轉(zhuǎn)換為數(shù)值時(shí)則調(diào)用valueOf方法,但其中有兩個(gè)很不和諧。一個(gè)是alert(''+bbb),字符串合拼應(yīng)該是調(diào)用toString方法……另一個(gè)我們暫時(shí)可以理解為===操作符不進(jìn)行隱式轉(zhuǎn)換,因此不調(diào)用它們。為了追究真相,我們需要更嚴(yán)謹(jǐn)?shù)膶?shí)驗(yàn)。
復(fù)制代碼 代碼如下:

var aa = {
 i: 10,
 toString: function() {
  console.log('toString');
  return this.i;
 }
}
alert(aa);// 10 toString
alert(+aa); // 10 toString
alert(''+aa); // 10 toString
alert(String(aa)); // 10 toString
alert(Number(aa)); // 10 toString
alert(aa == '10'); // true toString

再看valueOf。
復(fù)制代碼 代碼如下:

var bb = {
 i: 10,
 valueOf: function() {
  console.log('valueOf');
  return this.i;
 }
}

alert(bb);// [object Object]
alert(+bb); // 10 valueOf
alert(''+bb); // 10 valueOf
alert(String(bb)); // [object Object]
alert(Number(bb)); // 10 valueOf
alert(bb == '10'); // true valueOf


發(fā)現(xiàn)有點(diǎn)不同吧?!它沒有像上面toString那樣統(tǒng)一規(guī)整。
對(duì)于那個(gè)[object Object],我估計(jì)是從Object那里繼承過來的,我們?cè)偃サ羲纯础?BR>
復(fù)制代碼 代碼如下:

Object.prototype.toString = null;
var cc = {
 i: 10,
 valueOf: function() {
  console.log('valueOf');
  return this.i;
 }
}


alert(cc);// 10 valueOf
alert(+cc); // 10 valueOf
alert(''+cc); // 10 valueOf
alert(String(cc)); // 10 valueOf
alert(Number(cc)); // 10 valueOf
alert(cc == '10'); // true valueOf


總結(jié):valueOf偏向于運(yùn)算,toString偏向于顯示。
1、 在進(jìn)行對(duì)象轉(zhuǎn)換時(shí)(例如:alert(a)),將優(yōu)先調(diào)用toString方法,如若沒有重寫toString將調(diào)用valueOf方法,如果兩方法都不沒有重寫,但按Object的toString輸出。
2、 在進(jìn)行強(qiáng)轉(zhuǎn)字符串類型時(shí)將優(yōu)先調(diào)用toString方法,強(qiáng)轉(zhuǎn)為數(shù)字時(shí)優(yōu)先調(diào)用valueOf。
3、 在有運(yùn)算操作符的情況下,valueOf的優(yōu)先級(jí)高于toString。

相關(guān)文章

  • JavaScript this關(guān)鍵字的深入詳解

    JavaScript this關(guān)鍵字的深入詳解

    這篇文章主要給大家介紹了關(guān)于JavaScript this關(guān)鍵字的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-01-01
  • 移動(dòng)端如何用下拉刷新的方式實(shí)現(xiàn)上拉加載

    移動(dòng)端如何用下拉刷新的方式實(shí)現(xiàn)上拉加載

    這篇文章主要介紹了移動(dòng)端如何用下拉刷新的方式實(shí)現(xiàn)上拉加載,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2018-12-12
  • 設(shè)置cookie指定時(shí)間失效(實(shí)例代碼)

    設(shè)置cookie指定時(shí)間失效(實(shí)例代碼)

    下面小編就為大家?guī)硪黄O(shè)置cookie指定時(shí)間失效(實(shí)例代碼)。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-05-05
  • 一文詳解最常見的六種跨域解決方案

    一文詳解最常見的六種跨域解決方案

    跨域問題的本質(zhì)是瀏覽器為了保證用戶的一種安全攔截機(jī)制,想要解決跨域問題,只需要告訴瀏覽器"我是自己人,不要攔我"就行,下面這篇文章主要給大家介紹了關(guān)于最常見的六種跨域解決方案的相關(guān)資料,需要的朋友可以參考下
    2023-04-04
  • JavaScript Canvas編寫炫彩的網(wǎng)頁(yè)時(shí)鐘

    JavaScript Canvas編寫炫彩的網(wǎng)頁(yè)時(shí)鐘

    這篇文章主要為大家詳細(xì)介紹了JavaScript Canvas編寫炫彩的網(wǎng)頁(yè)時(shí)鐘,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-10-10
  • 如何解決前端筆記本屏幕顯示縮放比例125%,150%對(duì)頁(yè)面布局的影響

    如何解決前端筆記本屏幕顯示縮放比例125%,150%對(duì)頁(yè)面布局的影響

    如果要完整解決該縮放和布局問題,仍需適配,下面這篇文章主要給大家介紹了關(guān)于如何解決前端筆記本屏幕顯示縮放比例125%,150%對(duì)頁(yè)面布局的影響,需要的朋友可以參考下
    2022-11-11
  • js實(shí)現(xiàn)C#的StringBuilder效果完整實(shí)例

    js實(shí)現(xiàn)C#的StringBuilder效果完整實(shí)例

    這篇文章主要介紹了js實(shí)現(xiàn)C#的StringBuilder效果,以完整實(shí)例形式分析總結(jié)了js實(shí)現(xiàn)C#的StringBuilder效果的相關(guān)技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下
    2015-12-12
  • JavaScript性能優(yōu)化之函數(shù)節(jié)流(throttle)與函數(shù)去抖(debounce)

    JavaScript性能優(yōu)化之函數(shù)節(jié)流(throttle)與函數(shù)去抖(debounce)

    這篇文章主要介紹了JavaScript性能優(yōu)化之函數(shù)節(jié)流(throttle)與函數(shù)去抖(debounce)的相關(guān)資料,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下
    2016-08-08
  • JS數(shù)組屬性去重并校驗(yàn)重復(fù)數(shù)據(jù)

    JS數(shù)組屬性去重并校驗(yàn)重復(fù)數(shù)據(jù)

    這篇文章主要介紹了JS數(shù)組屬性去重并校驗(yàn)重復(fù)數(shù)據(jù),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-01-01
  • 18個(gè)高頻使用的JS工具方法總結(jié)

    18個(gè)高頻使用的JS工具方法總結(jié)

    這篇文章主要為大家分享一下18個(gè)在項(xiàng)目中使用很高頻的JS工具方法,希望大家能夠知其然也知其所以然,不要只會(huì)調(diào)用?api,也要會(huì)寫?api,快跟隨小編一起學(xué)習(xí)一下吧
    2022-04-04

最新評(píng)論

苏尼特右旗| 仪陇县| 天等县| 民乐县| 罗源县| 佛冈县| 临桂县| 昌乐县| 天门市| 武清区| 澄迈县| 山阴县| 新和县| 景谷| 晋州市| 皮山县| 阜新市| 东兴市| 泾源县| 德惠市| 汨罗市| 合水县| 浦县| 睢宁县| 大渡口区| 襄城县| 四会市| 黎平县| 石棉县| 淳化县| 英吉沙县| 左贡县| 利津县| 黄龙县| 阿勒泰市| 石棉县| 招远市| 崇仁县| 罗城| 益阳市| 浮山县|