1. 程式人生 > >來一套 常規筆試題

來一套 常規筆試題

margin 需要 oat image font 冒泡排序 對象 hover 返回值

1.css盒模型

  技術分享圖片

2.css選擇器有哪些?那些屬性可以繼承?優先級算法如何計算?css3新增偽類有哪些?

選擇器 權重
通配符選擇器 0
標簽選擇器 、 為元素選擇器 10
class選擇器、偽類選擇器、屬性選擇器 100
id選擇器   1000
行間樣式 10000
@import 無窮大

.wrapper,.box{}  ---> 並列選擇器

.wrapper>.box{}  --->直接子元素選擇器

.wrapper .box{}  ---->後代選擇器

可以繼承的屬性 color、font-size等字體屬性  text-indent、text-align、line-height等文本屬性 visibility cursor等

樣式的  優先級 就是選擇器的權重相加 顯示權重大的 樣式

新增偽類

  p:first-of-type  當前層p標簽的第一個

  p:last-of-type  當前層p標簽的最後一個

  p:only-of-type  所有p標簽中 作為唯一子元素的p

  div:nth-child(n)  div子元素中的第n個

  div:last-child   div的最後一個子元素

  p:not      除了p的其他所有標簽

  input:enable   所有啟用的input

  input:disable    所有禁用了的input

  input:checked    所有被選中的 input標簽

  :root        根元素html

  ::selection    用戶選中的部分

  

3.用css實現 左右固定,中間自適應的三欄布局

CSS

  *{
      margin: 0;
      padding: 0;
    }
    .wrapper{
      padding: 0 200px;
    }
    .center,.left,.right{
      height: 200px;
      float: left;      
    }
    .left,.right{
      width: 200px;
      background: pink
; position: relative; } .center{ background: blue; width: 100%; } .left{ margin-left: -100%; left: -200px; } .right{ margin-left: -200px; right: -200px; }

html

  <div class="wrapper">
      <div class="center"></div>
      <div class="left"></div>
      <div class="right"></div>    
  </div>

4.說明浮動產生的效果,至少列舉三種清除浮動的方法

  元素浮動之後,就脫離當前同一層的文本流,浮動元素根據設置不同的浮動方向,浮動到父元素的邊界,或者其他浮動的元素

  清除浮動的方法

    1.最簡潔的方法

      在需要清除浮動的元素後面添加一個 div 並設置 css    clear:both

    2.給父級設置 overfloat:hidden

    3.常規方法

.clearFloat:after{
  display:block;
  clear:both;
  content:‘‘;
  visibility:hidden;
  height:0;    
}
.clearFloat{
 zoom:1;  //兼容IE6
}

5.列出display的值,說明他們的作用。positioin的值,relative和absolte定位原點是

display 作用
block 將元素變成塊級元素
inline   將元素變成行內元素
none 使元素不存在
inline-block 將元素變成行內塊元素
inherit 繼承父級的display
table 相當於 <table></table>
table-row 相當於<tr></tr>
table-cell 相當於<td></td>或者<dd></dd>
list-item 相當於 列表元素

position 有 absolute 、 relative 、fixed 、 inherit

  relative   是相對於自身原本在文本流中的位置進行定位

  absolute  是根據最近有定位的父級進行定位的

6.前端頁面有哪三層結構? 分別是什麽?作用是什麽?

  結構層   html  頁面的結構布局

  樣式層  css   前端頁面的樣式

  行為層  js    頁面交互

7.css中可以通過哪些屬性定義使DOM元素不顯示在瀏覽器可視範圍內

  postion 的各種定位 可以將元素 移出屏幕

  visibility:hidden  可以設置dom的透明度 為透明的,但是還占據原來的位置 還存在

  opacity:0      設置Dom元素的不透明度 為0 即使DOM透明 與Visibility:hidden效果相同

  display:none    使元素消失,不存在與文檔流中

8.超鏈接訪問後hover樣式就不出現的問題是什麽?如何解決?

  a標簽的4個狀態

  link      默認狀態

  hover     鼠標懸停

  active     點擊的瞬間

  visited     訪問過的

。。。。上網上查的 試了好久 並沒有試出來 hover 不好使的情況

9.rgba()和opacity的透明效果有什麽不同

  rgba()   是設置在 dom元素背景顏色上的  不會影響子元素

  opacity  設置的透明度是相對 dom元素整體的 會繼承給子元素

10.CSS中可以讓文字在垂直和水平方向上重疊的兩個屬性是什麽?

  我以為是 line-height 和 text-indent

11.display:none 與 visilibity:hidden的區別是什麽

  display:none;是 是元素消失於文檔流中,不存在於Dom結構中

  visilibity:hidden  是設置的 元素的 透明度 為透明 而元素仍然存在於 DOM結構中 任然占據原來的位置

12.知道css有個content屬性麽?有什麽作用?如何應用?

  可以配合為元素 :after/:befor 設置為元素裏的內容

a:after{content:attr(‘href‘)}

13.編寫函數,實現冒泡排序

    var arr = [12,123,345,21,88];

    function sort (arr){
      var cut = 0,
          len = arr.length - 1;
      for(var i = 0; i < len; i++) {
        for(j = i; j < len; j++){
          if(arr[j] > arr[j+1]) {
            cut = arr[j];
            arr[j] = arr[j+1];
            arr[j+1] = cut;
          }
        }
      }
      return(arr)
    }
    var after = sort(arr);
    console.log(after);

14.談談你對閉包的理解,寫一個簡單的閉包實例

  由於js函數作用域,在函數外部無法訪問函數內部的東西,通過在函數內添加一個相對於這個函數是子函數,也就是可以讀取這個函數的內容的函數,return這個函數 就可以在最外層函數外面訪問函數內的內容了  

   形象的解釋 閉包就是 內部函數和外部函數的一道橋梁

function f1(){
  var n = 666;
  function f2() {
    console.log(n);
  }
}
f1()();    //666

15.閉包與定時器混合考驗

//修改如下代碼,讓循環輸出結果依次為1,2,3,4,5

for(var i=1; i<=5; i++) {
  setTimeout(function timer(){
    console.log(i);
  },i*1000)
}

  修正代碼

    for(var i = 1; i <=5; i++) {
      (function(j){
        setTimeout(timer = () => {
          console.log(j);
        }, j*1000);
      })(i)
    }

16.扁平化多維數組arr=[1,3,4,5[6,[0,1,5],9],[3,5,[1,5]],[5]]  ;

  扁平化就是將多維數組編程一維的技術分享圖片

  

  方法一  遍歷數組

function bianPingHua(arr){
      var newArr = [];
      arr.forEach(
        function(item){
          if(Array.isArray(item)){
            newArr = newArr.concat(bianPingHua(item));//concat是將item的每一位 拼接到newArr後面 且不改變newArr 所以要用賦值
      }
else{ newArr.push(item);//在數組最後添加一位 這裏如果是一個數組,任然相當於 newArry的一位 } } ); return newArr; } var oEnd = bianPingHua(arr); console.log(oEnd);

  方法二 toString與split

var newArr = arr.toString().split(‘,‘);
    console.log(newArr);

17.談談你對this指向的理解

  普通對象、計時器、定時器的this 指向window

  對象中的 方法中的this 指向的就是這個對象

  綁定事件執行時this指向dom

改變this指向的方法 call、apply 、bind

    function Foo () { 
    }
    function son (){
      console.log(this);
    }
    son.call(Foo);
    son.apply(Foo);  
    son.bind(Foo)();

18.說說你對面向對象的理解,然後寫一段js代碼示例

    

    一、繼承

      一個類繼承另一個類,可以實現代碼復用,減少冗余。

    二、封裝

      將函數封裝起來,隱藏內部信息,用戶無需知道對象內部的方法實現的過程,但可以使用對象的方法

    三、多態

      同一函數,可以適應多種傳參

  

19.javascript的typeof返回類型有哪些

  number 、string 、 function、 boolean、 undefind、 object

20.數組方法 pop(),push(),unshift(),shift()

  這四種方法都改變原數組

  pop()在最後一位刪除一位  傳參無效

  push()在最後一位添加幾位  可以用 , 傳多個參數 返回值是 length

  unshift()在第一位添加幾位  也可以用 , 傳多個參數 返回值是length

  shift() 在第一位刪除一位  傳參無效

  

  

      

來一套 常規筆試題