摘要:先測(cè)試得到以下結(jié)果可看到正則進(jìn)行全局搜索判斷返回一個(gè)數(shù)據(jù)數(shù)組的首元素為成功匹配的文本因此每次進(jìn)行時(shí)都會(huì)返回?cái)?shù)組的首元素也就是匹配的文本由此實(shí)現(xiàn)這個(gè)功能參考自微信公眾號(hào)魚(yú)頭的海洋
關(guān)于這道題目:
var a = ?; if (a == 1 && b == 2 && c == 3) { console.log("yes"); }
學(xué)習(xí)了網(wǎng)上的幾種解法,如下:
首先,JS中類型轉(zhuǎn)化只有三種情況:
轉(zhuǎn)換為布爾值
轉(zhuǎn)換為數(shù)字
轉(zhuǎn)換為字符串
對(duì)象在轉(zhuǎn)換類型的時(shí)候,會(huì)執(zhí)行原生方法ToPrimitive
其算法如下:
1.如果已經(jīng)是原始類型,則返回當(dāng)前值;
2.如果需要轉(zhuǎn)字符串則先調(diào)用toString方法,如果此時(shí)是原始類型則直接返回,否則再調(diào)用valueOf方法并返回結(jié)果;
3.如果不是字符串,則先調(diào)用valueOf方法,如果此時(shí)是原始類型則直接返回,否則再調(diào)用toString方法并返回結(jié)果;
4.如果都沒(méi)有原始類型返回,則跑出TypeError類型錯(cuò)誤.
解法如下:
1.
var a = { arr: [3, 2, 1], valueOf () { console.group("valueOf"); console.log(this.arr); console.groupEnd("valueOf"); return this.arr.pop(); } } if (a == 1 && a == 2 && a == 3) { console.log("yes"); }
執(zhí)行結(jié)果:
解析:
1.運(yùn)行時(shí)會(huì)先判斷 a 的類型,此時(shí)typeof a === "object",不是原始類型,也不是字符串,因此會(huì)先執(zhí)行a.valueOf()
2.由于valueOf()被覆蓋了,因此執(zhí)行覆蓋后的valueOf(),每一次都會(huì)返回a.arr的尾元素,并更新a.arr
3.得出三次執(zhí)行結(jié)果為 1, 2, 3, 實(shí)現(xiàn)了這個(gè)功能
2.
var b = { arr: [3, 2, 1], toString () { console.group("toString"); console.log(this.arr); console.groupEnd("toString"); return this.arr.pop(); } } if (b == 1 && b == 2 && b == 3) { console.log("yes"); }
執(zhí)行結(jié)果:
解析:
1.運(yùn)行時(shí)會(huì)先判斷 b 的類型,此時(shí)typeof a === "object",不是原始類型,也不是字符串,因此會(huì)先執(zhí)行b.valueOf()
2.b.valueOf()得到的結(jié)果是 {arr: Array(3), toString: ?}, 不是原始類型. 不是字符串, 因此執(zhí)行b.toString()
3.由于toString()被覆蓋了,因此執(zhí)行覆蓋后的toString(),每一次都會(huì)返回b.arr的尾元素,并更新b.arr
3.得出三次執(zhí)行結(jié)果為 1, 2, 3, 實(shí)現(xiàn)了這個(gè)功能
3.
var c = { arr: [3, 2, 1], [Symbol.toPrimitive] () { console.group("Symbol.toPrimitive"); console.log(this.arr); console.group("Symbol.toPrimitive"); return this.arr.pop(); } } if (c == 1 && c == 2 && c == 3) { console.log("yes"); }
執(zhí)行結(jié)果:
解析:
先把上面的方法合并,測(cè)試優(yōu)先級(jí):
var d = { arr: [3, 2, 1], valueOf () { console.group("valueOf"); console.log(this.arr); console.groupEnd("valueOf"); return this.arr.pop(); }, toString () { console.group("toString"); console.log(this.arr); console.groupEnd("toString"); return this.arr.pop(); }, [Symbol.toPrimitive] () { console.group("Symbol.toPrimitive"); console.log(this.arr); console.group("Symbol.toPrimitive"); return this.arr.pop(); } } if (d == 1 && d == 2 && d == 3) { console.log("yes"); }
執(zhí)行結(jié)果:
可以看出會(huì)先執(zhí)行toPrimitive這個(gè)原生方法,但是被覆蓋了,所以執(zhí)行覆蓋后的toPrimitive()
4.
var f = { reg: /d/g, valueOf() { return this.reg.exec(123)[0] } } if (f == 1 && f == 2 && f == 3) { console.log("yes"); }
執(zhí)行結(jié)果:
解析:
1.exec() 方法在一個(gè)指定字符串中執(zhí)行一個(gè)搜索匹配。返回一個(gè)結(jié)果數(shù)組或 null。
2.如果匹配成功,exec() 方法返回一個(gè)數(shù)組,并更新正則表達(dá)式對(duì)象的屬性。返回的數(shù)組將完全匹配成功的文本作為第一項(xiàng),將正則括號(hào)里匹配成功的作為數(shù)組填充到后面。如果匹配失敗,exec() 方法返回 null。
3.先測(cè)試 var reg=/d/g; reg.exec(123);得到以下結(jié)果:
可看到正則進(jìn)行全局搜索,判斷返回一個(gè)數(shù)據(jù),數(shù)組的首元素為成功匹配的文本
4.因此每次進(jìn)行 f == 1, f == 2, f == 3 時(shí)都會(huì)返回?cái)?shù)組的首元素,也就是匹配的文本.由此實(shí)現(xiàn)這個(gè)功能
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://m.hztianpu.com/yun/105774.html
要是別人問(wèn)您:如何讓 x 等于 1 且讓 x 等于 2 且讓 x 等于 3 的等式成立? 咋地,知道如何實(shí)現(xiàn)?想罵人有不 現(xiàn)在我們一起來(lái)分解思路: 我們先來(lái)講講寬松相等== 和嚴(yán)格相等 ===,這兩個(gè)都能用來(lái)判斷兩個(gè)值是否相等,但們明確上文提到的等于指的是哪一種,二者的區(qū)別看下: (1) 這兩個(gè)基礎(chǔ)直接的區(qū)別: (1.1) 不同類型間比較,== 比較轉(zhuǎn)化成同一類型后的值看值是否相等,...
這篇文章為大家講如何用JSd代碼實(shí)現(xiàn)音樂(lè)播放?! ∫魳?lè)播放的主要js代碼 音樂(lè)數(shù)據(jù)的數(shù)組對(duì)象 這里不僅有前端網(wǎng)頁(yè)提供數(shù)據(jù),還有為后面的js代碼提供了音樂(lè)路徑,分享給大家。 { ablum:"海闊天空", artist:"Beyond", id:1, name:"大地", path:"musics/1...
今天主要就是匯總JavaScript數(shù)組的9中不同方法匯總,也將詳細(xì)示例展示給大家。 如果你還不知道數(shù)組實(shí)例中迭代方法有什么區(qū)別,可以看下面這張圖: map 代表返回一個(gè)新的數(shù)組,且數(shù)組中的每一項(xiàng)都是執(zhí)行過(guò)map提供的回調(diào)函數(shù)結(jié)果?! ?shí)現(xiàn)代碼如下: constmap=(array,fun)=>{ //類型約束 if(Object.prototype.toString.c...
什么是樹(shù) 現(xiàn)實(shí)中樹(shù)隨處可見(jiàn);在計(jì)算機(jī)世界,樹(shù)就是一種分層結(jié)構(gòu)的抽象模型?! ∪缦聢D所示: 樹(shù)結(jié)構(gòu)的可以用在很多情景,就如下圖公司的組織架構(gòu),用樹(shù)就可以表達(dá)出來(lái),如下圖: 組織架構(gòu)只是其中之一,比如族譜、省市等用樹(shù)的結(jié)構(gòu)形式展現(xiàn)是完全可以。 樹(shù)的術(shù)語(yǔ) 樹(shù)有很多的術(shù)語(yǔ),如下圖: 樹(shù):n(n≥0)個(gè)節(jié)點(diǎn)所構(gòu)成的有限集合,當(dāng)n=0時(shí),稱為空樹(shù); 節(jié)點(diǎn)的度:節(jié)點(diǎn)的子樹(shù)個(gè)數(shù),例如B節(jié)點(diǎn)的度就...
我們說(shuō)下想要實(shí)現(xiàn),一副牌里有54張,我們可以知道 3 - 2 的牌總共有13張,這分為4個(gè)花色是 ?? ?? ?? ?? 另外加上2個(gè)大小王!第一步:形成一個(gè)數(shù)組, 就要寫(xiě)一個(gè)函數(shù),利用牌數(shù)量和花色,這樣可以用來(lái)形成一個(gè)雙重循環(huán)將 number 里面的內(nèi)容 和 flower 里面的內(nèi)容 進(jìn)行一個(gè)循環(huán)嵌入?最后在用 push 生成一個(gè)對(duì)象放到數(shù)組的后面?再到最后放入 大小王 ?! onstnu...
閱讀 1359·2023-04-25 19:10
閱讀 1209·2021-09-10 10:50
閱讀 3091·2021-09-02 15:21
閱讀 1449·2019-08-30 15:52
閱讀 1742·2019-08-30 13:56
閱讀 2185·2019-08-30 12:53
閱讀 1937·2019-08-28 18:22
閱讀 2190·2019-08-26 13:47