前端面試——記CVTE從筆試到技術面

筆試

一:CSS選擇器權重計算規則

1.第一等:代表內嵌樣式;如:style=" ",權重值為1000.
2.第二等:代表ID選擇器;如:#content,權重值為0100.
3.第三等:代表類,偽類和屬性選擇器;如:.content,權重值為0010.
4.第四等:代表元素和偽元素選擇器;如:div p,權重值為0001.
5.第五等:代表通配符,子元素選擇器和相鄰兄弟選擇器等;如:*、>、+,權重值為0000.
6.繼承的樣式沒有權重值.
7.!important;
  !important的作用是提升優先級,換句話說,加了這句的樣式的優先級是最高的(比內嵌的優先級還高)。
以前從沒考慮過屬性,這次考到了屬性的權值

二.js對象的屬性名可以是什么值,對象屬性的值可以是什么值?

屬性名就是普通的變量命名方式,屬性值可以是字符串,數字,等各種內容。

三.margin屬性值

如果是三個值的話表示,上,左右,下。

四.ECMA對象的數據屬性和訪問器屬性

4.1ECMAscript的數據屬性
configurable表示,屬性是否能通過delete刪除,默認值是true;
enumerable表示,屬性是否能用for in 遍歷,默認值是true;
writable表示能否修改屬性值,默認值是true;
value默認值是undefined。
可以用Object.defineProperty(person,"name",{});來定義對象屬性的數據屬性
注意:(1)一旦把屬性定為不可配置的,就不能把它變成可配置了,此時,再調用Object.defineProperty();方法修改除writable之外的特性,都會導致錯誤。
(2)如果調用了這個方法,則除了value之外的數據屬性都是都是false。
(3)直接定義在對象上的屬性,configurable和enumerable值都是true,這個注意點是要優先于(2)的。
(4)IE8是第一個實現這個方法的瀏覽器版本。
4.2ECMAscript的訪問器屬性
configurable
enumerable
get
set

代碼實現鏈接,內有代碼驗證鏈接。

五.屬性遍歷的一些操作

1對象名.hasOwnProperty(name),遍歷對象上非原型鏈上的屬性
2for in,遍歷整個原型鏈上enumerable是true的屬性
3自定義方法,遍歷原型上的屬性,hasPrototypeProperty(對象名)(如果實例中重寫了,會被覆蓋,遍歷不到)
4Object.getOwnPropertyNames(對象名,name),屬性遍歷,包括不可枚舉的屬性

可以得出規律:
obj.hasOwnProperty,hasPrototypeProperty<for in <Object.getOwnPrototypeNames()

//定義hasPrototypeProperty方法
 function hasPrototypeProperty(obj,name){
    if(!obj.hasOwnProperty(name)&&(name in obj)) return true;
    else return false;
 }
    function Person(){
  this.name = "zhangsan";
  this.sex = "nv";
}
var person = new Person();
Person.prototype.age = "12";
for(var i in person){//2.遍歷整個原型鏈上可枚舉的屬性
   console.log(person[i]);//輸出zhangsan nv 12
}
console.log(person.hasOwnProperty("name"));//1.只包含非原型的
console.log(hasPrototypeProperty(person,"age"));//3.只包括原型上的,如果實例中屬性覆蓋則,返回false
person.age = "13";
console.log(hasPrototypeProperty(person,"age"));//輸出false
Object.defineProperty(person,"age",{enumerablle:false})
var keys = Object.getOwnPropertyNames(person);//4返回包括不可枚舉的屬性
console.log(keys);//name,sex,age

六.代碼題

1.柯里化函數:把一個需要傳入多個參數的函數變成只需要傳入一個參數的函數

function add(x,y,z){return x+y+z;}
function add2(x){
  return function(y){ return function(z){
      return x+y+z;
}}

}
console.log(add(1,2,3));//輸出6
console.log(add2(1)(2)(3));//輸出6

2.實現(10).add(20).reduce(30).add(2)結果為10+20-30+2=2

Number.prototype.add = function(m){
        return this+m;
    }
    Number.prototype.reduce = function(n){
        return this+n;
    }
    console.log((10).add(20).reduce(3).add(2));

3.js閉包和異步操作的考察

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

4.js繼承機制的考察

function Verhical(w){
        this.w = w;
    }
    Vehical.prototype.getW = function(){
        return this.w;
    }

    function Bicycle(w){this.w = w;}
    Bicycle.prototype = _____;//new Vehical(),new Vehical(2),new Vehical(4)都可以,括號里是什么沒關系
    var bicycle = new Bicycle(2);
    console.log(bicycle.getW());//輸出為2

一面

1.首先問項目,簡單介紹一下自己做的項目
2.之后是介紹一下浮動,如何清除浮動
3.水平排列3個div,兩邊的定寬,如何讓中間的隨著兩邊的自適應在頁面中間。
4.position定位的概念,position的幾個取值,以及代表的含義。
5.h5新增的元素。.
6.localstorage和sessionstorage,cookie的區別,三者的過期時間?
7.js可以直接訪問cookie么?如何禁止js訪問cookie?
可以,用document.cookie
禁止的話用http-only,設置為false,js就不能訪問cookie了。
8.http協議和tcp協議的區別,以及三次握手,四次揮手。
9.快速排序的思想
未完待續
歡迎大家留言補充

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容