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