彭老濕近期月報里提到了valueOf方法,興致來了翻了下ECMA5里關(guān)于valueOf方法的介紹,如下:
15.2.4.4 Object.prototype.valueOf ( )
When the valueOf method is called, the following steps are taken:
1. Let O be the result of calling ToObject passing the this value as the argument.
2. If O is the result of calling the Object constructor with a host object (15.2.2.1), then
a. Return either O or another value such as the host object originally passed to the constructor. The specific result that is returned is implementation-defined.
3. Return O.
規(guī)范里面的對于valueOf的解釋很短,大致為:調(diào)用ToObject方法(一個抽象方法,后面會講到),并將this的值作為參數(shù)傳入。
針對調(diào)用ToObject時傳入的不同參數(shù)(this),返回值分別如下:
1、this為宿主對象時,返回值取決于瀏覽器的實現(xiàn),即不同瀏覽器的返回可能不同(關(guān)于宿主對象,可參考http://www.w3school.com.cn/js/pro_js_object_types.asp)
2、this不是宿主對象,則返回ToObject(this)的值
| 參數(shù)類型 | 返回結(jié)果 |
| Undefined | 拋出TypeError異常 |
| Null | 拋出TypeError異常 |
| Number | 創(chuàng)建一個Number對象,它內(nèi)部的初始值為傳入的參數(shù)值 |
| String | 創(chuàng)建一個String對象,它內(nèi)部的初始值為傳入的參數(shù)值 |
| Boolean | 創(chuàng)建一個Boolean對象,它內(nèi)部的初始值為傳入的參數(shù)值 |
| Object | 返回傳入的參數(shù)(無轉(zhuǎn)換) |
根據(jù)Object.prototype.valueOf的定義,以及抽象方法ToObject的描述,可得下表
| obj類型 | Object.prototype.valueOf.call(obj)返回結(jié)果 |
| Undefined | 拋出TypeError異常 |
| Null | 拋出TypeError異常 |
| Number | Number類型的對象,值等于obj |
| String | String類型的對象,值等于obj |
| Boolean | Boolean類型的對象,值等于obj |
| Object | obj對象本身 |
舉幾個具體的例子:
var num = 123;
console.log(num.valueOf()); //輸出:123
console.log(num.valueOf()); //輸出:'number'
var unde = undefined;
console.log(Object.prototype.valueOf.call(unde)); //輸出:'TypeError: Cannot convert null to object'
var obj = {name:'casper'};
var linkObj = obj.valueOf();
linkObj.name = 'change';
console.log(linkObj.name); //輸出:'change' ...說明obj.valueOf()返回的是對象自身
實際上,上面沒有提到Array、Function對象,根據(jù)下面代碼可以猜想,當(dāng)Object.prototype.valueOf調(diào)用時,參數(shù)為Array、Function類型的對象時,返回的結(jié)果也為對象自身:
var arr = [1, 2 ,3];
var linkArr = arr.valueOf();
linkArr[0] = ['casper'];
console.log(linkArr); //輸出:['casper', 2, 3]
var foo = function(){ return 1; };
var linkFoo = foo.valueOf();
linkFoo.test = 'casper';
console.log(linkFoo.test); //輸出:'casper'
看完上面的描述,是不是有種恍然大悟的感覺?如果是的話,恭喜你,可能你跟我一樣其實還沒完全理解透徹。
簡單舉個例子,當(dāng)調(diào)用Object.prototype.valueOf的對象為數(shù)值類型時,假設(shè)該對象是名稱為num,num很有可能通過下面兩種方式聲明:
var num = 123; //通過對象字面量聲明console.log(typeof num); //輸出:'number'
var num = new Number(123); //通過構(gòu)造方法聲明console.log(typeof num); //輸出:'object'
更多變態(tài)聲明方式,可參見《JS中不為人知的五種聲明Number的方式》
關(guān)于返回值的說明,ECMA5里面原文如下:
Create a new Number object whose [[PrimitiveValue]] internal property is set to the value of the argument. See 15.7 for a description of Number objects.
按照這段文字的說明,似乎num.valueOf()返回的應(yīng)該是個Number對象(非字面量聲明的那種),但實際上:
var num = 123;
var tmp = num.valueOf();
console.log(typeof tmp); //輸出: 'number'
這是怎么回事呢?于是又仔細翻看了下,似乎有些接近真相了:
5.7.4.4 Number.prototype.valueOf ( )
Returns this Number value.
The valueOf function is not generic; it throws a TypeError exception if its this value is not a Number or a Number object. Therefore, it cannot be transferred to other kinds of objects for use as a method.
原來Number有屬于自身的原型valueOf方法,不是直接從Object.prototype上繼承下來,類似的,Boolean、String也有自己的原型valueOf方法,歸納如下:
| 類型 | 是否有屬于自己的原型valueOf方法 |
| Undefined | 無 |
| Null | 無 |
| Number | 有,Number.prototype.valueOf |
| String | 有,String.prototype.valueOf |
| Boolean | 有,Boolean.prototype.valueOf |
| Object | - |
此處之外,Array、Function并沒有自己的原型valueOf方法,見規(guī)范說明:
NOTE The Array prototype object does not have a valueOf property of its own; however, it inherits the valueOf property from the standard built-in Object prototype Object.
The Function prototype object does not have a valueOf property of its own; however, it inherits the valueOf property from the Object prototype Object.
補充說明:Number.prototype.valueOf的內(nèi)部轉(zhuǎn)換規(guī)則比想的要略復(fù)雜些,此處不展開。
欧美最猛性xxxx免费|
97se亚洲国产综合自在线观|
成年无码av片在线|
欧美在线3区|
国产乱码在线|
在线观看国产一级片|
97在线视频免费|
亚洲片区在线|
国产麻豆一区二区三区精品视频|
亚洲盗摄视频|
日本不卡视频一二三区|
亚洲春色在线视频|
福利一区福利二区微拍刺激|
www日韩在线|
国内免费久久久久久久久久久|
亚洲制服丝袜在线播放|
香蕉伊大人中文在线观看|
欧美超级免费视 在线|
亚洲欧美日韩中文在线制服|
国产亚洲一区二区三区在线播放|
看黄色录像一级片|
91久久精品www人人做人人爽|
国产成人无码一区二区三区在线|
日本三级在线播放完整版|
久久噜噜噜精品国产亚洲综合|
91精品成人久久|
欧美日本视频一区|
午夜久久福利|
欧美成人a∨高清免费观看|
国产精品海角社区在线观看|
久久精品国内一区二区三区|
日本在线аv|
一区二区三区丝袜|
中文字幕最新精品|
美女一区网站|
国产乱人乱偷精品视频a人人澡|
国产精品久久久久久久泡妞|
精品国产精品一区二区夜夜嗨|
欧美激情网站|
999热视频|
性日韩欧美在线视频|
短视频在线观看|
国内不卡一区二区三区|
午夜久久福利影院|
二吊插入一穴一区二区|
国产欧美一区二区精品久导航|
最新中文字幕av专区|
9999热视频在线观看|
热久久精品免费视频|
亚洲最大成人在线|
最新精品视频在线|
内射中出日韩无国产剧情|
中文字幕一区二区三区免费看|
天天综合天天综合色|
欧美色电影在线|
久久久91精品国产一区不卡|
久久国产精品久久久久久久久久|
在线免费不卡视频|
在线观看av每日更新免费|
欧美成人性战久久|
一本大道东京热无码aⅴ|
亚洲一区二区高清视频|
初高中福利视频网站|
国自产拍在线网站网址视频|
日韩精品一区二区三区免费观看|
综合亚洲深深色噜噜狠狠网站|
在线亚洲欧美专区二区|
国产精品久久久久久久久久99|
国产网站一区二区|
中文av资源在线|
男女男精品视频|
久久66热re国产毛片基地|
91福利免费|
2019中文字幕在线免费观看|
色猫咪免费人成网站在线观看|
91wwwcom在线观看|
国产福利影院在线观看|
成人高潮a毛片免费观看网站|
第四色在线一区二区|
99成人超碰|
992tv国产精品成人影院|
99精彩视频在线观看免费|
黑森林av导航|
精品一区二区三区中文字幕在线|
色噜噜狠狠成人网p站|
日韩有码一区二区三区|
一级黄色香蕉视频|
欧美亚洲激情|
九九热视频免费在线观看|
av在线不卡网|
四虎精品一区二区免费|
波多野结衣绝顶大高潮|
精品女厕厕露p撒尿|
欧美 日韩 国产一区|
亚洲一区二区三区自拍|
操你啦在线视频|
亚洲护士老师的毛茸茸最新章节|
国产日韩精品在线播放|
日产精品久久久一区二区福利|
九色视频在线观看免费播放|
在线天堂www在线国语对白|
91精品一区二区三区综合在线爱|
欧美一级二级在线观看|
无遮挡爽大片在线观看视频|
免费观看成人www动漫视频|
siro系绝美精品系列|
色悠悠亚洲一区二区|
国产精品视频无码|
亚洲色大成网站www|
欧日韩在线视频|
日韩免费三级|
青青精品视频播放|
性猛交╳xxx乱大交|
一区二区三区视频在线观看|
岳乳丰满一区二区三区|
国产精品白丝一区二区三区|
伊人亚洲综合网|
成人短视频在线观看免费|
欧美一区二区三区久久精品|
91人人网站|
搞黄网站在线看|
亚洲免费观看视频|
天堂网av手机版|
免费观看成年人视频|
日韩精品――色哟哟|
欧日韩一区二区三区|
国产精品怡红院|
91精品国产一区二区在线观看|
日韩精品手机在线|
久久婷婷国产综合精品青草|
国产在线一区观看|
自拍偷拍视频在线|
欧美中日韩在线|
一区二区三区免费高清视频|
清纯唯美亚洲经典中文字幕|
国产精品一区二区x88av|
欧美重口另类|
91尤物国产福利在线观看|
欧美亚洲一区在线|
亚洲欧美日韩中文字幕在线观看|
在线日韩av|
猫咪成人在线观看|
夜先锋资源网|
中文在线资源在线|
羞羞免费视频|
91黑人精品一区二区三区|
欧美一区三区二区在线观看|
极品少妇xxxx偷拍精品少妇|
国产人妻人伦精品|
xxxxxxxxx欧美|
日本1级在线|
97夜夜澡人人双人人人喊|
精品夜夜澡人妻无码av|
国产伦乱精品|
免费成人午夜视频|
国产真实乱人偷精品视频|
欧美专区在线播放|
激情aⅴ欧美一区二区欲海潮|
成人网免费视频|
91国产中文字幕|
国产精品视频免费在线观看|
亚洲欧美文学|
国产精品三p一区二区|
久久国产精品亚洲77777|
韩国精品视频|
www中文字幕在线观看|
91在线精品秘密一区二区|
一个人www视频在线免费观看|
国产艳妇疯狂做爰视频|
欧美视频在线观看一区二区|
国产女人伦码一区二区三区不卡|
国产精选在线观看|
日韩欧美一区二区三区久久婷婷|
一区二区三区在线电影|
欧美一区二区|
狠狠干婷婷色|
欧美黄网站在线观看|
亚洲人成色777777老人头|
中文av一区二区三区|
日韩在线中文字幕|
日韩黄色在线观看|
丝袜国产日韩另类美女|
国产精品久久久久久久久久久新郎|
日韩最新在线|
国产精品每日更新在线播放网址|
亚洲精品偷拍视频|
美女撒尿一区二区三区|
av一区二区三区免费|
亚洲午夜精品久久久久久久久久久久|
国产专区视频|
久久久精品国产亚洲|
999久久精品|
日韩三级不卡|
日韩电影天堂视频一区二区|
国产.com|
成人在线观看免费高清|
中文字幕一区二区三区在线乱码|
亚洲v天堂v手机在线|
色婷婷亚洲综合|
精品在线免费观看|
93在线视频精品免费观看|
成人在线视频国产|
青青操综合网|
国产成人高清精品免费5388|
亚洲成a人片77777在线播放|
国产精品久久网站|
国产热re99久久6国产精品|
日韩有码在线观看|
91麻豆精品国产自产在线观看一区|
亚洲黄色av一区|
成人欧美magnet|
精品人妻无码一区二区|
欧美tickling网站挠脚心|
色哟哟无码精品一区二区三区|
欧美性xxxxxxx|
中文字幕超清在线免费观看|
精品一区二区三区五区六区|
国产精品美女呻吟|
狠狠色综合欧美激情|
久久97精品久久久久久久不卡|
五月婷婷视频在线|
国产精品无码午夜福利|
一区二区三区动漫|
久久久国产高清|
99视频资源网|
26uuu国产日韩综合|
国产精品毛片aⅴ一区二区三区|
国产精品入口麻豆免费看|
日韩电影天堂视频一区二区|
黄网免费视频|
日韩专区欧美专区|
亚洲自拍偷拍色图|
岛国av在线不卡|
美女诱惑一区二区|
91在线免费播放|
欧美男女交配视频|
国产精品中文字幕日韩精品|
国产不卡在线|
f2c人成在线观看免费视频|
久久中文字幕一区|
亚洲综合图区|
色网综合在线观看|
91av在线播放视频|
超碰超碰超碰超碰|
三级在线看中文字幕完整版|
欧美又粗又大又爽|
美女尤物久久精品|
无码免费一区二区三区免费播放|
3d动漫精品啪啪1区2区免费|
成人免费视频77777|
蜜桃视频m3u8在线观看|
欧美日韩中文不卡|
欧美大片免费看|
中文字幕一区二区三区乱码在线|
美女看a上一区|
制服丝袜中文字幕一区|
久久亚洲精品无码va白人极品|
一区二区传媒有限公司|
福利写真视频网站在线|
亚洲欧美日韩中文播放|
午夜精品久久久久久久99黑人|
亚洲一区二区三区视频在线播放|
亚洲欧洲日韩一区二区三区|
性做久久久久久久久久|
91福利在线观看|
久久国产亚洲精品|
91tv亚洲精品香蕉国产一区7ujn|
www在线观看播放免费视频日本|
青青青国产在线观看|
中日韩美女免费视频网址在线观看|
韩国av在线播放|
久久久久久久久毛片|
亚洲欧美日韩一区二区在线|
色香色香欲天天天影视综合网|
东京热av一区|
97精品超碰一区二区三区|
欧美日高清视频|
综合久久久久综合|
97影院秋霞午夜在线观看|
亚洲成人看片|
日本福利视频|
国产一区二区在线网站|
偷拍25位美女撒尿视频在线观看|
天使萌一区二区三区免费观看|
成人资源在线播放|
午夜欧美在线一二页|
超级污的网站|
免费男女羞羞的视频网站中文字幕妖精视频|
国产亲伦免费视频播放|
先锋影音亚洲资源|
欧美三区四区|
黄色网址在线免费观看|
91欧美激情一区二区三区成人|
亚洲小说区图片区|
国产浪潮av性色av小说|
亚洲欧美综合网|
欧美久久久久久久久久久久久|
波多野结衣在线免费观看|
91超碰碰碰碰久久久久久综合|
久久久久久久久久久国产|
精品国产一区二区三区久久久蜜臀|
欧美成a人片免费观看久久五月天|
亚洲欧美日韩国产中文专区|
免费女人黄页|
水蜜桃久久夜色精品一区|
91久久精品一区二区别|
欧美性视频网站|
精品少妇一区二区30p|
激情五月综合网|
最新中文字幕免费视频|
国产精品一区二区久久精品爱涩|
亚洲人在线观看视频|
东方av正在进入|
精品无码一区二区三区爱欲|
亚洲一区二区在线观|
国产999免费视频|
黑料吃瓜在线观看|
99这里只有久久精品视频|
在线观看av中文字幕|
www.亚洲一二|
毛片在线免费播放|
另类专区欧美|
亚洲美女性生活|
日本在线看片免费人成视1000|
国产三级黄色片|
91精品国产91久久久久游泳池|
刘玥91精选国产在线观看|
日本a在线播放|