筆試
一: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.快速排序的思想
未完待續
歡迎大家留言補充