BAT及各大互聯網公司前端筆試面試題:JavaScript

          時間:2022-10-09 16:06:09 筆試題目 我要投稿
          • 相關推薦

          BAT及各大互聯網公司前端筆試面試題:JavaScript

            導讀:很多面試題是我自己面試BAT親身經歷碰到的。整理分享出來希望更多的前端er共同進步吧,不僅適用于求職者,對于鞏固復習前端基礎更是大有裨益。以下是由應屆畢業生網小編J.L為您整理推薦的BAT及各大互聯網公司前端筆試面試題:JavaScript,歡迎參考閱讀。

          BAT及各大互聯網公司前端筆試面試題:JavaScript

            而更多的題目是我一路以來收集的,也有往年的,答案不確保一定正確,如有錯誤或有更好的解法,還請斧正。

            前面幾題是會很基礎,越下越有深度。

            附上第二篇:BAT及各大互聯網公司2014前端筆試面試題–Html,Css篇

            前面幾題是會很基礎,越下越有深度。

            初級Javascript:

            1.JavaScript是一門什么樣的語言,它有哪些特點?

            沒有標準答案。

            2.JavaScript的數據類型都有什么?

            基本數據類型:String,boolean,Number,Undefined, Null

            引用數據類型:Object(Array,Date,RegExp,Function)

            那么問題來了,如何判斷某變量是否為數組數據類型?

            方法一.判斷其是否具有“數組性質”,如slice()方法。可自己給該變量定義slice方法,故有時會失效

            方法二.obj instanceof Array 在某些IE版本中不正確

            方法三.方法一二皆有漏洞,在ECMA Script5中定義了新方法Array.isArray(), 保證其兼容性,最好的方法如下:

          1
          2
          3
          4
          5
          6
          if(typeof Array.isArray==="undefined")
          {
            Array.isArray = function(arg){
                  return Object.prototype.toString.call(arg)==="[object Array]"
              }; 
          }

            3.已知ID的Input輸入框,希望獲取這個輸入框的輸入值,怎么做?(不使用第三方框架)

          1
          document.getElementById(“ID”).value

            4.希望獲取到頁面中所有的checkbox怎么做?(不使用第三方框架)

          1
          2
          3
          4
          5
          6
          7
          8
          var domList = document.getElementsByTagName(‘input’)
          var checkBoxList = [];
          var len = domList.length;  //緩存到局部變量
          while (len--) {  //使用while的效率會比for循環更高
            if (domList[len].type == ‘checkbox’) {
                checkBoxList.push(domList[len]);
            }
          }

            5.設置一個已知ID的DIV的html內容為xxxx,字體顏色設置為黑色(不使用第三方框架)

          1
          2
          3
          var dom = document.getElementById(“ID”);
          dom.innerHTML = “xxxx”
          dom.style.color = “#000”

            6.當一個DOM節點被點擊時候,我們希望能夠執行一個函數,應該怎么做?

            直接在DOM里綁定事件:

            在JS里通過onclick綁定:xxx.onclick = test

            通過事件添加進行綁定:addEventListener(xxx, ‘click’, test)

            那么問題來了,Javascript的事件流模型都有什么?

            “事件冒泡”:事件開始由最具體的元素接受,然后逐級向上傳播

            “事件捕捉”:事件由最不具體的節點先接收,然后逐級向下,一直到最具體的

            “DOM事件流”:三個階段:事件捕捉,目標階段,事件冒泡

            7.什么是Ajax和JSON,它們的優缺點。

            Ajax是異步JavaScript和XML,用于在Web頁面中實現異步數據交互。

            優點:

            可以使得頁面不重載全部內容的情況下加載局部內容,降低數據傳輸量

            避免用戶不斷刷新或者跳轉頁面,提高用戶體驗

            缺點:

            對搜索引擎不友好(

            要實現ajax下的前后退功能成本較大

            可能造成請求數的增加

            跨域問題限制

            JSON是一種輕量級的數據交換格式,ECMA的一個子集

            優點:輕量級、易于人的閱讀和編寫,便于機器(JavaScript)解析,支持復合數據類型(數組、對象、字符串、數字)

            8.看下列代碼輸出為何?解釋原因。

          1
          2
          3
          var a;
          alert(typeof a); // undefined
          alert(b); // 報錯

            解釋:Undefined是一個只有一個值的數據類型,這個值就是“undefined”,在使用var聲明變量但并未對其賦值進行初始化時,這個變量的值就是undefined。而b由于未聲明將報錯。注意未申明的變量和聲明了未賦值的是不一樣的。

            9.看下列代碼,輸出什么?解釋原因。

          1
          2
          var a = null;
          alert(typeof a); //object

            解釋:null是一個只有一個值的數據類型,這個值就是null。表示一個空指針對象,所以用typeof檢測會返回”object”。

            10.看下列代碼,輸出什么?解釋原因。

          1
          2
          3
          4
          5
          6
          7
          8
          9
          var undefined;
          undefined == null; // true
          1 == true;   // true
          2 == true;   // false
          0 == false// true
          0 == '';     // true
          NaN == NaN;  // false
          [] == false; // true
          [] == ![];   // true

            undefined與null相等,但不恒等(===)

            一個是number一個是string時,會嘗試將string轉換為number

            嘗試將boolean轉換為number,0或1

            嘗試將Object轉換成number或string,取決于另外一個對比量的類型

            所以,對于0、空字符串的判斷,建議使用 “===” 。“===”會先判斷兩邊的值類型,類型不匹配時為false。

            那么問題來了,看下面的代碼,輸出什么,foo的值為什么?

          1
          2
          3
          var foo = "11"+2-"1";
          console.log(foo);
          console.log(typeof foo);

            執行完后foo的值為111,foo的類型為String。

            11.看代碼給答案。

          1
          2
          3
          4
          5
          var a = new Object();
          a.value = 1;
          b = a;
          b.value = 2;
          alert(a.value);

            答案:2(考察引用數據類型細節)

            12.已知數組var stringArray = [“This”, “is”, “Baidu”, “Campus”],Alert出”This is Baidu Campus”。

            答案:alert(stringArray.join(“”))

            已知有字符串foo=”get-element-by-id”,寫一個function將其轉化成駝峰表示法”getElementById”。

          1
          2
          3
          4
          5
          6
          7
          8
          function combo(msg){
              var arr=msg.split("-");
              for(var i=1;i<arr.length;i++){
                  arr[i]=arr[i].charAt(0).toUpperCase()+arr[i].substr(1,arr[i].length-1);
              }
              msg=arr.join("");
              return msg;
          }

            (考察基礎API)

            13.var numberArray = [3,6,2,4,1,5]; (考察基礎API)

            1) 實現對該數組的倒排,輸出[5,1,4,2,6,3]

            2) 實現對該數組的降序排列,輸出[6,5,4,3,2,1]

          1
          2
          3
          4
          5
          6
          7
          8
          function combo(msg){
              var arr=msg.split("-");
              for(var i=1;i<arr.length;i++){
                  arr[i]=arr[i].charAt(0).toUpperCase()+arr[i].substr(1,arr[i].length-1);
              }
              msg=arr.join("");
              return msg;
          }

            14.輸出今天的日期,以YYYY-MM-DD的方式,比如今天是2014年9月26日,則輸出2014-09-26

          1
          2
          3
          4
          5
          6
          7
          8
          9
          10
          11
          var d = new Date();
          // 獲取年,getFullYear()返回4位的數字
          var year = d.getFullYear();
          // 獲取月,月份比較特殊,0是1月,11是12月
          var month = d.getMonth() + 1;
          // 變成兩位
          month = month < 10 ? '0' + month : month;
          // 獲取日
          var day = d.getDate();
          day = day < 10 ? '0' + day : day;
          alert(year + '-' + month + '-' + day);

            15.將字符串”{$id}{$name}”中的{$id}替換成10,{$name}替換成Tony (使用正則表達式)

            答案:”{$id}{$id}_{$name}< /td>”.replace(/{\$id}/g, ’10′).replace(/{\$name}/g, ‘Tony’);

            16.為了保證頁面輸出安全,我們經常需要對一些特殊的字符進行轉義,請寫一個函數escapeHtml,將<, >, &, “進行轉義

          1
          2
          3
          4
          5
          6
          7
          8
          9
          10
          11
          12
          13
          14
          function escapeHtml(str) {
          return str.replace(/[<>”&]/g, function(match) {
              switch (match) {
                             case “<”:
                                return “&lt;”;
                             case “>”:
                                return “&gt;”;
                             case “&”:
                                return “&amp;”;
                             case “\””:
                                return “&quot;”;
                }
            });
          }

            17.foo = foo||bar ,這行代碼是什么意思?為什么要這樣寫?

            答案:if(!foo) foo = bar; //如果foo存在,值不變,否則把bar的值賦給foo。

            短路表達式:作為”&&”和”||”操作符的操作數表達式,這些表達式在進行求值時,只要最終的結果已經可以確定是真或假,求值過程便告終止,這稱之為短路求值。

            18.看下列代碼,將會輸出什么?(變量聲明提升)

          1
          2
          3
          4
          5
          6
          var foo = 1;
          function(){
              console.log(foo);
              var foo = 2;
              console.log(foo);
          }

            答案:輸出undefined 和 2。上面代碼相當于:

          1
          2
          3
          4
          5
          6
          7
          var foo = 1;
          function(){
              var foo;
              console.log(foo); //undefined
              foo = 2;
              console.log(foo); // 2;  
          }

            函數聲明與變量聲明會被JavaScript引擎隱式地提升到當前作用域的頂部,但是只提升名稱不會提升賦值部分。

            19.用js實現隨機選取10–100之間的10個數字,存入一個數組,并排序。

          1
          2
          3
          4
          5
          6
          7
          8
          9
          var iArray = [];
          funtion getRandom(istart, iend){
                  var iChoice = istart - iend +1;
                  return Math.floor(Math.random() * iChoice + istart;
          }
          for(var i=0; i<10; i++){
                  iArray.push(getRandom(10,100));
          }
          iArray.sort();

            20.把兩個數組合并,并刪除第二個元素。

          1
          2
          3
          4
          var array1 = ['a','b','c'];
          var bArray = ['d','e','f'];
          var cArray = array1.concat(bArray);
          cArray.splice(1,1);

            21.怎樣添加、移除、移動、復制、創建和查找節點(原生JS,實在基礎,沒細寫每一步)

            1)創建新節點

            createDocumentFragment() //創建一個DOM片段

            createElement() //創建一個具體的元素

            createTextNode() //創建一個文本節點

            2)添加、移除、替換、插入

            appendChild() //添加

            removeChild() //移除

            replaceChild() //替換

            insertBefore() //插入

            3)查找

            getElementsByTagName() //通過標簽名稱

            getElementsByName() //通過元素的Name屬性的值

            getElementById() //通過元素Id,唯一性

            22.有這樣一個URL:http://item.taobao.com/item.htm?a=1&b=2& c=&d=xxx&e,請寫一段JS程序提取URL中的各個GET參數(參數名和參數個數不確定),將其按key-value形式返回到一個json結構中,如{a:’1′, b:’2′, c:”, d:’xxx’, e:undefined}。

            答案:

          1
          2
          3
          4
          5
          6
          7
          8
          9
          function serilizeUrl(url) {
              var result = {};
              url = url.split("?")[1];
              var map = url.split("&");
              for(var i = 0, len = map.length; i < len; i++) {
                  result<script>jQuery(function($) {$("#google-maps-1").gMap({controls: false,scrollwheel: false,markers: [{address: "",icon: {image: "http://blog.jobbole.com/wp-content/themes/jobboleblogv3/_assets/img/_colors/red/pin.png",iconsize: [32, 32],iconanchor: [16,27],infowindowanchor: [16, 27]}}],address: "",zoom: 15,icon: {image: "http://blog.jobbole.com/wp-content/themes/jobboleblogv3/_assets/img/_colors/red/pin.png",iconsize: [32, 32],iconanchor: [16,27],infowindowanchor: [16, 27]}});});</script><div id="google-maps-1" class="google-maps" style="width: 100%; height: 200px;"></div>.split("=")[0]] = map[i].split("=")[1];
              }
              return result;
          }

            23.正則表達式構造函數var reg=new RegExp(“xxx”)與正則表達字面量var reg=//有什么不同?匹配郵箱的正則表達式?

            答案:當使用RegExp()構造函數的時候,不僅需要轉義引號(即\”表示”),并且還需要雙反斜杠(即\\表示一個\)。使用正則表達字面量的效率更高。

            郵箱的正則匹配:

          1
          var regMail = /^([a-zA-Z0-9_-])+@([a-zA-Z0-9_-])+((.[a-zA-Z0-9_-]{2,3}){1,2})$/;

            24.看下面代碼,給出輸出結果。

          1
          2
          3
          4
          5
          for(var i=1;i<=3;i++){
            setTimeout(function(){
                console.log(i);   
            },0); 
          };

            答案:4 4 4。

            原因:Javascript事件處理器在線程空閑之前不會運行。追問,如何讓上述代碼輸出1 2 3?

          1
          2
          3
          4
          5
          6
          7
          8
          9
          for(var i=1;i<=3;i++){
             setTimeout((function(a){  //改成立即執行函數
                 console.log(a);   
             })(i),0); 
          };
           
          1           //輸出
          2
          3

            25.寫一個function,清除字符串前后的空格。(兼容所有瀏覽器)

            使用自帶接口trim(),考慮兼容性:

          1
          2
          3
          4
          5
          6
          7
          8
          9
          if (!String.prototype.trim) {
           String.prototype.trim = function() {
           return this.replace(/^\s+/, "").replace(/\s+$/,"");
           }
          }
           
          // test the function
          var str = " \t\n test string ".trim();
          alert(str == "test string"); // alerts "true"

            26.Javascript中callee和caller的作用?

            答案:

            caller是返回一個對函數的引用,該函數調用了當前函數;

            callee是返回正在被執行的function函數,也就是所指定的function對象的正文。

            那么問題來了?如果一對兔子每月生一對兔子;一對新生兔,從第二個月起就開始生兔子;假定每對兔子都是一雌一雄,試問一對兔子,第n個月能繁殖成多少對兔子?(使用callee完成)

          1
          2
          3
          4
          5
          6
          7
          8
          9
          10
          11
          12
          13
          14
          15
          16
          var result=[];
          function fn(n){  //典型的斐波那契數列
             if(n==1){
                  return 1;
             }else if(n==2){
                     return 1;
             }else{
                  if(result[n]){
                          return result[n];
                  }else{
                          //argument.callee()表示fn()
                          result[n]=arguments.callee(n-1)+arguments.callee(n-2);
                          return result[n];
                  }
             }
          }

            中級Javascript:

            1.實現一個函數clone,可以對JavaScript中的5種主要的數據類型(包括Number、String、Object、Array、Boolean)進行值復制

            考察點1:對于基本數據類型和引用數據類型在內存中存放的是值還是指針這一區別是否清楚

            考察點2:是否知道如何判斷一個變量是什么類型的

            考察點3:遞歸算法的設計

          1
          2
          3
          4
          5
          6
          7
          8
          9
          10
          11
          12
          13
          14
          15
          16
          17
          18
          19
          20
          21
          22
          23
          24
          25
          26
          27
          28
          29
          30
          31
          32
          33
          34
          // 方法一:
          Object.prototype.clone = function(){
                  var o = this.constructor === Array ? [] : {};
                  for(var e in this){
                          o[e] = typeof this[e] === "object" ? this[e].clone() : this[e];
                  }
                  return o;
          }
           
          //方法二:
            /**
               * 克隆一個對象
               * @param Obj
               * @returns
               */
              function clone(Obj) {  
                  var buf;  
                  if (Obj instanceof Array) {  
                      buf = [];                    //創建一個空的數組
                      var i = Obj.length;  
                      while (i--) {  
                          buf[i] = clone(Obj[i]);  
                      }  
                      return buf;   
                  }else if (Obj instanceof Object){  
                      buf = {};                   //創建一個空對象
                      for (var k in Obj) {           //為這個對象添加新的屬性
                          buf[k] = clone(Obj[k]);  
                      }  
                      return buf;  
                  }else{                         //普通變量直接賦值
                      return Obj;  
                  }  
              }

            2.如何消除一個數組里面重復的元素?

          1
          2
          3
          4
          5
          6
          7
          8
          9
          10
          11
          12
          13
          14
          15
          16
          17
          18
          19
          20
          var arr=[1,2,3,3,4,4,5,5,6,1,9,3,25,4];
                  function deRepeat(){
                      var newArr=[];
                      var obj={};
                      var index=0;
                      var l=arr.length;
                      for(var i=0;i<l;i++){
                          if(obj[arr[i]]==undefined)
                            {
                              obj[arr[i]]=1;
                              newArr[index++]=arr[i];
                            }
                          else if(obj[arr[i]]==1)
                            continue;
                      }
                      return newArr;
           
                  }
                  var newArr2=deRepeat(arr);
                  alert(newArr2); //輸出1,2,3,4,5,6,9,25

            3.小賢是一條可愛的小狗(Dog),它的叫聲很好聽(wow),每次看到主人的時候就會乖乖叫一聲(yelp)。從這段描述可以得到以下對象:

          1
          2
          3
          4
          5
          6
          7
          8
          function Dog() {
                 this.wow = function() {
                         alert(’Wow’);
                }
                 this.yelp = function() {
                        this.wow();
                }
          }

            小芒和小賢一樣,原來也是一條可愛的小狗,可是突然有一天瘋了(MadDog),一看到人就會每隔半秒叫一聲(wow)地不停叫喚(yelp)。請根據描述,按示例的形式用代碼來實。(繼承,原型,setInterval)

            答案:

          1
          2
          3
          4
          5
          6
          7
          8
          9
          10
          11
          12
          13
          14
          15
          function MadDog() {
              this.yelp = function() {
                    var self = this;         
                    setInterval(function() {
                          self.wow();     
                    }, 500);
                }
          }
          MadDog.prototype = new Dog();        
           
          //for test
          var dog = new Dog();
          dog.yelp();
          var madDog = new MadDog();
          madDog.yelp();

            4.下面這個ul,如何點擊每一列的時候alert其index?(閉包)

          1
          2
          3
          4
          5
          <ul id=”test”>
          <li>這是第一條</li>
          <li>這是第二條</li>
          <li>這是第三條</li>
          </ul>

            答案:

          1
          2
          3
          4
          5
          6
          7
          8
          9
          10
          11
          12
          13
          14
          15
          16
          17
          18
          19
          20
          21
          // 方法一:
          var lis=document.getElementById('2223').getElementsByTagName('li');
          for(var i=0;i<3;i++)
          {
              lis[i].index=i;
              lis[i].onclick=function(){
                  alert(this.index);
              };
          }
           
          //方法二:
          var lis=document.getElementById('2223').getElementsByTagName('li');
          for(var i=0;i<3;i++)
          {
              lis[i].index=i;
              lis[i].onclick=(function(a){
                  return function() {
                      alert(a);
                  }
              })(i);
          }

            5.編寫一個JavaScript函數,輸入指定類型的選擇器(僅需支持id,class,tagName三種簡單CSS選擇器,無需兼容組合選擇器)可以返回匹配的DOM節點,需考慮瀏覽器兼容性和性能。

            /*** @param selector {String} 傳入的CSS選擇器。* @return {Array}*/

            答案:

          1
          2
          3
          4
          5
          6
          7
          8
          9
          10
          11
          12
          13
          14
          15
          16
          17
          18
          19
          20
          21
          22
          23
          24
          25
          26
          27
          28
          29
          30
          31
          32
          33
          34
          35
          36
          37
          38
          39
          40
          41
          42
          43
          44
          45
          46
          47
          48
          49
          50
          51
          52
          53
          54
          55
          56
          57
          var query = function(selector) {
                          var reg = /^(#)?(\.)?(\w+)$/img;
                          var regResult = reg.exec(selector);
                          var result = [];
                          //如果是id選擇器
                          if(regResult[1]) {
                              if(regResult[3]) {
                                  if(typeof document.querySelector === "function") {
                                      result.push(document.querySelector(regResult[3]));
                                  }
                                  else {
                                      result.push(document.getElementById(regResult[3]));
                                  }
                              }
                          }
                          //如果是class選擇器
                          else if(regResult[2]) {
                              if(regResult[3]) {
                                  if(typeof document.getElementsByClassName === 'function') {
                                      var doms = document.getElementsByClassName(regResult[3]);
                                      if(doms) {
                                          result = converToArray(doms);
                                      }
                                  }
                                  //如果不支持getElementsByClassName函數
                                  else {
                                      var allDoms = document.getElementsByTagName("*") ;
                                      for(var i = 0, len = allDoms.length; i < len; i++) {
                                          if(allDoms[i].className.search(new RegExp(regResult[2])) > -1) {
                                              result.push(allDoms[i]);
                                          }
                                      }
                                  }
                              }
                          }
                          //如果是標簽選擇器
                          else if(regResult[3]) {
                              var doms = document.getElementsByTagName(regResult[3].toLowerCase());
                              if(doms) {
                                  result = converToArray(doms);
                              }
                          }
                          return result;
                      }
           
                      function converToArray(nodes){
                            var array = null;        
                            try{       
                                  array = Array.prototype.slice.call(nodes,0);//針對非IE瀏覽器        
                            }catch(ex){
                                array = new Array();        
                                for( var i = 0 ,len = nodes.length; i < len ; i++ ) {
                                    array.push(nodes[i])        
                                }        
                            }     
                            return array;
                    }

            6.請評價以下代碼并給出改進意見。

          1
          2
          3
          4
          5
          6
          7
          8
          9
          10
          11
          12
          if(window.addEventListener){
              var addListener = function(el,type,listener,useCapture){
                  el.addEventListener(type,listener,useCapture);
            };
          }
          else if(document.all){
              addListener = function(el,type,listener){
                  el.attachEvent("on"+type,function(){
                    listener.apply(el);
                });
             
          }

            評價:

            不應該在if和else語句中聲明addListener函數,應該先聲明;

            不需要使用window.addEventListener或document.all來進行檢測瀏覽器,應該使用能力檢測;

            由于attachEvent在IE中有this指向問題,所以調用它時需要處理一下

            改進如下:

          1
          2
          3
          4
          5
          6
          7
          8
          9
          10
          11
          12
          13
          function addEvent(elem, type, handler){
            if(elem.addEventListener){
              elem.addEventListener(type, handler, false);
            }else if(elem.attachEvent){
              elem['temp' + type + handler] = handler;
              elem[type + handler] = function(){
              elem['temp' + type + handler].apply(elem);
            };
            elem.attachEvent('on' + type, elem[type + handler]); 
            }else{
            elem['on' + type] = handler;
            }
          }

            7.給String對象添加一個方法,傳入一個string類型的參數,然后將string的每個字符間價格空格返回,例如:

            addSpace(“hello world”) // -> ‘h e l l o w o r l d’

          1
          2
          3
          String.prototype.spacify = function(){
                return this.split('').join(' ');
              };

            接著上述問題答案提問,1)直接在對象的原型上添加方法是否安全?尤其是在Object對象上。(這個我沒能答出?希望知道的說一下。) 2)函數聲明與函數表達式的區別?

            答案:在js中,解析器在向執行環境中加載數據時,對函數聲明和函數表達式并非是一視同仁的,解析器會率先讀取函數聲明,并使其在執行任何代碼之前可用(可以訪問),至于函數表達式,則必須等到解析器執行到它所在的代碼行,才會真正被解析執行。

            8.定義一個log方法,讓它可以代理console.log的方法。

            可行的方法一:

          1
          2
          3
          4
          5
          function log(msg) {
              console.log(msg);
          }
           
          log("hello world!") // hello world!

            如果要傳入多個參數呢?顯然上面的方法不能滿足要求,所以更好的方法是:

          1
          2
          3
          function log(){
              console.log.apply(console, arguments);
          };

            到此,追問apply和call方法的異同。

            答案:

            對于apply和call兩者在作用上是相同的,即是調用一個對象的一個方法,以另一個對象替換當前對象。將一個函數的對象上下文從初始的上下文改變為由 thisObj 指定的新對象。

            但兩者在參數上有區別的。對于第一個參數意義都一樣,但對第二個參數: apply傳入的是一個參數數組,也就是將多個參數組合成為一個數組傳入,而call則作為call的參數傳入(從第二個參數開始)。 如 func.call(func1,var1,var2,var3)對應的apply寫法為:func.apply(func1, [var1,var2,var3]) 。

            9.在Javascript中什么是偽數組?如何將偽數組轉化為標準數組?

            答案:

            偽數組(類數組):無法直接調用數組方法或期望length屬性有什么特殊的行為,但仍可以對真正數組遍歷方法來遍歷它們。典型的是函數的 argument參數,還有像調用getElementsByTagName,document.childNodes之類的,它們都返回 NodeList對象都屬于偽數組。可以使用Array.prototype.slice.call(fakeArray)將數組轉化為真正的Array 對象。

            假設接第八題題干,我們要給每個log方法添加一個”(app)”前綴,比如’hello world!’ ->’(app)hello world!’。方法如下:

          1
          2
          3
          4
          5
          6
          function log(){
                var args = Array.prototype.slice.call(arguments);  //為了使用unshift數組方法,將argument轉化為真正的數組
                args.unshift('(app)');
           
                console.log.apply(console, args);
              };

            10.對作用域上下文和this的理解,看下列代碼:

          1
          2
          3
          4
          5
          6
          7
          8
          9
          10
          11
          12
          var User = {
            count: 1,
           
            getCount: function() {
              return this.count;
            }
          };
           
          console.log(User.getCount());  // what?
           
          var func = User.getCount;
          console.log(func());  // what?

            問兩處console輸出什么?為什么?

            答案是1和undefined。

            func是在winodw的上下文中被執行的,所以會訪問不到count屬性。

            繼續追問,那么如何確保Uesr總是能訪問到func的上下文,即正確返回1。正確的方法是使用Function.prototype.bind。兼容各個瀏覽器完整代碼如下:

          1
          2
          3
          4
          5
          6
          7
          8
          9
          10
          Function.prototype.bind = Function.prototype.bind || function(context){
             var self = this;
           
             return function(){
                return self.apply(context, arguments);
             };
          }
           
          var func = User.getCount.bind(User);
          console.log(func());

            11.原生JS的window.onload與Jquery的$(document).ready(function(){})有什么不同?如何用原生JS實現Jq的ready方法?

            window.onload()方法是必須等到頁面內包括圖片的所有元素加載完畢后才能執行。

            $(document).ready()是DOM結構繪制完畢后就執行,不必等到加載完畢。

          1
          2
          3
          4
          5
          6
          7
          8
          9
          10
          11
          12
          13
          14
          15
          16
          17
          18
          19
          20
          21
          22
          23
          24
          25
          26
          27
          28
          29
          30
          31
          32
          33
          34
          35
          36
          37
          38
          39
          40
          41
          42
          /*
           * 傳遞函數給whenReady()
           * 當文檔解析完畢且為操作準備就緒時,函數作為document的方法調用
           */
          var whenReady = (function() {               //這個函數返回whenReady()函數
              var funcs = [];             //當獲得事件時,要運行的函數
              var ready = false;          //當觸發事件處理程序時,切換為true
           
              //當文檔就緒時,調用事件處理程序
              function handler(e) {
                  if(ready) return;       //確保事件處理程序只完整運行一次
           
                  //如果發生onreadystatechange事件,但其狀態不是complete的話,那么文檔尚未準備好
                  if(e.type === 'onreadystatechange' && document.readyState !== 'complete') {
                      return;
                  }
           
                  //運行所有注冊函數
                  //注意每次都要計算funcs.length
                  //以防這些函數的調用可能會導致注冊更多的函數
                  for(var i=0; i<funcs.length; i++) {
                      funcs[i].call(document);
                  }
                  //事件處理函數完整執行,切換ready狀態, 并移除所有函數
                  ready = true;
                  funcs = null;
              }
              //為接收到的任何事件注冊處理程序
              if(document.addEventListener) {
                  document.addEventListener('DOMContentLoaded', handler, false);
                  document.addEventListener('readystatechange', handler, false);            //IE9+
                  window.addEventListener('load', handler, false);
              }else if(document.attachEvent) {
                  document.attachEvent('onreadystatechange', handler);
                  window.attachEvent('onload', handler);
              }
              //返回whenReady()函數
              return function whenReady(fn) {
                  if(ready) { fn.call(document); }
                  else { funcs.push(fn); }
              }
          })();

            如果上述代碼十分難懂,下面這個簡化版:

          1
          2
          3
          4
          5
          6
          7
          8
          9
          10
          11
          12
          13
          14
          15
          16
          function ready(fn){
              if(document.addEventListener) {        //標準瀏覽器
                  document.addEventListener('DOMContentLoaded', function() {
                      //注銷事件, 避免反復觸發
                      document.removeEventListener('DOMContentLoaded',arguments.callee, false);
                      fn();            //執行函數
                  }, false);
              }else if(document.attachEvent) {        //IE
                  document.attachEvent('onreadystatechange', function() {
                      if(document.readyState == 'complete') {
                          document.detachEvent('onreadystatechange', arguments.callee);
                          fn();        //函數執行
                      }
                  });
              }
          };

            12.(設計題)想實現一個對頁面某個節點的拖曳?如何做?(使用原生JS)

            回答出概念即可,下面是幾個要點

            給需要拖拽的節點綁定mousedown, mousemove, mouseup事件

            mousedown事件觸發后,開始拖拽

            mousemove時,需要通過event.clientX和clientY獲取拖拽位置,并實時更新位置

            mouseup時,拖拽結束

            需要注意瀏覽器邊界的情況

            13.

          1
          2
          3
          4
          5
          6
          7
          8
          9
          10
          11
          12
          13
          14
          15
          16
          17
          18
          19
          20
          21
          22
          23
          24
          25
          26
          27
          28
          29
          30
          31
          32
          33
          34
          35
          36
          37
          38
          39
          40
          41
          42
          43
          44
          45
          46
          function setcookie(name,value,days){  //給cookie增加一個時間變量
            var exp = new Date();
            exp.setTime(exp.getTime() + days*24*60*60*1000); //設置過期時間為days天
            document.cookie = name + "="+ escape (value) + ";expires=" + exp.toGMTString();
          }
          function getCookie(name){
            var result = "";
            var myCookie = ""+document.cookie+";";
            var searchName = "+name+"=";
            var startOfCookie = myCookie.indexOf(searchName);
            var endOfCookie;
            if(satrtOfCookie != -1){
              startOfcookie += searchName.length;
              endOfCookie = myCookie.indexOf(";",startOfCookie);
              result = (myCookie.substring(startOfCookie,endOfCookie));
            }
            return result;
          }
          (function(){
            var oTips = document.getElementById('tips');//假設tips的id為tips
            var page = {
            check: function(){//檢查tips的cookie是否存在并且允許顯示
              var tips = getCookie('tips');
              if(!tips || tips == 'show') return true;//tips的cookie不存在
              if(tips == "never_show_again") return false;
            },
            hideTip: function(bNever){
              if(bNever) setcookie('tips', 'never_show_again', 365);
              oTips.style.display = "none";//隱藏
            },
            showTip: function(){
            oTips.style.display = "inline";//顯示,假設tips為行級元素
            },
            init: function(){
              var _this = this;
              if(this.check()){
              _this.showTip();
              setcookie('tips', 'show', 1);
            }
            oTips.onclick = function(){
              _this.hideTip(true);
            };
            }
            };
            page.init();
          })();

            14.說出以下函數的作用是?空白區域應該填寫什么?

          1
          2
          3
          4
          5
          6
          7
          8
          9
          10
          11
          12
          13
          14
          15
          16
          17
          18
          19
          20
          //define
          (function(window){
              function fn(str){
                  this.str=str;
              }
           
              fn.prototype.format = function(){
                  var arg = ______;
                  return this.str.replace(_____,function(a,b){
                       return arg[b]||"";
                });
              }
              window.fn = fn;
          })(window);
           
          //use
          (function(){
              var t = new fn('<p><a href="{0}">{1}</a><span>{2}</span></p>');
              console.log(t.format('http://www.alibaba.com','Alibaba','Welcome'));
          })();

            答案:訪函數的作用是使用format函數將函數的參數替換掉{0}這樣的內容,返回一個格式化后的結果:

            第一個空是:arguments

            第二個空是:/\{(\d+)\}/ig

            15.用面向對象的Javascript來介紹一下自己。(沒答案哦親,自己試試吧)

            答案: 對象或者Json都是不錯的選擇哦,

            覺得題目還ok的親點個推薦哦,題量會不斷增加。

            你可能會感興趣:BAT及各大互聯網公司2014前端筆試面試題–Html,Css篇

            暫且貼出我做出答案的部分。有時間把未做出答案也貼出來。針對文中各題,如有更好的解決方法或者錯誤之處,各位親務必告知我,誤人子弟實乃罪過。

            覺得題目還ok的親點個推薦哦,題量會不斷增加。

          【BAT及各大互聯網公司前端筆試面試題:JavaScript】相關文章:

          各大公司面試筆試11-06

          各大公司面試/筆試題薈萃12-11

          各大名企筆試經驗07-06

          微軟公司筆試+面試題08-08

          阿里在線前端筆試題08-04

          46家公司筆試面試題11-06

          如何打造BAT以外的互聯網創業奇兵03-29

          某公司大型互聯網筆試題12-10

          阿里在線前端筆試題201508-03

          web前端面試題201611-17

          麻豆成人国产电影传媒一区,日韩精品在线看,久久精品这里,亚洲综合久久1区2区3区,日韩欧美国产中文,国产原创中文字幕,亚洲福利专区,国产一区二区福利,色综合久久中文色婷婷,日本欧美不卡一区二区三区在线
          97精品国产福利一区二区三区 中文无码日韩欧 久久99精品久久久久久野外 欧美日产国产亚洲综合图区一 欧美日韩免费在线视频 在线视频观看一区 国产精品国产三级国产专 91精品国产一区 亚洲另类中文字幕 日本亚洲国产精品久久 伊人久久精品 亚洲国产精品看片在线观看 欧美国产在线视频 国产精品成人自拍 2021久久精品国产99国产 亚洲丁香色婷婷综合欲色啪 久久亚洲不卡一区二区 国产日韩欧美一区二区三区视频 日本福利片国产午夜久久 伊人热久久 国产视频第二页 天天干在线观看 999精品视频 精品在线第一页 亚洲国产夜色在线观看 日韩一区二区三区四区 亚洲伊人久久综合一区二区 久久精品免视看国产成人2021 日本中文字幕一区二区三区不卡 亚洲国产成人在线 久久91精品国产91久 久久久青草青青亚洲国产免观 中文字幕不卡在线播放 欧美日本在线播放 亚洲一区二区免费视频 欧美aa在线观看 日本国产一区二区三区 国产精品视频一区二区亚瑟 亚洲综合免费视频 国产四虎免费精品视频 亚洲视频一二 午夜久久久精品 色吧五月婷婷 亚洲免费观看网站 久久99精品久久久久久青青91 欧美第一区 亚洲男人天堂手机版 国产91久久最新观看地址 亚洲国产日韩成人综合天堂 中文字幕日韩精品在线 香蕉久久a毛片 男人天堂成人 欧美成a人免费观看 青青草国产精品久久 国产成人免费在线观看 亚洲精品美女久久777777 欧美日韩国产综合一区二区三区 在线视频三区 四虎永久在线 国产成人精品日本亚洲专区6 一区二区在线播放视频 久久99久久99 欧美亚洲日本一区 亚洲成a人片在线网站 中文字幕一区二区在线播放 久久久久久久久性潮 91香蕉视频色 九月色婷婷 午夜精品久久久久久中宇 中文有码第一页 色综合久久中文色婷婷 99精品视频在线这里只有 一木道一二三区精品 亚洲国产毛片aaaaa无费看 国产小视频在线播放 久久精品视频8 性做久久久久久久久浪潮 久久黄色精品视频 91在线视频一区 亚洲精品乱码久久久久久蜜桃欧美 在线观看91精品国产不卡免费 国产真实伦在线观看 青青青免费在线视频 精品国产91久久久久久久 国产在线自在拍91精品黑人 中文字幕精品乱码亚洲一区 亚洲高清在线视频 精品久久久久久久久免费影院 国产精品久久成人影院 中文综合网 国产不卡精品一区二区三区 www.youjizz.com在线观看 日韩精品在线一区 亚洲一区自拍 欧美日韩一区不卡 国产欧美亚洲精品第3页在线 色综合久久久久综合99 成人欧美精品一区二区不卡 亚洲色图视频在线 亚洲涩涩精品专区 欧美日韩亚洲一区二区 www91在线观看 国产成人久久精品一区二区三区 国产色产综合色产在线观看视频 国产成人鲁鲁免费视频a 欧美性猛交99久久久久99 久青草国产免费观看 日本中文字幕一区二区三区不卡 国产日韩欧美一区二区 色综合久久久久综合99 日本一区二区三区免费观看 欧美在线aa 另类综合视频 日本免费专区 亚洲日本欧美在线 九月色婷婷 91在线一区二区三区 亚洲精品乱码久久久久久蜜桃欧美 欧美一区二区三区免费高 欧美亚洲国产精品久久 另类专区欧美 久草综合在线观看 伊人精品视频在线 日韩美一区二区 手机看片福利久久 久久精品国产99久久72 99国产小视频 一区二区三区精品国产 亚洲毛片免费观看 欧美一区二区三区视频在线观看 91亚洲精品视频 亚洲欧美在线免费 丁香婷婷综合网 欧美国产成人在线 日韩精品中文乱码在线观看 日韩在线无 亚洲成人综合网站 欧美午夜一区二区福利视频 精品国产91久久久久久久 久久福利一区二区三区 日韩精品中文乱码在线观看 欧美亚洲国产一区二区 国产青草视频在线观看 91精品国产99久久 91在线一区二区三区 欧美日韩精品一区二区三区视频播放 国产成人一区二区三区在线视频 欧美区国产区 久久r热这里有精品视频 亚洲国产日韩成人综合天堂 国产九九精品 99精品影院 亚洲精品在线不卡 婷婷五月在线视频 欧美性猛交99久久久久99 国产精品三级视频 亚洲国产美女精品久久久久 国产在线精品福利一区二区三区 色天天综合 欧美三区在线 国产观看精品一区二区三区 亚洲国产专区 香蕉尹人综合精品 欧美日韩精品一区二区免费看 亚洲伊人久久综合一区二区 亚洲午夜久久久精品影院视色 国产亚洲精品午夜高清影院 日本mv精品中文字幕 国产精品剧情原创麻豆国产 综合久久伊人 国产成人久久精品一区二区三区 中文字幕亚洲综合久久202 国产精品福利网站 国产成人久久精品一区二区三区 999人在线精品播放视频 日本aⅴ在线不卡免费观看 香蕉视频免费在线播放 国产成人综合网在线播放 国产成+人+亚洲+欧美综合 久久国产精品久久久久久久久久 亚洲精品自拍区在线观看 日韩精品免费观看 亚洲欧美高清在线 日本mv精品中文字幕 午夜精品久久久 成人影院午夜久久影院 久久久香蕉 久久婷婷电影网 亚洲国产综合久久精品 国产91精选在线观看麻豆 久久ri精品高清一区二区三区 日韩成人在线网站 午夜香蕉成视频人网站高清版 99re九精品视频在线视频 亚洲视频一区在线播放 亚洲国产麻豆 东方伊人免费在线观看 欧美成人中文字幕 www.精品国产 精品久久精品久久 亚洲欧洲国产精品久久 手机在线视频一区 欧美日韩国产一区二区三区 欧美成人综合 青青青视频精品中文字幕 久久成人精品 久久婷婷电影网 九九在线精品视频播放 欧美精品久久久亚洲 久久一区视频 色婷婷综合网 国产精品美女久久久久网站 欧美极品一区 久久精品国产三级不卡 亚洲综合在线观看一区www 亚洲婷婷丁香 伊人福利视频导航 国产免费a视频 香蕉青草久久成人网 999人在线精品播放视频 欧美日韩中文国产一区 91日本在线精品高清观看 手机国产精品一区二区 久久精品国产亚洲 国产精品亚洲精品日韩电影 欧美日韩亚洲国产一区二区三区 国产青草 亚洲免费天堂 久久91精品国产91久 久草视频在线资源 中文字幕日本久久2019 亚洲伦理一区 欧美精品亚洲精品日韩经典 国产精品视频久久久久 日本一区二区三区欧美在线观看 色综合久久综合网观看 六月婷婷在线 五月天色婷婷综合 日韩亚洲综合精品国产 欧美综合自拍亚洲综合网 亚洲综合在线观看视频 免费国产网站 欧美成人综合 午夜香蕉成视频人网站高清版 伊人久久大香线蕉综合爱婷婷 亚洲日韩精品欧美一区二区 亚洲欧美在线中文字幕不卡 国产在线资源站 亚洲伊人久久综合一区二区 中文字幕日韩精品中文区 日韩成人在线网站 另类免费视频 国产一区二区三区毛片 色综合久久精品中文字幕 精品在线一区二区三区 青青草原综合久久大伊人精品 亚洲免费区 国产精品久久久久久久免费 国产免费a视频 久久精品国产精品亚洲精品 国产精品久久久久久久成人午夜 日韩精品久久久久久久电影 日韩欧美一区二区久久 精品国产中文一级毛片在线看 国产在线拍 亚洲视频在线一区二区三区 亚洲人成网站色在线观看 伊人网综合在线视频 欧美在线一区二区三区不卡 亚洲黄色片在线观看 中文字幕第一页亚洲 亚洲精品乱码久久久久久蜜桃欧美 久久久久亚洲 日本免费一区二区三区视频 国产精品成人自拍 亚洲片在线观看 亚洲欧洲精品久久 亚洲丁香色婷婷综合欲色啪 久久精品国产亚洲a不卡 国内精品久久久久久久亚洲 色精品 国产欧美精品三区 国产欧美精品三区 日本一区二区免费在线 天天干在线观看 国产精品久久久久久免费播放 日韩一区二区三区四区 国产精品一区久久 亚洲一级视频在线观看 亚洲v天堂v手机在线观看 亚洲码在线观看 国产精品成人影院 亚洲福利精品一区二区三区 久久青草影院 欧美国产成人在线 国模极品一区二区三区 日韩福利网 免费人成激情视频在线观看 日韩欧美一区二区三区 精品三级久久久久久久电影 国产精品国产三级国产an 狠狠干中文字幕 精品一久久 日韩中文字幕一区二区不卡 亚洲乱码在线播放 国产亚洲高清不卡在线观看 国产青草视频 中文字幕亚洲综合久久202 亚洲另类中文字幕 久久国内精品 国产成人午夜精品免费视频 国产成人免费高清在线观看 日韩欧美亚洲国产精品字幕久久久 91亚洲成人 99精品国产三级在线观看 亚洲一区色图 午夜视频久久久久一区 伊人成人久久 国产亚洲精品日韩综合网 亚洲综合香蕉 亚洲第一国产 尤物精品在线观看 欧美极品一区 青青青视频精品中文字幕 91久久大香线蕉 日本免费专区 国产高清福利91成人 久草视频福利资源站 久久综合久久综合久久 伊人福利视频导航 国产青草视频在线观看 欧美色欧美亚洲另类二区 久久久久亚洲 91在线精品国产丝袜超清 国产在线一区二区三区四区 国产精品视频久久久久 天天干在线观看 久久精品国产亚洲香蕉 亚洲免费观看网站 日本伊人精品一区二区三区 亚洲一区二区在线播放 亚洲色图视频在线 亚洲成人日韩 在线中文字幕日韩欧美 亚洲成人网在线播放 一二三区免费视频 日韩精品久久久久久久电影 一个色综合久久 亚洲国产精品久久久久666 www亚洲精品 国精视频一区二区视频 国内精品久久久久久久亚洲 91综合久久婷婷久久 日韩精品久久久久久久电影 国产精品视频一区二区亚瑟 亚洲另类色区欧美日韩 久草视频国产 2021久久精品国产99国产 91在线播放国产 久久人人做人人玩人精品 欧美成人精品一区二区三区 久久亚洲不卡一区二区 久久国产精品免费观看 青青草国产免费国产是公开 欧美亚洲h在线一区二区 狠狠五月深爱婷婷网 国产一区亚洲 色婷婷综合久久久久中文 日本欧美亚洲 中文字幕亚洲综合久久202 日本一区二区不卡久久入口 亚洲另类在线欧美制服 国产日韩欧美一区二区三区综合 国产精品久久久久久久成人午夜 四虎精品国产一区二区三区 日韩一区二区三区视频在线观看 亚洲一区视频在线 久久三级国产 亚洲精品中文字幕乱码三区一二 国产亚洲婷婷香蕉久久精品 欧美日韩不卡在线 九九成人免费视频 亚洲一区中文字幕 亚洲区一区 国产精品美乳在线观看 国产一区二区自拍视频 国产福利一区二区在线观看 久久久高清免费视频 日韩中文视频 欧美亚洲h在线一区二区 国产精品自产拍在线观看 国产亚洲高清不卡在线观看 麻豆国产在线不卡一区二区 不卡视频一区二区 中文字幕日韩一区二区 国产在线观看自拍 亚洲视频一区在线 最新国产精品自拍 精品伊人久久大线蕉地址 久爱免费精品视频在线播放 亚洲视频日韩 欧美日韩中文国产一区 亚洲欧洲日本在线观看 欧美日本一本 亚洲欧美v视色一区二区 国产视频第二页 国产成人精品一区二三区 国产成人一区二区三区免费观看 六月婷婷在线 国产精品久久久久999 国产精品成人第一区 欧美日韩国产人成在线观看 欧美一级视频在线 一区二区三区在线免费看 综合网视频 国产成+人+综合+亚洲专 国内精品久久久久久影院8f 中文字幕第一页在线 日韩欧美一区二区三区 亚洲精品国产日韩 午夜手机福利 久久精品国产四虎 丁香婷婷久久大综合 色综合久久中文色婷婷 国产99精品 91中文在线 国产视频精品免费 国产麻豆福利av在线播放 日本亚洲乱码中文字幕影院 亚洲伊人色欲综合网 中文国产成人久久精品小说 久久综合久久综合久久 欧美亚洲国产另类 欧美亚洲国产精品久久 亚洲男人天堂网 欧美成人精品一区二区三区 a男人的天堂久久a毛片 中文字幕日本久久2019 亚洲天堂在线播放 国产成人综合一区人人 亚洲日本欧美综合在线一 韩国美女激情视频一区二区 欧美日韩精品一区二区免费看 激情亚洲综合网 国产精品最新 国产美女91视频 国产一区二区三区在线视频 欧美日韩国产在线人 九九在线精品视频播放 日本免费一区二区三区视频 国产一级不卡毛片 久久精品国产四虎 久久99精品久久久久久青青91 欧美日本一本 欧美精品在线一区二区三区 久久九九久精品国产 精品国产91久久久久久久 夜夜躁日日躁狠狠久久 99热2 国产乱人视频免费播放 久久国产香蕉 午夜欧美精品久久久久久久久 日韩在线综合 久久精品国产三级不卡 99这里精品 欧美亚洲日本一区 欧美日韩国产精品 精品成人一区二区三区免费视频 欧美一区二区自偷自拍视频 国产成人精品亚洲 欧美日韩国产一区二区三区 国产精品一区二 久久亚洲女同第一区 四虎精品国产一区二区三区 国产www在线播放 欧洲精品一区二区 日韩小视频网站 亚洲伊人久久综合一区二区 久久99精品国产 青青色在线视频 国产99精品 亚洲日韩在线视频 久久ri精品高清一区二区三区 久久久中文 亚洲欧洲精品视频 久久国产精品免费网站 国产成人一区二区三区免费观看 亚洲国产精品综合久久20 久久久久四虎国产精品 伊人国产在线 久久精品视频8 亚洲激情中文字幕 国产成人愉拍免费视频 日韩一级不卡 a级片在线观看视频 国产精品久久久久毛片 99久久精品国产国产毛片 国产成人免费高清在线观看 国产91久久最新观看地址 欧美精品在线一区 亚洲天堂h 日本精品一区二区在线播放 欧美精品亚洲精品日韩经典 中文字幕亚洲综合久久202 久久亚洲电影 久久精品国产久精国产80cm 国内精品久久久久久影院8f 日韩欧美一区在线观看 久久亚洲精品成人 欧美中文在线 国产精品麻豆一区二区三区 欧美日韩精品一区二区三区视频播放 91香蕉视频色 亚洲国产欧美日韩精品一区二区三区 国产91精选在线观看麻豆 九九在线精品视频播放 在线五月婷婷 日本在线日本中文字幕日本在线视频播放 国产丝袜一区 久久999 91精品久久久久久久久中文字幕 中文字幕不卡在线高清 香蕉尹人综合精品 国产一区二区三区怡红院 日韩在线一区二区 91精品国产99久久 亚洲国产欧美自拍 久草视频在线资源 国产福利不卡一区二区三区 亚洲乱码在线播放 欧美日韩国产58香蕉在线视频 欧美一级日韩 久久精品美乳 日本精品一区二区在线播放 欧美一区二区三区免费高 亚洲深夜视频 亚洲v天堂v手机在线观看 成人久久精品 韩国欧美日产国产精品 亚洲国产欧洲精品路线久久 国模极品一区二区三区 国产精品自产拍在线观看 成人日韩在线 久热中文 日本精品一区二区在线播放 久久婷五月综合 亚洲欧洲日本在线观看 日韩一区二区久久久久久 六月婷婷导航福利在线 久久99欧美 久久青草免费97线频观 欧美日韩中文字幕在线观看 婷婷黄色网 91系列在线 色亚洲影院 在线观看一区二区三区视频 国产午夜亚洲精品国产 国产一级免费视频 日韩视频在线观看一区二区 中文无码日韩欧 日韩精品在线看 伊人久久精品 91av在线导航 久久久一级 欧美日产国产亚洲综合图区一 精品成人一区二区三区免费视频 国产成人资源 一区二区三区精品国产欧美 欧美日韩高清观看一区二区 亚洲精品在线免费 国产精品一区久久 久久久久综合一本久道 久久精品66 久久综合丁香 欧美久草 亚洲涩涩精品专区 久久中文字幕一区二区三区 欧美精品福利 国产高清在线精品一区二区三区 欧美手机手机在线视频一区 另类免费视频 久久久香蕉 国产三级国产精品 丁香婷婷综合网 亚洲欧洲一二三区 国产在线精品一区二区高清不卡 国产精品久久二区三区色裕 亚洲美女综合网 91精品视频免费在线观看 国内精品久久久久激情影院 精品一区二区久久 亚洲国产精品久久精品怡红院 欧美αv天堂在线视频 中出五十路免费视频 99成人免费视频 国产一级免费视频 国产成人精品久久综合 亚洲欧美日韩综合网导航 午夜国产福利在线观看 91在线视频免费播放 国产亚洲小视频 亚洲欧美日韩另类在线专区 99久久精品久久久久久清纯 欧美国产在线看 亚洲经典在线观看 日本mv精品中文字幕 日韩黄色精品 男人天堂成人 久久精品一区二区三区四区 日韩不卡一区二区三区 日韩亚洲欧美综合一区二区三区 免费日本一区 97成人精品 国产成+人+综合+欧美亚洲 国产91久久最新观看地址 精品免费久久 99久久精品国产国产毛片 国产成人一区二区三区 亚洲男人天堂网 国产精品偷伦视频播放 精品一区二区久久 免费在线观看一区 日本伊人精品一区二区三区 在线日韩欧美 色老99久久九九爱精品69堂 国产成人a 免费在线观看a 福利一区在线 亚洲视频一二 91成人免费在线视频 一区二区午夜 国产精品美女久久福利网站 久久久高清免费视频 亚洲另类中文字幕 亚洲国产欧美自拍 久久午夜视频 四虎在线永久 欧美性猛交99久久久久99 97精品伊人久久久大香线焦 久久综合久久综合久久 国产精品久久久久久久久久久久久久 久久精品这里只有精品 欧美激情在线精品三区 日韩午夜网站 久久永久免费视频 精品一区二区在线观看 成人在线观看国产 成人欧美精品一区二区不卡 日本视频二区 久久久久夜夜夜精品国产 日韩欧美一区二区久久 国产精品偷伦视频播放 亚洲午夜精品久久久久久成年 精品国产区一区二区三区在线观看 成人国产精品免费视频不卡 色妞www精品视频免费看 婷婷综合五月中文字幕欧美 国产精品亚洲综合天堂夜夜 久久精品免费 欧美视频日韩专区午夜 久久久久久久久97 国产精品亚洲片夜色在线 国产精品一页 久久精品国产一区二区小说 久久国产欧美日韩高清专区 久久99免费 久久久久毛片免费观看 亚洲第一页在线 日韩a在线播放 国产免费一区二区 免费在线观看一区 久久se精品动漫一区二区三区 亚洲日韩在线视频 99re在线观看视频 亚洲成aⅴ人片在线观 亚洲v天堂v手机在线观看 国产福利在线导航 国产成人久久精品一区二区三区 手机看片久久高清国产日韩 日本一区二区三区高清福利视频 2021久久精品国产99国产 9久9久女女免费精品视频在线观看 亚洲欧美视频网站 性做久久久久久久久浪潮 久久久精品2019中文字幕2020 日韩国产一区二区 日韩在线一区二区 久久精品国产亚洲a不卡 国产精品成人影院 亚洲日韩在线视频 91福利专区 亚洲综合日韩在线亚洲欧美专区 亚洲综合影院 91精品成人福利在线播放 永久免费精品视频 男人懂得成a人v网站 伊人久久精品 成人国产精品视频 青青在线视频免费 午夜精品久久久久久 欧洲亚洲一区 久久精品屋 国产观看精品一区二区三区 久久99久久99 国产午夜视频在线观看 午夜国产福利在线观看 亚洲免费天堂 久久青草免费97线频观 久久综合丁香 精品动漫中文字幕一区二区三区 国产精品成人第一区 国产精品久久久福利 国产精品久久毛片 日本视频二区 免费一区在线观看 国产亚洲区 色综合久久中文色婷婷 国产成人aa视频在线观看 亚洲欧洲日本在线观看 在线中文字幕 国产福利不卡一区二区三区 日本国产在线观看 国产色产综合色产在线观看视频 国产永久在线观看 亚洲国产日韩在线观频 欧美激情人成日本在线视频 欧美亚洲日本一区 在线亚洲精品国产成人二区 香蕉69精品视频在线观看 中文有码第一页 亚洲免费色 香蕉尹人综合精品 视频一区免费 中文字幕日韩精品在线 欧美高清在线精品一区 亚洲欧洲一二三区 国产高清在线免费 国产调教视频在线观看 最新高清无码专区 久久青青草原热精品 日韩一区国产二区欧美三 免费国产网站 日韩午夜精品 日本一区二区在线免费观看 久久久久久不卡 国产精品久久久久久搜索 国产一区二区三区毛片 国产对白在线播放九色 热99精品 精品一区二区久久 欧美日韩国产成人综合在线影院 欧美日韩国产亚洲一区二区 久久国产精品免费网站 国产高清精品毛片基地 亚洲国产欧美自拍 一区二区午夜 国产精品美女久久福利网站 久久综合影院 亚洲国产精品久久精品怡红院 国产日韩欧美一区二区 四虎影院久久久 亚洲色图国产 日本一区二区三区欧美在线观看 日本中文字幕一区二区三区不卡 成人午夜久久精品 欧美日韩大片在线观看 青青国产精品 久久精品国产精品2020 色五月婷婷成人网 精品一区二区三区在线观看视频 一本久道久久综合婷婷五 国产性tv国产精品 日韩色视频在线观看 青草免费视频 久久久久综合 手机在线视频一区 91在线精品国产丝袜超清 91精品国产99久久 亚洲综合图片人成综合网 欧美日韩不卡在线 尤物精品在线观看 国产欧美日本在线观看 色婷婷亚洲精品综合影院 成人国产精品 久久婷五月综合 欧美视频国产 日本伊人精品一区二区三区 国产成+人+亚洲+欧美综合 在线欧美国产 五月婷婷在线播放 日韩一区二区在线播放 一区二区三区四区免费视频 99精品国产三级在线观看 91成人免费在线视频 一区在线免费 久久精品美乳 久久青草免费97线频观 精品在线第一页 久久午夜视频 久久精品免视看国产成人2021 亚洲成人第一页 色亚洲影院 国产丶欧美丶日韩丶不卡影视 一区二区三区精品国产欧美 久久成人国产 伊人久在线 青草免费视频 中文字幕亚洲无线码在一区 日韩欧美亚洲国产精品字幕久久久 亚洲欧美日韩中文综合在线不卡 国产永久在线观看 国产精品日韩欧美一区二区三区 中文字幕在线视频免费 国产精品视频一区二区亚瑟 国产视频精品久久 国产成+人+亚洲+欧美综合 久久亚洲精品中文字幕三区 999热视频 日本中文字幕一区二区三区不卡 国产午夜亚洲精品国产 日韩欧美不卡 中文字幕亚洲欧美 精品四虎 精品中文字幕乱码一区二区 国产探花一区 日韩在线高清 国产欧美一区二区三区视频在线观看 国产精品久久久久久影视 一区二区精品久久 久久午夜一区二区 国产高清在线精品一区二区三区 99久久精品国产免看国产一区 99精品久久久久久 成人欧美精品一区二区不卡 日本精品二区 91精品国产一区 高清亚洲 国产在线观看一区 国产精品线在线精品国语 中文综合网 亚洲欧美日产综合在线看 久久999 欧美日韩国产一区二区三区 六月婷婷导航福利在线 九月色婷婷 久久精品国产亚洲网站 国产探花一区 日韩中文字幕一区二区不卡 亚洲人免费视频 91热久久免费频精品黑人99 97成人精品 国产欧美久久久精品影院 亚洲视频三区 日韩在线一区二区 五月天婷婷影院 午夜欧美精品久久久久久久久 国产高清看片日韩欧美久久 日韩午夜在线观看 亚洲天堂免费看 日本在线日本中文字幕日本在线视频播放 国内精品久久久久久久亚洲 国产精品黄色片 精品中文字幕乱码一区二区 久热草在线 男人天堂成人 中文有码第一页 日韩色视频在线观看 久久精品国产精品2020 www91在线观看 国产免费三级电影 午夜香蕉成视频人网站高清版 思思久久这里只精品99re66 亚洲网址在线 日本国产在线观看 免费一区二区三区视频导航 欧美日韩中文在线视频 国模极品一区二区三区 国产精品探花千人斩久久 激情综合网五月 久久精品国产一区二区小说 中文字幕第二页在线 不卡中文字幕 亚洲色图国产 色综合久久中文字幕综合网 久久精品资源 91福利国产在线观看香蕉 亚洲成aⅴ人片在线观 久久成年人电影 亚洲精品综合一二三区在线 国产成人在线网址 久久99九九99九九精品 国产一区二区三区毛片 99久久精品久久久久久清纯 精品久久久久久久久免费影院 婷婷中文在线 日韩美一区二区 久久精品视频91 欧美日比视频 中文字幕日韩亚洲 欧区一欧区二欧区三免费 国产成人影院 欧美专区日韩专区 欧美一区二区在线视频 亚洲天堂免费看 成人国产精品一级毛片视频 国产成+人+综合+亚洲专 欧美αv天堂在线视频 一区二区三区亚洲 成人久草 亚洲欧美精品一区天堂久久 免费观看欧美一区二区三区 欧美日韩精品一区二区免费看 国产免费一区二区 福利视频91 夜夜精品视频 日韩高清一区 国产精品成人自拍 国产精品天干天干在线综合 伊人久久精品 国产精品第五页 国产在线观看自拍 国产欧美精品一区aⅴ影院 第一区免费在线观看 亚洲国产夜色在线观看 99精品视频观看 亚洲午夜精品一区二区 国产97色在线中文 国产午夜精品1区2区3福利 国产成人一区二区三区精品久久 国产精品日韩欧美一区二区三区 国产女人久久精品 亚洲伊人久久大香线蕉啊 精品欧美一区视频在线观看 亚洲成人综合网站 在线日韩欧美 国产成人久久精品一区二区三区 日韩在线一区二区 亚洲成人免费 中文字幕在线网址 久久精品国产精品2020 国产一区二区在线视频观看 国产vr一区二区在线观看 久久噜噜久久久精品66 国产午夜精品一区二区三区 国产高清免费午夜在线视频 日韩欧美国产中文 久久精品国产三级不卡 欧美国产在线视频 亚洲欧美中文日韩在线 中文字幕第一页在线 欧美亚洲天堂 激情综合网五月 97精品国产福利一区二区三区 999人在线精品播放视频 亚洲人成电影网站国产精品 99视频精品全部在线播放 国产剧情精品在线 亚洲成人免费 婷婷五月在线视频 狠狠干中文字幕 欧区一欧区二欧区三免费 亚洲人免费视频 欧美国产在线看 亚洲综合图片人成综合网 国产成人精品三级在线 日本不卡视频一区二区 成人a一级毛片免费看 日韩不卡在线播放 欧美国产激情二区三区 久久99久久99 成人精品视频一区二区三区尤物 亚洲成人三级 日韩精品第1页 欧美日韩亚洲一区二区 亚洲欧美日韩国产vr在线观 精品免费国产一区二区三区 国产伦精品一区二区三区免费观看 亚洲人成网国产最新在线 久久精品免视看国产成人2021 中文字幕在线乱码免费毛片 久久久福利视频 四虎国产精品永久在线播放 国产欧美亚洲精品第3页在线 亚洲精品www 亚洲综合婷婷 精品久久久久久综合网 久久精品屋 日本亚洲一区二区 国产网站精品 日本免费二区三区久久 久草视频在线资源 欧美亚洲国产日韩综合在线播放 国产精品久久久久久搜索 毛片免费视频网站 欧美在线精品永久免费播放 午夜毛片免费看 国产成人亚洲欧美三区综合 国产四虎免费精品视频 一本综合久久国产二区 亚洲一区欧美