成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

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

khs1994 / 1989人閱讀

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

參考自 微信公眾號 魚頭的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)換為字符串

對象在轉(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)這個功能

參考自 微信公眾號 魚頭的Web海洋

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

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/105774.html

相關(guān)文章

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

      要是別人問您:如何讓 x 等于 1 且讓 x 等于 2 且讓 x 等于 3 的等式成立?  咋地,知道如何實現(xiàn)?想罵人有不  現(xiàn)在我們一起來分解思路:  我們先來講講寬松相等== 和嚴格相等 ===,這兩個都能用來判斷兩個值是否相等,但們明確上文提到的等于指的是哪一種,二者的區(qū)別看下:  (1) 這兩個基礎(chǔ)直接的區(qū)別:  (1.1) 不同類型間比較,== 比較轉(zhuǎn)化成同一類型后的值看值是否相等,...

    3403771864 評論0 收藏0
  • js實現(xiàn)音樂播放器

      這篇文章為大家講如何用JSd代碼實現(xiàn)音樂播放?! ∫魳凡シ诺闹饕猨s代碼  音樂數(shù)據(jù)的數(shù)組對象  這里不僅有前端網(wǎng)頁提供數(shù)據(jù),還有為后面的js代碼提供了音樂路徑,分享給大家?!    ablum:"海闊天空",   artist:"Beyond",   id:1,   name:"大地",   path:"musics/1...

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

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

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

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

    3403771864 評論0 收藏0
  • 通過JavaScript實現(xiàn)撲克牌游戲的示例代碼

      我們說下想要實現(xiàn),一副牌里有54張,我們可以知道 3 - 2 的牌總共有13張,這分為4個花色是 ?? ?? ?? ?? 另外加上2個大小王!第一步:形成一個數(shù)組, 就要寫一個函數(shù),利用牌數(shù)量和花色,這樣可以用來形成一個雙重循環(huán)將 number 里面的內(nèi)容 和 flower 里面的內(nèi)容 進行一個循環(huán)嵌入?最后在用 push 生成一個對象放到數(shù)組的后面?再到最后放入 大小王 ?! onstnu...

    3403771864 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<