整合營銷服務商

          電腦端+手機端+微信端=數據同步管理

          免費咨詢熱線:

          IT之家學院:使用注冊表手動恢復被篡改的默認瀏覽器

          IT之家學院:使用注冊表手動恢復被篡改的默認瀏覽器

          謝IT之家網友 ytmountain的原創投稿

          國內軟件的使用環境大家想必深有體會,特別是在競爭激烈的瀏覽器市場,各路牛鬼蛇神都想霸占用戶的電腦。

          更改默認瀏覽器有很多種方法,今天為大家介紹一下使用注冊表編輯器手動改回默認瀏覽器的方法,當然也可以使用各種工具軟件。

          環境介紹:Windows 10專業版15063.483

          操作步驟:

          1、打開注冊表編輯器(regedit.msc)

          2、定位到以下子項:

          \HKEY_CURRENT_USER\Software\Classes

          3、在Classes下找到.htm/.html,這時你會看到所使用的默認瀏覽器,如圖:

          4、我的電腦使用的是firefox,所以此處顯示為FirefoxHTML。如果改為系統默認,只需雙擊鍵值并輸入Htmlfile即可。

          81.在JavaScript中創建一個真正的private方法有什么缺點?

          參考答案:每一個對象都會創建一個private方法的方法,這樣很耗費內存

          觀察下面代碼

          var Employee=function(name, company, salary) {
              this.name=name || "";
              this.company=company || "";
              this.salary=salary || 5000;
          
              // Private method
              var increaseSalary=function() {
                  this.salary=this.salary + 1000;
              };
          
              // Public method
              this.dispalyIncreasedSalary=function() {
                  increaseSlary();
                  console.log(this.salary);
              };
          };
          
          // Create Employee class object
          var emp1=new Employee("John", "Pluto", 3000);
          // Create Employee class object
          var emp2=new Employee("Merry", "Pluto", 2000);
          // Create Employee class object
          var emp3=new Employee("Ren", "Pluto", 2500);

          在這里 emp1, emp2, emp3都有一個increaseSalary私有方法的副本。

          所以我們除非必要,非常不推薦使用私有方法。


          182.JavaScript怎么清空數組?

          參考答案:

          方法1

          arrayList=[];

          直接改變arrayList所指向的對象,原對象并不改變。

          方法2

          arrayList.length=0;

          這種方法通過設置length=0 使原數組清除元素。

          方法3

          arrayList.splice(0, arrayList.length);


          183.怎么判斷一個object是否是數組(array)?

          參考答案:

          方法1

          使用 Object.prototype.toString 來判斷是否是數組

          function isArray(obj){

          return Object.prototype.toString.call( obj )==='[object Array]';
          

          }

          這里使用call來使 toString 中 this 指向 obj。進而完成判斷

          方法二

          使用 原型鏈 來完成判斷

          function isArray(obj){

          return obj.__proto__===Array.prototype;
          

          }

          基本思想是利用 實例如果是某個構造函數構造出來的那么 它的 __proto__是指向構造函數的 prototype屬性。

          方法3

          利用JQuery

          function isArray(obj){

          return $.isArray(obj)
          

          }

          JQuery isArray 的實現其實就是方法1


          184.什么是 undefined x 1 ?

          在chrome下執行如下代碼,我們就可以看到undefined x 1的身影。

          參考答案:

          var trees=["redwood", "bay", "cedar", "oak", "maple"];
          delete trees[3];
          console.log(trees);

          當我們使用 delete 操作符刪除一個數組中的元素,這個元素的位置就會變成一個占位符。打印出來就是undefined x 1。 注意如果我們使用trees[3]==='undefined × 1'返回的是 false。因為它僅僅是一種打印表示,并不是值變為undefined x 1。


          185.兩種函數聲明有什么區別?

          var foo=function() {
              // Some code
          };
          
          function bar() {
              // Some code
          };

          參考答案:

          foo的定義是在運行時。想系統說明這個問題,我們要引入變量提升的這一概念。

          我們可以運行下如下代碼看看結果。

          console.log(foo)
          console.log(bar)
          
          var foo=function() {
              // Some code
          };
          
          function bar() {
              // Some code
          };

          輸出為

          
          undefined
          function bar(){ 
              // Some code
          }; 
          

          為什么那?為什么 foo 打印出來是 undefined,而 bar打印出來卻是函數?

          JavaScript在執行時,會將變量提升。

          所以上面代碼JavaScript 引擎在實際執行時按這個順序執行。

          // foo bar的定義位置被提升
          function bar() {
              // Some code
          };
          var foo;
          
          console.log(foo)
          console.log(bar)
          
          foo=function() {
              // Some code
          };


          186.什么是跨域?跨域請求資源的方法有哪些?

          參考答案:

          
          (1)、porxy代理
          定義和用法:proxy代理用于將請求發送給后臺服務器,通過服務器來發送請求,然后將請求的結果傳遞給前端。
          實現方法:通過nginx代理;
          注意點:1、如果你代理的是https協議的請求,那么你的proxy首先需要信任該證書(尤其是自定義證書)或者忽略證書檢查,否則你的請求無法成功。
          (2)、CORS 【Cross-Origin Resource Sharing】
          定義和用法:是現代瀏覽器支持跨域資源請求的一種最常用的方式。
          使用方法:一般需要后端人員在處理請求數據的時候,添加允許跨域的相關操作。如下:
          res.writeHead(200, {
              "Content-Type": "text/html; charset=UTF-8",
              "Access-Control-Allow-Origin":'http://localhost',
              'Access-Control-Allow-Methods': 'GET, POST, OPTIONS',
              'Access-Control-Allow-Headers': 'X-Requested-With, Content-Type'
          });
          (3)、jsonp
          定義和用法:通過動態插入一個script標簽。瀏覽器對script的資源引用沒有同源限制,同時資源加載到頁面后會立即執行(沒有阻塞的情況下)。
          特點:通過情況下,通過動態創建script來讀取他域的動態資源,獲取的數據一般為json格式。
          實例如下:
          <script>
              function testjsonp(data) {
                 console.log(data.name); // 獲取返回的結果
              }
          </script>
          <script>
              var _script=document.createElement('script');
              _script.type="text/javascript";
              _script.src="http://localhost:8888/jsonp?callback=testjsonp";
              document.head.appendChild(_script);
          </script>
          缺點:
            1、這種方式無法發送post請求(這里)
            2、另外要確定jsonp的請求是否失敗并不容易,大多數框架的實現都是結合超時時間來判定。
          


          187.談談垃圾回收機制方式及內存管理

          參考答案:

          
          回收機制方式
          1、定義和用法:垃圾回收機制(GC:Garbage Collection),執行環境負責管理代碼執行過程中使用的內存。
          2、原理:垃圾收集器會定期(周期性)找出那些不在繼續使用的變量,然后釋放其內存。但是這個過程不是實時的,因為其開銷比較大,所以垃圾回收器會按照固定的時間間隔周期性的執行。
          3、實例如下:
          function fn1() {
              var obj={name: 'hanzichi', age: 10};
          }
          function fn2() {
              var obj={name:'hanzichi', age: 10};
             return obj;
          }
          var a=fn1();
          var b=fn2();
          fn1中定義的obj為局部變量,而當調用結束后,出了fn1的環境,那么該塊內存會被js引擎中的垃圾回收器自動釋放;在fn2被調用的過程中,返回的對象被全局變量b所指向,所以該塊內存并不會被釋放。
           4、垃圾回收策略:標記清除(較為常用)和引用計數。
          標記清除:
            定義和用法:當變量進入環境時,將變量標記"進入環境",當變量離開環境時,標記為:"離開環境"。某一個時刻,垃圾回收器會過濾掉環境中的變量,以及被環境變量引用的變量,剩下的就是被視為準備回收的變量。
            到目前為止,IE、Firefox、Opera、Chrome、Safari的js實現使用的都是標記清除的垃圾回收策略或類似的策略,只不過垃圾收集的時間間隔互不相同。
          引用計數:
            定義和用法:引用計數是跟蹤記錄每個值被引用的次數。
            基本原理:就是變量的引用次數,被引用一次則加1,當這個引用計數為0時,被視為準備回收的對象。
          


          188.內存管理

          參考答案:

          
          1、什么時候觸發垃圾回收?
          垃圾回收器周期性運行,如果分配的內存非常多,那么回收工作也會很艱巨,確定垃圾回收時間間隔就變成了一個值得思考的問題。
          IE6的垃圾回收是根據內存分配量運行的,當環境中的變量,對象,字符串達到一定數量時觸發垃圾回收。垃圾回收器一直處于工作狀態,嚴重影響瀏覽器性能。
          IE7中,垃圾回收器會根據內存分配量與程序占用內存的比例進行動態調整,開始回收工作。
          2、合理的GC方案:(1)、遍歷所有可訪問的對象; (2)、回收已不可訪問的對象。
          3、GC缺陷:(1)、停止響應其他操作;
          4、GC優化策略:(1)、分代回收(Generation GC);(2)、增量GC
          


          189.開發過程中遇到的內存泄露情況,如何解決的?

          參考答案:

          
          1、定義和用法:
          內存泄露是指一塊被分配的內存既不能使用,又不能回收,直到瀏覽器進程結束。C#和Java等語言采用了自動垃圾回收方法管理內存,幾乎不會發生內存泄露。我們知道,瀏覽器中也是采用自動垃圾回收方法管理內存,但由于瀏覽器垃圾回收方法有bug,會產生內存泄露。
          2、內存泄露的幾種情況:
          (1)、當頁面中元素被移除或替換時,若元素綁定的事件仍沒被移除,在IE中不會作出恰當處理,此時要先手工移除事件,不然會存在內存泄露。
          實例如下:
          <div id="myDiv">
              <input type="button" value="Click me" id="myBtn">
          </div>
          <script type="text/javascript">
              var btn=document.getElementById("myBtn");
              btn.onclick=function(){
                  document.getElementById("myDiv").innerHTML="Processing...";
              }
          </script>
          解決方法如下:
          <div id="myDiv">
              <input type="button" value="Click me" id="myBtn">
          </div>
          <script type="text/javascript">
              var btn=document.getElementById("myBtn");
              btn.onclick=function(){
              btn.onclick=null;
                  document.getElementById("myDiv").innerHTML="Processing...";
              }
          </script>
          (2)、由于是函數內定義函數,并且內部函數--事件回調的引用外暴了,形成了閉包。閉包可以維持函數內局部變量,使其得不到釋放。
          實例如下:
          function bindEvent(){
              var obj=document.createElement("XXX");
              obj.onclick=function(){
                  //Even if it's a empty function
              }
          }
          解決方法如下:
          
          function bindEvent(){
              var obj=document.createElement("XXX");
              obj.onclick=function(){
                   //Even if it's a empty function
              }
              obj=null;
          }
          


          190.IE與標準瀏覽器對事件處理的區別?

          參考答案:

          
          1.監聽
          標準
          element.addEventListener('click',observer, useCapture);
          element.removeEventListener('click',observer, useCapture);
          IE
          element.attachEvent('onclick',observer);
          element.detachEvent('onclick',observer);
          2.阻止冒泡
          標準
          event.stopPropagation();
          IE
          event.cancelBubble=true;
          3.阻止默認
          標準
          event.preventDefault();
          IE
          event.returnValue=false;
          4.event
          標準
          event
          IE8以下
          window.event
          5.觸發當前事件的源對象
          event.target  //Firefox,Chrome
          event.srcElement   //IE,Chrome
          


          191.delete用法

          參考答案:

          
          用于對象屬性的刪除
          var obj={
              name: 'Lily'
          };
          delete obj.name;
          obj.name   //undefined
          不能刪除變量、原型中的變量、函數
          


          192.如何刪除一個cookie

          參考答案:

          
          1.將時間設為當前時間往前一點。
          
          var date=newDate();
          
          date.setDate(date.getDate() - 1);//真正的刪除
          
          setDate()方法用于設置一個月的某一天。
          
          2.expires的設置
          
          document.cookie='user='+ encodeURIComponent('name')  + ';expires=' + newDate(0)
          


          193.用正則把yya yyb yyc變成yya5 yyb6 yyc7?

          參考答案:

          j=5;
          str.replace(/\w+/g, function(m) {
              return m + j++;
          });
          // function的第一參數代表匹配正則的字符串,第二個代表第一個子表達式匹配的字符串,第三個代表第二個子表達式匹配的字符串。


          194.怎么判斷兩個json對象的內容相等?

          參考答案:

          obj={
              a: 1,
              b: 2
          }
          obj2={
              a: 1,
              b: 2
          }
          obj3={
              a: 1,
              b: 2
          }
          JSON.stringify(obj)==JSON.stringify(obj2); //true
          JSON.stringify(obj)==JSON.stringify(obj3); //false


          195.獲取一個月有多少天

          今天遇到一個需求,已知月份,得到這個月的第一天和最后一天作為查詢條件查范圍內的數據

          new Date(year, month, date, hrs, min, sec),new Date 可以接受這些參數創建一個時間對象 其中當我們把 date 設置為 0 的時候,可以直接通過 getDate() 獲取到最后一天的日期然后得到我們要的最后一天

          參考答案:

          new Date(2019, 12, 0).getDate(); // 31
          new Date(2018, 2, 0).getDate(); // 28
          // 根據這個我們可以得到一個方法
          function getMonthLength(month) {
              const date=new Date(month);
              const year=date.getFullYear();
              // 月份是從 0 開始計算的
              const _month=date.getMonth() + 1;
              return new Date(year, _month, 0).getDate();
          }


          196.關于函數的 length 屬性

          參考答案:

          (()=> 1).length===0; // 輸出true

          解析:

          函數是有 length 屬性的,函數的 length 屬性就是函數參數的個數,函數的參數就是 arguments,而 arguments 也是一個類數組對象所以他是有 length 屬性的


          197.數組中字符串鍵值的處理

          在 JavaScript 中數組是通過數字進行索引,但是有趣的是他們也是對象,所以也可以包含 字符串 鍵值和屬性,但是這些不會被計算在數組的長度(length)內

          如果字符串鍵值能夠被強制類型轉換為十進制數字的話,它就會被當做數字索引來處理

          參考答案:

          const arr=[];
          arr[0]=1;
          arr['1']='嘿嘿';
          arr['cym']='cym';
          console.log(arr); // [1, '嘿嘿', cym: 'cym']
          console.log(arr.length); // 2


          198.什么是鏈表?

          答案:鏈表是一種物理存儲單元上非連續、非順序的存儲結構。鏈表由一系列結點組成,結點可以在運行時動態生成。每個結點包括兩個部分:一個是存儲數據元素的數據域,另一個是存儲下一個結點地址的指針域。


          199.鏈表的基本特征

          參考答案:

          • 每個元素除了存儲數據,需要有額外的內存存儲一個引用(地址),來指向下一個元素;
          • 每個元素占用的內存空間并不要求是連續的;
          • 往往使用鏈表的第一個節點(根節點)來代表整個鏈表;
          • 長度是可變的,隨時可以增加和刪除元素;
          • 插入和刪除元素的效率極高;
          • 由于要存儲下一個元素的地址,會增加額外的內存開銷;
          • 通過下標查詢鏈表中的某個節點,效率很低,因此鏈表的下標遍歷效率低。

          bject.fromEntries

          Object.fromEntries() 方法把鍵值對列表轉換為一個對象。

          參考:https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Object/fromEntries

          代碼案例


          主站蜘蛛池模板: 亚洲av乱码一区二区三区香蕉| 无码精品尤物一区二区三区| 一区二区三区四区电影视频在线观看| 国产福利视频一区二区| 亚洲一区无码精品色| 美女视频黄a视频全免费网站一区| 亚洲一区二区观看播放| 精品无码一区二区三区爱欲九九 | 末成年女AV片一区二区| 日韩精品无码中文字幕一区二区| 久久免费区一区二区三波多野| 国产手机精品一区二区| 精品国产乱子伦一区二区三区| 国产自产对白一区| 国内精品一区二区三区在线观看| 日本在线视频一区二区三区 | 日本精品高清一区二区| 国产精品视频分类一区| 蜜桃AV抽搐高潮一区二区| 国内精品视频一区二区三区| 青娱乐国产官网极品一区| 国产色精品vr一区区三区| 骚片AV蜜桃精品一区| 国产一区二区草草影院| 国产日韩一区二区三区在线观看 | 精品国产一区二区三区无码| 国产在线精品一区在线观看| 日本在线一区二区| 色欲AV无码一区二区三区| 日韩人妻精品一区二区三区视频| 国产在线第一区二区三区| 无码国产精品一区二区免费16 | 人妻免费一区二区三区最新| 无码日韩人妻av一区免费| 日韩免费观看一区| 精品一区二区三区四区在线| 国模一区二区三区| 国产91大片精品一区在线观看| 综合无码一区二区三区| 日韩社区一区二区三区| 国产福利日本一区二区三区|