午夜剧场伦理_日本一道高清_国产又黄又硬_91黄色网战_女同久久另类69精品国产_妹妹的朋友在线

您的位置:首頁(yè)技術(shù)文章
文章詳情頁(yè)

javascript - 為什么數(shù)組Array可以直接調(diào)用方法,而普通的Object對(duì)象卻不行?

瀏覽:271日期:2023-02-15 17:11:43

問(wèn)題描述

比如我們可以這樣數(shù)組排序:

[1,2,3].sort()

卻不能這樣調(diào)用對(duì)象的方法:

{}.toString()

還有,為什么字符串可以直接調(diào)用方法,Number類型、Boolean類型卻不行。

字符串我了解一些,調(diào)用字符串方法的時(shí)候會(huì)生成一個(gè)臨時(shí)的String對(duì)象,Number、Boolean類型為啥不行?

問(wèn)題解答

回答1:

這不和eval()解析’{}’道理一樣,js解析代碼會(huì)優(yōu)先把{看成和function{}的大括號(hào)一樣,會(huì)分開(kāi)解析先解析{(開(kāi)始),在解析}(結(jié)束)。這樣的話當(dāng)然會(huì)報(bào)錯(cuò)了。而eval()解析’{}’時(shí)是怎么辦的,加個(gè)括號(hào)’({})’;這樣就會(huì)把{}看成一個(gè)整體來(lái)解析,這時(shí)候它就是對(duì)象了。至于“為什么字符串可以直接調(diào)用方法,Number類型、Boolean類型卻不行”Boolean類型可以呀,至于數(shù)字不能直接調(diào)用方法,那也是js解析的原因,比如

8.toString()//報(bào)錯(cuò)(8).toString()// 正確8.0.toString()// 正確

那為什么呢,因?yàn)閖s中不存在真正的整數(shù),整數(shù)都是用浮點(diǎn)數(shù)表示的,所以當(dāng)js解析8是發(fā)現(xiàn)后面還有.于是會(huì)把8.看成一個(gè)數(shù),這樣的話沒(méi)加.的toString當(dāng)然錯(cuò)了。所以如果寫(xiě)成下面這樣也可以

8..toString()// 正確回答2:

首先你的想法是錯(cuò)誤的.普通的 Object 對(duì)象是可以調(diào)用方法的.如

var o = {};o.toString(); // OK

但是{}.toString()卻是出現(xiàn)語(yǔ)法錯(cuò)誤,因?yàn)閧}.toString()中的{}將會(huì)被看成一個(gè)語(yǔ)句塊,而不是對(duì)象直接量.因?yàn)?JavaScript 將從左到右解析{}.toString(),當(dāng)遇到{時(shí),它將會(huì)看做一個(gè)語(yǔ)句塊的開(kāi)始,之后遇到},語(yǔ)句塊結(jié)束,在遇到.將會(huì)發(fā)生語(yǔ)法錯(cuò)誤.

而如果使用({}).toString()將可以正常工作.(注意包圍在{}兩邊的括號(hào)).因?yàn)楫?dāng)解析({}).toString()時(shí),首先遇到(,則將括號(hào)里面的部分看做表達(dá)式,得到一個(gè)空對(duì)象,因此對(duì)這個(gè)空對(duì)象執(zhí)行方法調(diào)用是合法的.

回答3:

關(guān)于 {}.toString() 這個(gè)問(wèn)題,有人已經(jīng)講得非常清楚了。是因?yàn)?js 引擎在解析時(shí),會(huì)把{}當(dāng)成塊標(biāo)記。不過(guò)我表示也很奇怪,樓主說(shuō)的問(wèn)題,我在mac上試了幾個(gè)瀏覽器都沒(méi)有問(wèn)題。

我想補(bǔ)充的是樓主的第二個(gè)問(wèn)題,為什么字符串可以直接調(diào)用方法,Number類型、Boolean類型卻不行。 我想,你應(yīng)該是哪里搞錯(cuò)了。

var num = 1.2333;var flag = true; console.log({}.toString()) //[object, object]console.log(num.toFixed(2)); //1.23console.log(flag.toString()); //’true’ 這里是字符串

這里,num是個(gè)數(shù)值字面量,flag是個(gè)布爾值,它們倆都可以調(diào)用方法。樓主對(duì)字符串了解一些,那應(yīng)該明白,基本類型的數(shù)據(jù)本來(lái)就沒(méi)有屬性和方法的,只有對(duì)象才擁有。

但是為什么我們又可以像調(diào)用對(duì)象的方法一樣來(lái)調(diào)用基本數(shù)據(jù)類型的方法呢?(如: ’a bc’.trim())

是因?yàn)椋緮?shù)據(jù)類型的值在調(diào)用方法時(shí),js 會(huì)將其轉(zhuǎn)為一個(gè)臨時(shí)包裝對(duì)象。字符串直接量就可以像字符串對(duì)象(new String(’abc’))一樣調(diào)用屬性和方法,數(shù)值字面量就可以像數(shù)值對(duì)象一樣調(diào)用屬性和方法。

當(dāng)然,這個(gè)臨時(shí)包裝對(duì)象只在代碼執(zhí)行的這一瞬間存在。方法執(zhí)行完畢,這個(gè)臨時(shí)對(duì)象就立即銷毀。

所以樓主說(shuō)的,Number, Boolean類型的值不可以調(diào)用方法是不可能的。

標(biāo)簽: JavaScript
主站蜘蛛池模板: 337p欧美 | 香蕉视频免费在线播放 | 国产91精品一区二区绿帽 | 狠狠综合久久 | 99色网站| 日本黄色a级片 | 91亚洲国产成人精品一区二区三 | 亚洲成年人网站在线观看 | 亚洲视频成人 | av永久免费 | 亚洲调教 | 人人插人人舔 | 亚洲自拍偷拍第一页 | 亚洲a精品| 精品成人av | 精品久久久久久亚洲 | av免费入口| 亚洲精品色 | 99色综合 | 九九九九国产 | 亚洲黄色在线观看 | 欧美日韩中文字幕一区二区三区 | 国产午夜三级 | 69国产在线| 91亚洲国产成人久久精品网站 | 国产日产av | 国产成人精品久久二区二区91 | 福利视频一区二区 | 毛片手机在线观看 | 欧美整片在线观看 | 国产伦精品一区二区三区视频黑人 | 日本a级大片 | 第一福利在线 | 在线日本中文字幕 | 黄色高潮 | 国产99自拍| 欧美日韩在线视频观看 | 亚洲千人斩 | 亚洲自拍天堂 | 欧美成人精品一区二区三区在线看 | 久久99久久99精品免费看小说 |