亚洲中字慕日产2020,大陆极品少妇内射AAAAAA,无码av大香线蕉伊人久久,久久精品国产亚洲av麻豆网站

資訊專欄INFORMATION COLUMN

關(guān)于javascript中的toString()和valueOf()

paulquei / 1110人閱讀

摘要:和是對(duì)象的兩個(gè)方法,你在瀏覽器后臺(tái)輸入就可以看到了它們是其中的兩個(gè)。先說一下兩個(gè)東西的用途返回對(duì)象的字符串表示。返回對(duì)象的字符串?dāng)?shù)值或布爾值表示。如果是彈窗的話,直接調(diào)用方法。至于其他情況,待續(xù)

關(guān)于javascript中的toString()和valueOf()
我GitHub上的菜鳥倉(cāng)庫(kù)地址: 點(diǎn)擊跳轉(zhuǎn)查看其他相關(guān)文章
文章在我的博客上的地址: 點(diǎn)擊跳轉(zhuǎn)

? ? ? ? 關(guān)于javascript中的toString()和valueOf()兩種方法,其實(shí)早在開始讀紅寶書(JavaScript高級(jí)程序設(shè)計(jì))的時(shí)候已經(jīng)有點(diǎn)困惑了,怎么搞出來這兩個(gè)這么相似的東西,重點(diǎn)是很多時(shí)候它們得到的結(jié)果都是一樣的,雖然之后不了了之覺得對(duì)應(yīng)用沒什么大影響就不管了,直到現(xiàn)在開始寫博客的時(shí)候才回頭看看這個(gè)問題。

? ? ? ? 好了,開始正文了。

? ? ? ? toString() 和 valueOf() 是對(duì)象的兩個(gè)方法,你在瀏覽器后臺(tái)輸入Object.protototype就可以看到了它們是其中的兩個(gè)。

? ? ? ? 先說一下兩個(gè)東西的用途:

? ? ? ? toString( ):返回對(duì)象的字符串表示。

? ? ? ? valueOf( ):返回對(duì)象的字符串、數(shù)值或布爾值表示。

? ? ? ? 好了,寫幾個(gè)例子就明白返回結(jié)果了(undefined ?和 null ?的值就不舉例了,因?yàn)樗鼈兌紱]有這兩個(gè)方法,所以肯定會(huì)報(bào)錯(cuò)的):

//先看看toString()方法的結(jié)果
var a = 3;
var b = "3";
var c = true;
var d = {test:"123",example:123}
var e = function(){console.log("example");}
var f = ["test","example"];

a.toString();// "3"
b.toString();// "3"
c.toString();// "true"
d.toString();// "[object Object]"
e.toString();// "function (){console.log("example");}"
f.toString();// "test,example"
//再看看valueOf()方法的結(jié)果
var a = 3;
var b = "3";
var c = true;
var d = {test:"123",example:123}
var e = function(){console.log("example");}
var f = ["test","example"];

a.valueOf();// 3
b.valueOf();// "3"
c.valueOf();// true
d.valueOf();// {test:"123",example:123}
e.valueOf();// function(){console.log("example");}
f.valueOf();// ["test","example"]

? ? ? ? 很清楚了,toString( )就是將其他東西用字符串表示,比較特殊的地方就是,表示對(duì)象的時(shí)候,變成"[object Object]",表示數(shù)組的時(shí)候,就變成數(shù)組內(nèi)容以逗號(hào)連接的字符串,相當(dāng)于Array.join(",")。 而valueOf( )就返回它自身了。

? ? ? ? 至于迷惑的地方,就在于它們?cè)谑裁磿r(shí)候被調(diào)用,舉個(gè)例子:

var a = "3";
console.log(+a);//?3

? ? ? ? 當(dāng)然了,打印結(jié)果是數(shù)字3(不是字符串‘3’),因?yàn)橐辉硬僮鞣釉谧址懊婢蛯⑵滢D(zhuǎn)換為數(shù)字了(字符串轉(zhuǎn)化為數(shù)字的一種方式,相當(dāng)于Number( )方法),但是如果它應(yīng)用在對(duì)象上,過程是怎樣的呢,再舉例子:

//例子一
var?example?=?{test:"123"};
console.log(+example);// NaN

//例子二 同時(shí)改寫 toString 和 valueOf 方法
var?example?=?{
    toString:function(){
        return "23";
    },
    valueOf:function(){
        return "32";
    }
};
console.log(+example);//?32

//例子三?只改寫?toString?方法
var?example?=?{
    toString:function(){
        return "23";
    }
};
console.log(+example);//?23

? ? ? ? 通過例子一和例子二的比較,我們可以知道,一元加操作符在操作對(duì)象的時(shí)候,會(huì)先調(diào)用對(duì)象的valueOf方法來轉(zhuǎn)換,最后再用Number( )方法轉(zhuǎn)換,而通過例子二和例子三的比較,我們可以知道,如果只改寫了toString方法,對(duì)象則會(huì)調(diào)用toString方法,證明valueOf的優(yōu)先級(jí)比toString高。上面例子是多帶帶對(duì)對(duì)象上使用一元加操作符,但是,如果是字符串加對(duì)象呢?

console.log("test"+{});   //"test[object Object]"

? ? ? ? 這個(gè)很明顯,對(duì)象和字符串相加,肯定轉(zhuǎn)換為字符串啊,所以調(diào)用了對(duì)象的toString方法,變?yōu)閇object Object]了。

? ? ? ? 好了,如果是alert呢?

//例子一
var?example?=?{test:"123"};
alert(example);// "[object Object]"

//例子二 同時(shí)改寫 toString 和 valueOf 方法
var?example?=?{
    toString:function(){
        return "23";
    },
    valueOf:function(){
        return "32";
    }
};
alert(example);//?"23"

//例子三?只改寫?valueOf?方法
var?example?=?{
    valueOf:function(){
        return "32";
    }
};
alert(example);// "[object Object]"

? ? ? ? 雖然上面結(jié)果我用雙引號(hào)了,但是你知道彈窗不會(huì)將字符串的雙引號(hào)表示出來的。通過上面幾個(gè)例子,我們就知道了,alert它對(duì)待對(duì)象,就和字符串和對(duì)象相加一樣,就是調(diào)用它的toString( )方法,和valueOf方法無關(guān)。

? ? ? ? 好了,總結(jié)一下,一般用操作符多帶帶對(duì)對(duì)象進(jìn)行轉(zhuǎn)換的時(shí)候,如果對(duì)象存在valueOf或toString改寫的話,就先調(diào)用改寫的方法,valueOf更高級(jí),如果沒有被改寫,則直接調(diào)用對(duì)象原型的valueOf方法。如果是彈窗的話,直接調(diào)用toString方法。至于其他情況,待續(xù)……

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://www.ezyhdfw.cn/yun/88342.html

相關(guān)文章

  • 關(guān)于Javascript中的valueOftoString

    摘要:中默認(rèn)的方法返回字符串。的方法將返回一個(gè)具有可讀性的日期時(shí)間字符串。函數(shù)的作用是返回該自身。其他一律返回對(duì)象本身。在有運(yùn)算操作符的情況下,的優(yōu)先級(jí)高于。 +{ a: 1, toString: function() { return 10 }, valueOf: function() { return 100 } } 以上引申出對(duì)象數(shù)據(jù)的轉(zhuǎn)換的問題:所有對(duì)象繼承了兩個(gè)轉(zhuǎn)換方法: toS...

    lvzishen 評(píng)論0 收藏0
  • 關(guān)于JavaScript函數(shù)柯里化問題探索

    摘要:函數(shù)柯里化關(guān)于函數(shù)柯里化的問題最初是在忍者秘籍中講閉包的部分中看到的,相信很多同學(xué)見過這樣一道和柯里化有關(guān)的面試題實(shí)現(xiàn)一個(gè)函數(shù),使得如下斷言能夠能夠通過簡(jiǎn)單說就是實(shí)現(xiàn)一個(gè)求值函數(shù),能夠?qū)⑺袇?shù)相加得出結(jié)果。方法返回一個(gè)表示該對(duì)象的字符串。 函數(shù)柯里化 ??關(guān)于函數(shù)柯里化的問題最初是在《JavaScript忍者秘籍》中講閉包的部分中看到的,相信很多同學(xué)見過這樣一道和柯里化有關(guān)的面試題:...

    vboy1010 評(píng)論0 收藏0
  • 掌握 Javascript 類型轉(zhuǎn)換:從規(guī)則開始

    摘要:首先,為了掌握好類型轉(zhuǎn)換,我們要理解一個(gè)重要的抽象操作為什么說這是個(gè)抽象操作呢因?yàn)檫@是內(nèi)部才會(huì)使用的操作,我們不會(huì)顯示調(diào)用到?;疽?guī)則中的類型轉(zhuǎn)換總是返回基本類型值,如字符串?dāng)?shù)字和布爾值,不會(huì)返回對(duì)象和函數(shù)。 Javascript 里的類型轉(zhuǎn)換是一個(gè)你永遠(yuǎn)繞不開的話題,不管你是在面試中還是工作寫代碼,總會(huì)碰到這類問題和各種的坑,所以不學(xué)好這個(gè)那是不行滴。關(guān)于類型轉(zhuǎn)換我也看過不少的書和各...

    mikyou 評(píng)論0 收藏0
  • JavaScript類型:關(guān)于類型,有哪些你不知道的細(xì)節(jié)?

    摘要:通過拆箱轉(zhuǎn)換,把對(duì)象編程基本類型,再?gòu)膹幕绢愋娃D(zhuǎn)換成對(duì)應(yīng)的或者。拆箱轉(zhuǎn)換會(huì)嘗試調(diào)用和來獲得拆箱后的基本類型。 undefined和null ??Undefined類型表示未定義,它的類型只有一個(gè)值為undefined。任何變量在賦值前都是undefined類型,值為undefined。但是JS中undefined是一個(gè)變量,并非是一個(gè)關(guān)鍵字,為了避免無意中的篡改,使用void 0來獲...

    JessYanCoding 評(píng)論0 收藏0
  • JavaScript類型轉(zhuǎn)換的迷糊事兒

    摘要:下面分幾步來簡(jiǎn)單的探探不同類型的轉(zhuǎn)換吧以下的內(nèi)容,都可以從權(quán)威指南中找到。其他值轉(zhuǎn)換成在編寫代碼的過程中,幾乎不用考慮它的取值類型。核心內(nèi)置類,會(huì)嘗試先于可以理解為對(duì)象優(yōu)先轉(zhuǎn)換成數(shù)字例外的是,利用的是轉(zhuǎn)換。 最近在寫公司的登錄注冊(cè)模塊,遇到類型不同相比較的時(shí)候,就心驚膽戰(zhàn),每次都要用瀏覽器來驗(yàn)證一下,決定亂七八糟的隨便寫一下,方便日后自己回顧知識(shí)~ 弱類型帶來的那些讓人迷糊的事 弱類型...

    harriszh 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<