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

JavaScript中valueOf函數(shù)與toString方法深入理解

 更新時間:2012年12月02日 10:26:41   作者:  
基本上,所有JS數(shù)據(jù)類型都擁有valueOf和toString這兩個方法,null除外。它們倆解決javascript值運算與顯示的問題,本文將詳細(xì)介紹,有需要的朋友可以參考下
JavaScript中valueOf函數(shù)方法是返回指定對象的原始值。使用方法:
object.valueOf( )object是必選項參數(shù)是任意固有 JScript 對象。
每個JavaScript固有對象的 valueOf 方法定義不同。
對象 返回值
Array 數(shù)組的元素被轉(zhuǎn)換為字符串,這些字符串由逗號分隔,連接在一起。其操作與 Array.toString 和 Array.join 方法相同。
Boolean Boolean 值。
Date 存儲的時間是從 1970 年 1 月 1 日午夜開始計的毫秒數(shù) UTC。
Function 函數(shù)本身。
Number 數(shù)字值。
Object 對象本身。這是默認(rèn)情況。
String 字符串值。

Math 和 Error 對象沒有 valueOf 方法。

基本上,所有JS數(shù)據(jù)類型都擁有valueOf和toString這兩個方法,null除外。它們倆解決javascript值運算與顯示的問題。
JavaScript 的 valueOf() 方法
valueOf() 方法可返回 Boolean 對象的原始值。
用法booleanObject.valueOf(),返回值為booleanObject 的原始布爾值。如果調(diào)用該方法的對象不是 Boolean,則拋出異常 TypeError。
復(fù)制代碼 代碼如下:

<script type="text/javascript">
var boo = new Boolean(false);
document.write(boo.valueOf());
</script>

以上腳本會輸出false。
JavaScript 的 toString() 方法
toString() 方法可把一個邏輯值轉(zhuǎn)換為字符串,并返回結(jié)果。
用法 booleanObject.toString(),返回值根據(jù)原始布爾值或者 booleanObject 對象的值返回字符串 "true" 或 "false"。如果調(diào)用該方法的對象不是 Boolean,則拋出異常 TypeError。
在 Boolean 對象被用于字符串環(huán)境中時,此方法會被自動調(diào)用。
下面腳本將創(chuàng)建一個 Boolean 對象,并把它轉(zhuǎn)換成字符串:
復(fù)制代碼 代碼如下:

<script type="text/javascript">
var boo = new Boolean(true);
document.write(boo.toString());
</script>

腳本輸出:true。
先看一例
復(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é)果,因為它們偷偷地調(diào)用valueOf或toString方法。但如何區(qū)分什么情況下是調(diào)用了哪個方法呢,我們可以通過另一個方法測試一下。由于用到console.log,請在裝有firebug的FF中實驗!
復(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)換為字符串時調(diào)用toString方法,如果是轉(zhuǎn)換為數(shù)值時則調(diào)用valueOf方法,但其中有兩個很不和諧。一個是alert(''+bbb),字符串合拼應(yīng)該是調(diào)用toString方法……另一個我們暫時可以理解為===操作符不進(jìn)行隱式轉(zhuǎn)換,因此不調(diào)用它們。為了追究真相,我們需要更嚴(yán)謹(jǐn)?shù)膶嶒灐?
復(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。
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)有點不同吧?!它沒有像上面toString那樣統(tǒng)一規(guī)整。對于那個[object Object],我估計是從Object那里繼承過來的,我們再去掉它看看。
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

如果只重寫了toString,對象轉(zhuǎn)換時會無視valueOf的存在來進(jìn)行轉(zhuǎn)換。但是,如果只重寫了valueOf方法,在要轉(zhuǎn)換為字符串的時候會優(yōu)先考慮valueOf方法。在不能調(diào)用toString的情況下,只能讓valueOf上陣了。對于那個奇怪的字符串拼接問題,可能是出于操作符上,翻開ECMA262-5 發(fā)現(xiàn)都有一個getValue操作。嗯,那么謎底應(yīng)該是揭開了。重寫會加大它們調(diào)用的優(yōu)化高,而在有操作符的情況下,valueOf的優(yōu)先級本來就比toString的高。

相關(guān)文章

  • js 中獲取制定的cook信息實現(xiàn)方法

    js 中獲取制定的cook信息實現(xiàn)方法

    下面小編就為大家?guī)硪黄猨s 中獲取制定的cook信息實現(xiàn)方法。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2016-11-11
  • 如何防止回車(enter)鍵提交表單

    如何防止回車(enter)鍵提交表單

    這篇文章主要介紹了如何防止回車(enter)鍵提交表單的方法,需要的朋友可以參考下
    2014-05-05
  • 淺談js圖片前端預(yù)覽之filereader和window.URL.createObjectURL

    淺談js圖片前端預(yù)覽之filereader和window.URL.createObjectURL

    下面小編就為大家?guī)硪黄獪\談js圖片前端預(yù)覽之filereader和window.URL.createObjectURL。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2016-06-06
  • 使用JavaScript和MQTT開發(fā)物聯(lián)網(wǎng)應(yīng)用示例解析

    使用JavaScript和MQTT開發(fā)物聯(lián)網(wǎng)應(yīng)用示例解析

    這篇文章主要介紹了使用JavaScript和MQTT開發(fā)物聯(lián)網(wǎng)應(yīng)用示例解析,文章通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-08-08
  • JS 中LocalStorage和SessionStorage的使用

    JS 中LocalStorage和SessionStorage的使用

    最近因為項目上需要使用到客戶端存儲,所以稍微研究了一下,以下說說自己的理解和使用經(jīng)驗,特此分享到腳本之家平臺,感興趣的朋友參考下吧
    2017-08-08
  • window.print打印指定div實例代碼

    window.print打印指定div實例代碼

    window.print可以打印網(wǎng)頁,但有時候我們只希望打印特定控件或內(nèi)容,怎么辦呢,請看下面的例子
    2013-12-12
  • 前端使用websocket發(fā)送消息的示例代碼

    前端使用websocket發(fā)送消息的示例代碼

    WebSocket是一種在單個TCP連接上進(jìn)行全雙工通信的協(xié)議,它可以讓客戶端和服務(wù)器之間進(jìn)行實時的雙向通信,這篇文章主要介紹了前端使用websocket發(fā)送消息的示例代碼,需要的朋友可以參考下
    2023-07-07
  • js模擬QQ窗口的抖動效果

    js模擬QQ窗口的抖動效果

    模擬qq抖動效果代碼
    2008-05-05
  • 微信小程序的宿主環(huán)境實現(xiàn)代碼

    微信小程序的宿主環(huán)境實現(xiàn)代碼

    這篇文章主要介紹了微信小程序的宿主環(huán)境,包括scroll-view 組件的基本使用,text 組件的基本使用及rich-text 組件的基本使用,本文通過示例代碼給大家介紹的非常詳細(xì),需要的朋友可以參考下
    2022-10-10
  • js+html獲取系統(tǒng)當(dāng)前時間

    js+html獲取系統(tǒng)當(dāng)前時間

    這篇文章主要為大家詳細(xì)介紹了javascript html獲取系統(tǒng)當(dāng)前時間,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-11-11

最新評論

高青县| 凤城市| 河池市| 丹江口市| 新河县| 白玉县| 铜川市| 山丹县| 南华县| 浦江县| 海南省| 林口县| 盐边县| 台北市| 疏附县| 屏东县| 安新县| 信丰县| 射阳县| 淮安市| 郓城县| 许昌市| 利川市| 弋阳县| 娄底市| 正宁县| 兰西县| 海阳市| 嘉荫县| 苍南县| 丰县| 榕江县| 兴海县| 独山县| 庐江县| 邮箱| 洱源县| 电白县| 新巴尔虎左旗| 金沙县| 葵青区|