成人无码视频,亚洲精品久久久久av无码,午夜精品久久久久久毛片,亚洲 中文字幕 日韩 无码

資訊專欄INFORMATION COLUMN

JavaScript 實(shí)現(xiàn)a 可以同時(shí) == 1 && == 2 &&

khs1994 / 2040人閱讀

摘要:先測(cè)試得到以下結(jié)果可看到正則進(jìn)行全局搜索判斷返回一個(gè)數(shù)據(jù)數(shù)組的首元素為成功匹配的文本因此每次進(jìn)行時(shí)都會(huì)返回?cái)?shù)組的首元素也就是匹配的文本由此實(shí)現(xiàn)這個(gè)功能參考自微信公眾號(hào)魚(yú)頭的海洋

參考自 微信公眾號(hào) 魚(yú)頭的Web海洋

關(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è)功能

參考自 微信公眾號(hào) 魚(yú)頭的Web海洋

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://m.hztianpu.com/yun/105774.html

相關(guān)文章

  • JavaScript中讓x==1&&x==2&&x==3等式成立演示

      要是別人問(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)化成同一類型后的值看值是否相等,...

    3403771864 評(píng)論0 收藏0
  • js實(shí)現(xiàn)音樂(lè)播放器

      這篇文章為大家講如何用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...

    3403771864 評(píng)論0 收藏0
  • JavaScript數(shù)組的9個(gè)方法示例

      今天主要就是匯總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...

    3403771864 評(píng)論0 收藏0
  • JavaScript樹(shù)結(jié)構(gòu)深度優(yōu)先算法

      什么是樹(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)的度就...

    3403771864 評(píng)論0 收藏0
  • 通過(guò)JavaScript實(shí)現(xià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...

    3403771864 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

閱讀需要支付1元查看
<