欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

全面解析JavaScript中的valueOf與toString方法(推薦)

 更新時(shí)間:2016年06月14日 15:39:52   投稿:mrr  
本文給大家介紹JavaScript中的valueOf與toString方法,valueOf() 方法可返回 Boolean 對(duì)象的原始值,toString() 方法可把一個(gè)邏輯值轉(zhuǎn)換為字符串,并返回結(jié)果。對(duì)js中valueof和tostring相關(guān)知識(shí)感興趣的朋友一起學(xué)習(xí)吧

可以這樣說,所有JS數(shù)據(jù)類型都擁有valueOf和toString這兩個(gè)方法,null除外。它們倆解決javascript值運(yùn)算與顯示的問題。在程序應(yīng)用非常廣泛。下面我們逐一來給大家介紹下。

JavaScript 的 valueOf() 方法

valueOf() 方法可返回 Boolean 對(duì)象的原始值。

用法booleanObject.valueOf(),返回值為booleanObject 的原始布爾值。如果調(diào)用該方法的對(duì)象不是 Boolean,則拋出異常 TypeError。

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

以上腳本會(huì)輸出false。

JavaScript 的 toString() 方法

toString() 方法可把一個(gè)邏輯值轉(zhuǎn)換為字符串,并返回結(jié)果。

用法 booleanObject.toString(),返回值根據(jù)原始布爾值或者 booleanObject 對(duì)象的值返回字符串 "true" 或 "false"。如果調(diào)用該方法的對(duì)象不是 Boolean,則拋出異常 TypeError。

在 Boolean 對(duì)象被用于字符串環(huán)境中時(shí),此方法會(huì)被自動(dòng)調(diào)用。

下面腳本將創(chuàng)建一個(gè) Boolean 對(duì)象,并把它轉(zhuǎn)換成字符串:

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

腳本輸出:true。

先看一例:

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)!

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)。

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)有點(diǎn)不同吧?!它沒有像上面toString那樣統(tǒng)一規(guī)整。對(duì)于那個(gè)[object Object],我估計(jì)是從Object那里繼承過來的,我們?cè)偃サ羲纯础?br />

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

以上所述是小編給大家介紹的JavaScript中的valueOf與toString方法的全部敘述,希望對(duì)大家有所幫助,如果大家有任何疑問請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)腳本之家網(wǎng)站的支持!

相關(guān)文章

  • 純JS實(shí)現(xiàn)可用于頁碼更換的飛頁特效示例

    純JS實(shí)現(xiàn)可用于頁碼更換的飛頁特效示例

    這篇文章主要介紹了純JS實(shí)現(xiàn)可用于頁碼更換的飛頁特效,涉及javascript結(jié)合時(shí)間函數(shù)的數(shù)學(xué)運(yùn)算與頁面元素屬性動(dòng)態(tài)修改相關(guān)操作技巧,需要的朋友可以參考下
    2018-05-05
  • 理解JavaScript的caller,callee,call,apply

    理解JavaScript的caller,callee,call,apply

    文章挺好的,雖然我用的是jQuery,但感覺還是有些用的~~~
    2009-04-04
  • JavaScript中閉包的寫法和作用詳解

    JavaScript中閉包的寫法和作用詳解

    本文給大家介紹javascript中的閉包,包括對(duì)js閉包概念的理解,閉包的幾種寫法和用法,閉包的主要作用,閉包與this對(duì)象,閉包與內(nèi)存泄露及使用閉包的注意點(diǎn)相關(guān)知識(shí),非常不錯(cuò),具有參考借鑒價(jià)值,感興趣的朋友一起學(xué)習(xí)吧
    2016-06-06
  • CSS圖片響應(yīng)式 垂直水平居中

    CSS圖片響應(yīng)式 垂直水平居中

    這篇文章主要為大家介紹CSS圖片響應(yīng)式 垂直水平居中,在最近的項(xiàng)目中經(jīng)常遇到這樣的需求,于是把相關(guān)內(nèi)容整理一下,分享給大家,需要的朋友可以來參考下
    2015-08-08
  • 微信小程序的線程架構(gòu)【推薦】

    微信小程序的線程架構(gòu)【推薦】

    這篇文章主要介紹了微信小程序的線程架構(gòu),每個(gè)小程序包含一個(gè)描述整體程序的app實(shí)例和多個(gè)描述頁面的page,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值 ,需要的朋友可以參考下
    2019-05-05
  • JS身份證信息驗(yàn)證正則表達(dá)式

    JS身份證信息驗(yàn)證正則表達(dá)式

    很多時(shí)候我們都是通過一組正則表達(dá)式來判斷用戶輸入的身份證是否合法,那在用正則表達(dá)式判斷之前,首先要做到的是對(duì)身份證信息的一些效驗(yàn)規(guī)則
    2017-06-06
  • Typescript文件被識(shí)別為視頻的問題解決

    Typescript文件被識(shí)別為視頻的問題解決

    這篇文章主要為大家介紹了Typescript文件被識(shí)別為視頻的問題解決,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-06-06
  • js 操作table之 移動(dòng)TR位置 兼容FF 跟 IE

    js 操作table之 移動(dòng)TR位置 兼容FF 跟 IE

    js操作table之 移動(dòng)TR位置 兼容FF 跟 IE,需要的朋友可以參考下。
    2009-11-11
  • 使用原生JS實(shí)現(xiàn)拍照功能

    使用原生JS實(shí)現(xiàn)拍照功能

    今天我們聊一聊,一個(gè)非常有趣且重要的問題,如何用原生js實(shí)現(xiàn)拍照功能?這時(shí)候,有的朋友會(huì)說,為什么要用原生js實(shí)現(xiàn)呀,這么麻煩還要自己動(dòng)腦子,直接用第三方庫多好呀,但是,你難道不好奇它的底層js實(shí)現(xiàn)嗎?感興趣的同學(xué)跟著小編一起來瞧瞧吧
    2023-12-12
  • 理解JavaScript中的對(duì)象

    理解JavaScript中的對(duì)象

    這篇文章主要介紹了如何理解JavaScript中的對(duì)象,幫助大家更好的學(xué)習(xí)JavaScript,感興趣的朋友可以了解下
    2020-08-08

最新評(píng)論