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

js中toString()與valueOf()的使用

 更新時(shí)間:2023年06月25日 09:57:36   作者:讀心悅  
tostring 和 valueOf 函數(shù)是解決值的顯示和運(yùn)算的問題,本文主要介紹了js中toString()與valueOf()的使用,文中通過示例代碼介紹的非常詳細(xì),需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

tostring 和 valueOf 函數(shù)是解決值的顯示和運(yùn)算的問題。所有的 Object 類型的數(shù)據(jù)都自帶 toString 和 valueOf 函數(shù)。

比如我們定一個(gè) Object 類型數(shù)據(jù):

const obj = {
    name: "duxin"
}
console.log(obj.valueOf()); // { name: 'duxin' }

toString()

toString 函數(shù)的作用是把一個(gè)邏輯轉(zhuǎn)換為字符串,并且返回 Object 類型數(shù)據(jù)的 toString()默認(rèn)的返回值"[object Object]"。

如果我們?cè)诙x對(duì)象的時(shí)候,可以重寫 tosString 函數(shù),這樣 toString 的返回值可讀性會(huì)更好一些,比如:

const obj = {
    name: "duxin",
    toString:function(){
        return this.name;
    }
}
console.log(obj.valueOf()); // { name: 'duxin' }
console.log(obj.toString()); // duxin

以下這些函數(shù)都是有自定義的 toString 函數(shù):

  • Array 的 toString 函數(shù)返回值是以逗號(hào)分隔的字符串;
  • Function 的 toString 函數(shù)返回值是函數(shù)自身的文本定義;
  • Date 的 toString 函數(shù)返回值是時(shí)間字符串;

在JavaScript中,Object,Array,F(xiàn)unction,Date等類型都實(shí)現(xiàn)了自定義的toString()函數(shù)。

  • Object 類型數(shù)據(jù)的 toString() 函數(shù)默認(rèn)的返回結(jié)果是 “[object Object]”,當(dāng)我們自定義新的類時(shí),可以重寫 toString() 函數(shù),返回可讀性更高的結(jié)果。
  • Array 的 toString() 函數(shù)返回值為以逗號(hào)分隔構(gòu)成的數(shù)組成員字符串。數(shù)組也是對(duì)象,那么為什么數(shù)組返回的是對(duì)應(yīng)的字符串而不是對(duì)象,其實(shí)數(shù)組覆蓋了Object.toString方法,然后將連接數(shù)組并返回一個(gè)字符串,其中包含用逗號(hào)分隔的每個(gè)數(shù)組元素(相當(dāng)于Array.join())
  • Function 的 toString() 函數(shù)返回值為函數(shù)的文本定義
  • Date 的 toString() 函數(shù)返回值為具有可讀性的時(shí)間字符串

valueOf()

valueOf 函數(shù)返回引用類型的原始值,如果沒有原始值,就返回"{}",就是空對(duì)象的字面量。

  • Array的valueOf函數(shù)返回的值數(shù)組本身;
  • Function的valueOf函數(shù)返回的是函數(shù)本身;
  • Date的valueOf函數(shù)返回的值時(shí)間戳。

在發(fā)生數(shù)據(jù)類型轉(zhuǎn)換的時(shí)候,有l(wèi)iang兩種場(chǎng)景:

引用數(shù)據(jù)類型轉(zhuǎn)為String,先是調(diào)用toString函數(shù),有值的話,就直接返回該字符串;如果對(duì)象沒有toString,那就調(diào)用valueOf函數(shù),然后將原始值轉(zhuǎn)為字符串并且返回;如果toString或者valueOf都不能獲取原始值,那就拋出類型轉(zhuǎn)換異常;

var arr = [];
arr.toString = function () {
? ? ?console.log('調(diào)用了toString()函數(shù)');
? ? ?return [];
};
arr.valueOf = function () {
? ? ?console.log('調(diào)用了valueOf()函數(shù)');
? ? ?return [];
};
console.log(String(arr));

在執(zhí)行String(arr)的時(shí)候,是先將數(shù)組轉(zhuǎn)為字符串,調(diào)用的是toString,它的結(jié)果不能轉(zhuǎn)為string;

那就調(diào)用valueOf函數(shù),它的返回值也是一個(gè)空數(shù)組,也不能轉(zhuǎn)為字符串,那就只能拋出類型轉(zhuǎn)換異常了。

引用類型在轉(zhuǎn)化為number的時(shí)候,首先會(huì)判斷對(duì)象是否含有valueOf函數(shù),如果有,那就調(diào)用valueOf函數(shù),把它的返回值轉(zhuǎn)為數(shù)字,然后返回;如果沒有valueOf函數(shù),就調(diào)用toString函數(shù),將返回值轉(zhuǎn)為數(shù)字并返回。如果toString或者valueOf都不能獲取到原始值的話,那就拋出類型轉(zhuǎn)換異常。

  • Object 類型數(shù)據(jù)的valueOf()函數(shù)默認(rèn)的返回結(jié)果是"{}",即一個(gè)空的對(duì)象字面量。
  • Array 的valueOf()函數(shù)返回的是數(shù)組本身
  • function 的valueOf()函數(shù)返回的是函數(shù)本身
  • Date 的valueOf()函數(shù)返回的是指定日期的時(shí)間戳

小結(jié):

  • toString() 返回的是字符串,而 valueOf() 返回的是原始值,沒有原始值返回對(duì)象本身
  • undefined 和 null 都沒有 toString() 和 valueOf() 方法
  • Date 類型的 toString() 返回的表示時(shí)間的字符串;valueOf() 返回的是現(xiàn)在到1970年1月1日的毫秒數(shù)(時(shí)間戳)
  • Number 類型的 toString() 方法可以接收轉(zhuǎn)換基數(shù),返回不同進(jìn)制的字符串形式的數(shù)值;而 valueOf()方 法無法接受轉(zhuǎn)換基數(shù)

特殊情況

如果一個(gè)引用類型的值既存在 toString() 函數(shù)又存在 valueOf() 函數(shù),那么在做隱式轉(zhuǎn)換時(shí),會(huì)調(diào)用哪個(gè)函數(shù)呢?這里我們可以概括成兩種場(chǎng)景,分別是引用類型轉(zhuǎn)換為 String 類型,以及引用類型轉(zhuǎn)換為 Number 類型。

1、引用類型轉(zhuǎn)換為 String 類型

一個(gè)引用類型的數(shù)據(jù)在轉(zhuǎn)換為 String 類型時(shí),一般是用于數(shù)據(jù)展示,轉(zhuǎn)換時(shí)遵循以下規(guī)則:

如果對(duì)象具有 toString() 函數(shù),則會(huì)優(yōu)先調(diào)用 toString() 函數(shù)。如果它返回的是一個(gè)原始值,則會(huì)直接將這個(gè)原始值轉(zhuǎn)換為字符串表示,并返回該字符串。
反之,則會(huì)再去調(diào)用 valueOf() 函數(shù),如果 valueOf() 函數(shù)返回的結(jié)果是一個(gè)原始值,則會(huì)將這個(gè)結(jié)果轉(zhuǎn)換為字符串表示,并返回該字符串。
如果通過 toString() 函數(shù)或者 valueOf() 函數(shù)都無法獲得一個(gè)原始值,則會(huì)直接拋出類型轉(zhuǎn)換異常。

2、引用類型轉(zhuǎn)換為 Number 類型

一個(gè)引用類型的數(shù)據(jù)在轉(zhuǎn)換為 Number 類型時(shí),一般是用于數(shù)據(jù)運(yùn)算,轉(zhuǎn)換時(shí)遵循以下規(guī)則:

如果對(duì)象具有 valueOf() 函數(shù),則會(huì)優(yōu)先調(diào)用 valueOf() 函數(shù),如果 valueOf() 函數(shù)返回一個(gè)原始值,則會(huì)直接將這個(gè)原始值轉(zhuǎn)換為數(shù)字表示,并返回該數(shù)字。
反之,則會(huì)再去調(diào)用 toString() 函數(shù),如果 toString() 函數(shù)返回的結(jié)果是一個(gè)原始值,則會(huì)將這個(gè)結(jié)果轉(zhuǎn)換為數(shù)字表示,并返回該數(shù)字。
如果通過 toString() 函數(shù)或者 valueOf() 函數(shù)都無法獲得一個(gè)原始值,則會(huì)直接拋出類型轉(zhuǎn)換異常。

到此這篇關(guān)于js中toString()與valueOf()的使用的文章就介紹到這了,更多相關(guān)js toString() valueOf()內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • jquery插件jquery.confirm彈出確認(rèn)消息

    jquery插件jquery.confirm彈出確認(rèn)消息

    這篇文章介紹了插件jquery.confirm彈出確認(rèn)消息的實(shí)現(xiàn)方法,感興趣的小伙伴們可以參考一下
    2015-12-12
  • 框架頁(yè)面高度自動(dòng)刷新的Javascript腳本

    框架頁(yè)面高度自動(dòng)刷新的Javascript腳本

    框架頁(yè)面高度自動(dòng)刷新,加載index.htm時(shí)候,每隔1秒鐘自動(dòng)調(diào)用腳本刷新框架頁(yè)面代碼,具體實(shí)現(xiàn)如下,感興趣的朋友可以了解下
    2013-11-11
  • JS異步宏隊(duì)列微隊(duì)列原理詳解

    JS異步宏隊(duì)列微隊(duì)列原理詳解

    這篇文章主要介紹了JS異步宏隊(duì)列微隊(duì)列原理詳解,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-09-09
  • 關(guān)于微信小程序bug記錄與解決方法

    關(guān)于微信小程序bug記錄與解決方法

    這篇文章主要介紹了關(guān)于微信小程序bug記錄與解決方法,非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2018-08-08
  • Javascript進(jìn)制轉(zhuǎn)換實(shí)例分析

    Javascript進(jìn)制轉(zhuǎn)換實(shí)例分析

    這篇文章主要介紹了Javascript進(jìn)制轉(zhuǎn)換方法,實(shí)例分析了javascript實(shí)現(xiàn)進(jìn)制轉(zhuǎn)換的技巧,需要的朋友可以參考下
    2015-05-05
  • js只執(zhí)行1次的函數(shù)示例

    js只執(zhí)行1次的函數(shù)示例

    本文通過代碼示例給大家展示了如何讓javascript只執(zhí)行一次,如何實(shí)現(xiàn)這種功能呢?通過下面這段就可以輕松搞定了。
    2016-07-07
  • 純javascript實(shí)現(xiàn)自動(dòng)發(fā)送郵件

    純javascript實(shí)現(xiàn)自動(dòng)發(fā)送郵件

    當(dāng)我們發(fā)送郵件時(shí),可以自定義郵件發(fā)送的時(shí)間,那么使用代碼是如何實(shí)現(xiàn)的呢?下面通過本篇文章給大家介紹使用純javascript實(shí)現(xiàn)自動(dòng)發(fā)送郵件,感興趣的朋友可以參考下
    2015-10-10
  • JavaScript中實(shí)現(xiàn)sprintf、printf函數(shù)

    JavaScript中實(shí)現(xiàn)sprintf、printf函數(shù)

    這篇文章主要介紹了JavaScript中實(shí)現(xiàn)sprintf、printf函數(shù),這兩個(gè)函數(shù)在大多數(shù)編程語言中都有,但JS中卻沒有,本文介紹在js中實(shí)現(xiàn)這兩個(gè)函數(shù)功能,需要的朋友可以參考下
    2015-01-01
  • JavaScript prototype 使用介紹

    JavaScript prototype 使用介紹

    用過JavaScript的同學(xué)們肯定都對(duì)prototype如雷貫耳,但是這究竟是個(gè)什么東西卻讓初學(xué)者莫衷一是,只知道函數(shù)都會(huì)有一個(gè)prototype屬性,可以為其添加函數(shù)供實(shí)例訪問,其它的就不清楚了,最近看了一些 JavaScript高級(jí)程序設(shè)計(jì),終于揭開了其神秘面紗
    2013-08-08
  • JavaScript模塊隨意拖動(dòng)示例代碼

    JavaScript模塊隨意拖動(dòng)示例代碼

    這篇文章主要介紹了JavaScript模塊隨意拖動(dòng)的具體實(shí)現(xiàn),需要的朋友可以參考下
    2014-05-05

最新評(píng)論

香河县| 龙口市| 时尚| 绥阳县| 抚州市| 呼图壁县| 安多县| 丰宁| 仁布县| 永和县| 塔河县| 克东县| 甘泉县| 香河县| 绥化市| 来安县| 皋兰县| 新巴尔虎左旗| 西城区| 洞口县| 绥芬河市| 浙江省| 龙山县| 郴州市| 横山县| 红桥区| 平谷区| 南开区| 岑溪市| 霸州市| 千阳县| 通城县| 同心县| 新营市| 宝鸡市| 全椒县| 合江县| 句容市| 安龙县| 铁岭县| 三台县|