、 介紹一下標準的CSS的盒子模型?與低版本IE的盒子模型有什么不同的?
標準盒子模型:寬度=內容的寬度(content)+ border + padding + margin
低版本IE盒子模型:寬度=內容寬度(content+border+padding)+ margin
2、 box-sizing屬性?
用來控制元素的盒子模型的解析模式,默認為content-box
context-box:W3C的標準盒子模型,設置元素的 height/width 屬性指的是content部分的高/寬
border-box:IE傳統盒子模型。設置元素的height/width屬性指的是border + padding + content部分的高/寬
3 、CSS選擇器有哪些?哪些屬性可以繼承?
CSS選擇符:id選擇器(#myid)、類選擇器(.myclassname)、標簽選擇器(div, h1, p)、相鄰選擇器(h1 + p)、子選擇器(ul > li)、后代選擇器(li a)、通配符選擇器(*)、屬性選擇器(a[rel="external"])、偽類選擇器(a:hover, li:nth-child)
可繼承的屬性:font-size, font-family, color
不可繼承的樣式:border, padding, margin, width, height
優先級(就近原則):!important > [ id > class > tag ]
!important 比內聯優先級高
4、 CSS優先級算法如何計算?
元素選擇符: 1
class選擇符: 10
id選擇符:100
元素標簽:1000
5、 CSS3新增偽類有那些?
p:first-of-type 選擇屬于其父元素的首個元素
p:last-of-type 選擇屬于其父元素的最后元素
p:only-of-type 選擇屬于其父元素唯一的元素
p:only-child 選擇屬于其父元素的唯一子元素
p:nth-child(2) 選擇屬于其父元素的第二個子元素
:enabled :disabled 表單控件的禁用狀態。
:checked 單選框或復選框被選中。
6 、如何居中div?如何居中一個浮動元素?如何讓絕對定位的div居中?
div:
border: 1px solid red;margin: 0 auto; height: 50px;width: 80px;
浮動元素的上下左右居中:
border: 1px solid red;float: left; position: absolute;width: 200px; height: 100px;left: 50%;top: 50%; margin: -50px 0 0 -100px;
絕對定位的左右居中:
border: 1px solid black;position: absolute; width: 200px;height: 100px;margin: 0 auto; left: 0;right: 0;
還有更加優雅的居中方式就是用flexbox,我以后會做整理。
7、 display有哪些值?說明他們的作用?
inline(默認)--內聯
none--隱藏
block--塊顯示
table--表格顯示
list-item--項目列表
inline-block
8、 position的值?
static(默認):按照正常文檔流進行排列;
relative(相對定位):不脫離文檔流,參考自身靜態位置通過 top, bottom, left, right 定位;
absolute(絕對定位):參考距其最近一個不為static的父級元素通過top, bottom, left, right 定位;
fixed(固定定位):所固定的參照對像是可視窗口。
9、 CSS3有哪些新特性?
10、 請解釋一下CSS3的flexbox(彈性盒布局模型),以及適用場景?
該布局模型的目的是提供一種更加高效的方式來對容器中的條目進行布局、對齊和分配空間。在傳統的布局方式中,block 布局是把塊在垂直方向從上到下依次排列的;而 inline 布局則是在水平方向來排列。彈性盒布局并沒有這樣內在的方向限制,可以由開發人員自由操作。
試用場景:彈性布局適合于移動前端開發,在Android和ios上也完美支持。
11、 用純CSS創建一個三角形的原理是什么?
首先,需要把元素的寬度、高度設為0。然后設置邊框樣式。
width: 0;height: 0;border-top: 40px solid transparent; border-left: 40px solid transparent;border-right: 40px solid transparent; border-bottom: 40px solid #ff0000;
12、 一個滿屏品字布局如何設計?
第一種真正的品字:
第二種全屏的品字布局:
上面的div設置成100%,下面的div分別寬50%,然后使用float或者inline使其不換行。
13 、常見的兼容性問題?
{background-color:#f1ee18;/*所有識別*/.background-color:#00deff; /*IE6、7、8識別*/+background-color:#a200ff;/*IE6、7識別*/_background-color:#1e0bd1;/*IE6識別*/}
14、 為什么要初始化CSS樣式
因為瀏覽器的兼容問題,不同瀏覽器對有些標簽的默認值是不同的,如果沒對CSS初始化往往會出現瀏覽器之間的頁面顯示差異。
15、 absolute的containing block計算方式跟正常流有什么不同?
無論屬于哪種,都要先找到其祖先元素中最近的 position 值不為 static 的元素,然后再判斷:
如果都找不到,則為 initial containing block。
補充:
16、CSS里的visibility屬性有個collapse屬性值?在不同瀏覽器下以后什么區別?
當一個元素的visibility屬性被設置成collapse值后,對于一般的元素,它的表現跟hidden是一樣的。
17、 display:none與visibility:hidden的區別?
display:none 不顯示對應的元素,在文檔布局中不再分配空間(回流+重繪)
visibility:hidden 隱藏對應元素,在文檔布局中仍保留原來的空間(重繪)
18、 position跟display、overflow、float這些特性相互疊加后會怎么樣?
display屬性規定元素應該生成的框的類型;position屬性規定元素的定位類型;float屬性是一種布局方式,定義元素在哪個方向浮動。
類似于優先級機制:position:absolute/fixed優先級最高,有他們在時,float不起作用,display值需要調整。float 或者absolute定位的元素,只能是塊元素或表格。
19 、對BFC規范(塊級格式化上下文:block formatting context)的理解?
BFC規定了內部的Block Box如何布局。
定位方案:
滿足下列條件之一就可觸發BFC
20、 為什么會出現浮動和什么時候需要清除浮動?清除浮動的方式?
浮動元素碰到包含它的邊框或者浮動元素的邊框停留。由于浮動元素不在文檔流中,所以文檔流的塊框表現得就像浮動框不存在一樣。浮動元素會漂浮在文檔流的塊框上。
浮動帶來的問題:
清除浮動的方式:
21、 上下margin重合的問題
在重合元素外包裹一層容器,并觸發該容器生成一個BFC。
例子:
<div class="aside"></div> <div class="text"> <div class="main"></div> </div> <!--下面是css代碼--> .aside { margin-bottom: 100px; width: 100px; height: 150px; background: #f66; } .main { margin-top: 100px; height: 200px; background: #fcc; } .text{ /*盒子main的外面包一個div, 通過改變此div的屬性使兩個盒子分屬于兩個不同的BFC, 以此來阻止margin重疊*/ overflow: hidden; //此時已經觸發了BFC屬性。 }
22、設置元素浮動后,該元素的display值是多少?
自動變成display:block
23、 移動端的布局用過媒體查詢嗎?
通過媒體查詢可以為不同大小和尺寸的媒體定義不同的css,適應相應的設備的顯示。
24 、使用 CSS 預處理器嗎?
Less sass
25、 CSS優化、提高性能的方法有哪些?
26、 瀏覽器是怎樣解析CSS選擇器的?
CSS選擇器的解析是從右向左解析的。若從左向右的匹配,發現不符合規則,需要進行回溯,會損失很多性能。若從右向左匹配,先找到所有的最右節點,對于每一個節點,向上尋找其父節點直到找到根元素或滿足條件的匹配規則,則結束這個分支的遍歷。
兩種匹配規則的性能差別很大,是因為從右向左的匹配在第一步就篩選掉了大量的不符合條件的最右節點(葉子節點),而從左向右的匹配規則的性能都浪費在了失敗的查找上面。
而在 CSS 解析完畢后,需要將解析的結果與 DOM Tree 的內容一起進行分析建立一棵 Render Tree,最終用來進行繪圖。在建立 Render Tree 時(WebKit 中的「Attachment」過程),瀏覽器就要為每個 DOM Tree 中的元素根據 CSS 的解析結果(Style Rules)來確定生成怎樣的 Render Tree。
27 、在網頁中的應該使用奇數還是偶數的字體?為什么呢?
使用偶數字體。偶數字號相對更容易和 web 設計的其他部分構成比例關系。Windows 自帶的點陣宋體(中易宋體)從 Vista 開始只提供 12、14、16 px 這三個大小的點陣,而 13、15、17 px時用的是小一號的點。(即每個字占的空間大了 1 px,但點陣沒變),于是略顯稀疏。
28、 margin和padding分別適合什么場景使用?
何時使用margin:
何時使用padding:
兼容性的問題:在IE5 IE6中,為float的盒子指定margin時,左側的margin可能會變成兩倍的寬度。通過改變padding或者指定盒子的display:inline解決。
29 、元素豎向的百分比設定是相對于容器的高度嗎?
當按百分比設定一個元素的寬度時,它是相對于父容器的寬度計算的,但是,對于一些表示豎向距離的屬性,例如 padding-top , padding-bottom , margin-top , margin-bottom 等,當按百分比設定它們時,依據的也是父容器的寬度,而不是高度。
30 、全屏滾動的原理是什么?用到了CSS的哪些屬性?
31、 什么是響應式設計?響應式設計的基本原理是什么?如何兼容低版本的IE?
響應式網站設計(Responsive Web design)是一個網站能夠兼容多個終端,而不是為每一個終端做一個特定的版本。
基本原理是通過媒體查詢檢測不同的設備屏幕尺寸做處理。
頁面頭部必須有meta聲明的viewport。
<meta name=’viewport’ content=”width=device-width, initial-scale=1. maximum-scale=1,user-scalable=no”>
32、 視差滾動效果?
視差滾動(Parallax Scrolling)通過在網頁向下滾動的時候,控制背景的移動速度比前景的移動速度慢來創建出令人驚嘆的3D效果。
33、 ::before 和 :after中雙冒號和單冒號有什么區別?解釋一下這2個偽元素的作用
:before 和 :after 這兩個偽元素,是在CSS2.1里新出現的。起初,偽元素的前綴使用的是單冒號語法,但隨著Web的進化,在CSS3的規范里,偽元素的語法被修改成使用雙冒號,成為::before ::after
34、 你對line-height是如何理解的?
行高是指一行文字的高度,具體說是兩行文字間基線的距離。CSS中起高度作用的是height和line-height,沒有定義height屬性,最終其表現作用一定是line-height。
單行文本垂直居中:把line-height值設置為height一樣大小的值可以實現單行文字的垂直居中,其實也可以把height刪除。
多行文本垂直居中:需要設置display屬性為inline-block。
35 、怎么讓Chrome支持小于12px 的文字?
p{font-size:10px;-webkit-transform:scale(0.8);} //0.8是縮放比例
36、 讓頁面里的字體變清晰,變細用CSS怎么做?
-webkit-font-smoothing在window系統下沒有起作用,但是在IOS設備上起作用-webkit-font-smoothing:antialiased是最佳的,灰度平滑。
37、 position:fixed;在android下無效怎么處理?
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0, user-scalable=no"/>
38、 如果需要手動寫動畫,你認為最小時間間隔是多久,為什么?
多數顯示器默認頻率是60Hz,即1秒刷新60次,所以理論上最小間隔為1/60*1000ms = 16.7ms。
39、 li與li之間有看不見的空白間隔是什么原因引起的?有什么解決辦法?
行框的排列會受到中間空白(回車空格)等的影響,因為空格也屬于字符,這些空白也會被應用樣式,占據空間,所以會有間隔,把字符大小設為0,就沒有空格了。
解決方法:
40、 display:inline-block 什么時候會顯示間隙?
41、 有一個高度自適應的div,里面有兩個div,一個高度100px,希望另一個填滿剩下的高度
外層div使用position:relative;高度要求自適應的div使用position: absolute; top: 100px; bottom: 0; left: 0
42、 png、jpg、gif 這些圖片格式解釋一下,分別什么時候用。有沒有了解過webp?
43、 style標簽寫在body后與body前有什么區別?
頁面加載自上而下 當然是先加載樣式。
寫在body標簽后由于瀏覽器以逐行方式對HTML文檔進行解析,當解析到寫在尾部的樣式表(外聯或寫在style標簽)會導致瀏覽器停止之前的渲染,等待加載且解析樣式表完成之后重新渲染,在windows的IE下可能會出現FOUC現象(即樣式失效導致的頁面閃爍問題)
44、 CSS屬性overflow屬性定義溢出元素內容區的內容會如何處理?
參數是scroll時候,必會出現滾動條。
參數是auto時候,子元素內容大于父元素時出現滾動條。
參數是visible時候,溢出的內容出現在父元素之外。
參數是hidden時候,溢出隱藏。
45、 闡述一下CSS Sprites
將一個頁面涉及到的所有圖片都包含到一張大圖中去,然后利用CSS的 background-image,background- repeat,background-position 的組合進行背景定位。利用CSS Sprites能很好地減少網頁的http請求,從而大大的提高頁面的性能;CSS Sprites能減少圖片的字節。
推薦閱讀:
CSS 3D 的魅力(二)
詳解 js 閉包(圖文版)
js 中原型和原型鏈深入理解
「JavaScript 教程」數據類型-數組
A. "string"
B. "function"
C. "object"
D. "null"
A. 輸入:typeof {"x":1} 輸出:"object"
B. 輸入:typeof 1 輸出:"number"
C. 輸入:typeof [{x:1}] 輸出:"array"
D. 輸入:typeof NaN 輸出:"number"
A. undefined
B. null
C. array
D. object
A. Boolean
B. undefined
C. Symbol
D. Array
A. 數據類型分為基本數據類型和引用數據類型
B. JavaScript一共有8種數據類型
C. Object是引用數據類型,且只存儲于堆(heap)中
D. BigInt是可以表示任意精度整數的基本數據類型,存儲于棧(stack)中
答案
DCADC
A. null instanceof Object
B. null===undefined
C. null==undefined
D. NaN==NaN
A. Symbol.for('a')===Symbol.for('a')
B. Symbol('a')===Symbol('a')
C. NaN===NaN
D. {}==={}
var a=1;
var b=[];
var c='';
var d=true;
A. (a || b)===true
B. (b && c)===true
C. (c && d)===true
D. (d || a)===true
A. T
B. F
A. console.log([]===[]);
B. console.log(undefined==0);
C. console.log(undefined==false);
D. console.log(false=='');
A. console.log("12"===12)
B. console.log (NaN===NaN)
C. console.log (typeof(null)===typeof(window))
D. console.log ([1,2,3]===[1,2,3])
注意瀏覽器環境與node環境的差別,比如C選項
A. Number('a')==Number('a')
B. -1==true
C. 3 + '2'===5
D. ![]==''
答案
CADADCD
A. Math.round(7.25)
B. Math.ceil(7.25)
C. round(7.25)
D. Math.rnd(7.25)
A. Math.floor(Math.random()*6)
B. Math.floor(Math.random()*10)
C. Math.floor(Math.random()*11)
D. Math.ceil(Math.random()*10)
A. Math.floor(Math.random()*6)
B. Math.floor(Math.random()*7)
C. Math. floor(Math.random()*8)
答案
A CD(注意D) C
A. T
B. F
A. match()
B. indexOf()
C. search()
D. concat()
答案
A BC
A. {name:"xiaoming",age,"student"}
B. {"name":"xiaoming","age":"student"}
C. {"xiaoming","student"}
D. ["xiaoming","student"]
const fn=function(){}
const res=JSON.stringify(fn)
const num=123
const res=JSON.stringify(num)
const res=JSON.stringify(NaN)
const b=true
const res=JSON.stringify(b)
A. 'function'、'123'、'NaN'、'true'
B. undefined、'123'、undefined、'true'
C. undefined、'123'、'null'、'true'
D. undefined、'123'、'null'、undefined
答案
BC
A. push
B. concat
C. sort
D. shift
A. slice
B. splice
C. sort
D. unshift
A. push
B. pop
C. shift
D. unshift
A. push
B. pop
C. unshift
D. splice
A. concat
B. splice
C. slice
D. join
A. concat
B. shift
C. filter
D. map
A. push
B. slice
C. splice
D. sort
// (1)
const newNums=Array.from(new Set(nums))
// (2)
const newNums=nums.filter((n, i)=> {
return nums.indexOf(n)===i
})
// (3)
const newNums=nums.forEach((n, i)=> {
return nums.indexOf(n)===i
})
// (4)
const newNums=nums.reduce((acc, n, i)=> {
return [].concat(acc, nums.indexOf(n)===i ? n : []
)
})
A. (1)、(2)、(3)、(4)
B. (1)、(3)、(4)
C. (1)、(2)、(4)
D. (1)、(4)
答案
BAABB
BBC
A. 123
B. 123a
C. d123
D. 123def
A. test
B. match
C. exec
D. compile
A. str.replace(`/\s*/g,""`)
B. str.replace(`/^\s|\s$/g,""`)
C. str.replace(`/^\s*/, ""`)
D. str.replace(`/(\s*$)/g, ""`)
答案
CBA
A. encodeURI
B. parseFloat
C. round
D. eval
A. 遵循嚴格模式:"use strict"
B. 將js腳本放在頁面頂部,加快渲染頁面
C. 將js腳本成組打包,減少請求,盡量減少使用閉包
D. 使用非阻塞方式下載js腳本,最小化重繪(repaint)和回流(reflow)
A. parseFloat方法:該方法將一個字符串轉換成對應的小數
B. isNaN方法:該方法用于檢測參數是否為數值型,如果是,返回true,否則,返回false。
C. escape方法: 該方法返回對一個字符串編碼后的結果字符串
D. eval方法:該方法將某個參數字符串作為一個JavaScript執行題
A. chrome
B. Safari
C. 搜狗瀏覽器
D. Firefox
// A
var formatDate=getDate()
// B
var formatDate=new Date()
// C
var formatDate=function (date) {
var y=date.getFullYear();
var m=date.getMonth() + 1;
var d=date.getDate();
return y + '-' + m + '-' + d;
};
// D
var formatDate=function (date) {
var y=date.getFullYear();
var m=date.getMonth() + 1;
m=m < 10 ? '0' + m : m;
var d=date.getDate();
d=d < 10 ? ('0' + d) : d;
return y + '-' + m + '-' + d;
};
A. 需要對元素進行復雜的操作時,可以先隱藏(display:"none"),操作完成后再顯示
B. 需要創建多個DOM節點時,使用DocumentFragment創建完后一次性的加入document
C. 盡量避免用table布局(table元素一旦觸發回流就會導致table里所有的其它元素回流)
D. 盡量不要使用 css 屬性簡寫,如:用border-width, border-style, border-color代替border
答案
CBBDDD
A. eval
B. apply
C. bind
D. call
A. 在使用new實例化對象時, this指向這個實例對象
B. 將對象的方法賦值給變量A。執行A()時 該方法中的this指向這個對象。
C. 在函數定義時,this指向全局變量
D. 在瀏覽器下的全局范圍內,this指向全局對象
A. call與apply都屬于Function.prototype的一個方法,所以每個function實例都有call、apply屬性
B. 兩者傳遞的參數不同,call函數第一個參數都是要傳入給當前對象的對象,apply不是
C. apply傳入的是一個參數數組,也就是將多個參數組合成為一個數組傳入
D. call傳入的則是直接的參數列表。call 方法可將一個函數的對象上下文從初始的上下文改變為由 thisObj 指定的新對象。
答案
AAB
// (1)
function getName() {
name='javascript'
}
getName()
// (2)
const elements={
button: document.getElementById('button')
};
function removeButton() {
document.body.removeChild(elements.button);
}
removeButton()
// (3)
let timer=setInterval(()=> {
const node=document.querySelector('#node')
if(node) {
clearInterval(timer)
}
}, 1000);
A. (1)、(2)、(3)
B. (2)、(3)
C. (1)、(3)
D. (1)、(2)
A. 沒有清理的DOM元素引用
B. 被遺忘的定時器
C. 事件偵聽沒有移除
D. 局部變量不用時,沒有設為null
A. 增加一定的內存消耗
B. 使用不當可能會導致內存泄漏
C. 可以使用閉包模擬私有方法
D. 閉包會改動對象的原型鏈
答案
DDD
A. 原型鏈繼承
B. 構造函數繼承
C. 組合繼承
D. 關聯繼承
A. T
B. F
A. 通過原型鏈繼承的屬性和對象自己定義的屬性等效
B. 通過原型鏈可以模擬對象的私有屬性
C. 在對象上訪問不存在的屬性時,會依次遍歷整條原型鏈
D. 所有 JavaScript 中的對象都是位于原型鏈頂端的 `Object` 的實例
答案
DBC
A. jsonp
B. cookie
C. localStorage
D. sessionStorage
答案
A
A. event.preventDefault()
B. event.prevent()
C. event.drag()
D. event.drop()
A. mouseover
B. click
C. mouseleave
D. mousemove
A. stopDeafault()
B. stopPropagation()
C. preventDefault()
D. preventDefaultEven()
目標 -> 捕獲 -> 冒泡
冒泡 -> 目標 -> 捕獲
目標 -> 冒泡 -> 捕獲
捕獲 -> 目標 -> 冒泡
A. onchange:用戶改變域的內容
B. onkeypress:某個鍵盤的鍵被按下或按住
C. onmousedown:某個鼠標按鍵被按下
D. onblur:元素獲得焦點
答案
ACCDD
A. parentObj.firstChild
B. parentObj.children
C. neborNode.previousSibling
D. neborNode.siblings
A. appendChild(parentNode,newNode);
B. append(parentNode,newNode);
C. parentNode.append(newNode);
D. parentNode.appendChild(newNode);
A. Array
B. Object
C. String
D. Function
A. appendChild(parentNode,newNode);
B. append(parentNode,newNode);
C. parentNode.append(newNode);
D. parentNode.appendChild(newNode);
答案
DDBD
outline
visiblity
font-size
background-color
答案
C
A. 每隔60秒調用一次updateClock()
B. 每隔60毫秒調用一次updateClock()
C. 每隔60分鐘調用一次updateClock()
D. 每分鐘調用60次updateClock()
A. Geolocation.watchPosition()
B. Geolocation.getCurrentPosition()
C. Geolocation.getPosition()
D. Geolocation.Position()
A. 等待1000秒后,再彈出一個對話框
B. 等待1秒鐘后彈出一個對話框
C. 每隔一秒鐘彈出一個對話框
D. 語句報錯,語法有問題
答案
BBC
A. 箭頭函數沒有原型屬性
B. 箭頭函數不綁定this,會捕獲其所在的上下文的this值,作為自己的this值
C. 箭頭函數可以作為構造函數,使用new
D. 箭頭函數不綁定arguments,取而代之用rest參數解決
A. 函數體內this的指向是定義時所在的對象,而不是使用時所在的對象
B. 箭頭函數內不能使用arguments對象
C. 箭頭函數不能使用yield命令
D. 可以使用new創建一個箭頭函數的實例
答案
CD
Promise.all([]).then((res)=> {
console.log('all');
});
Promise.race([]).then((res)=> {
console.log('race');
});
A. all 和 race 都會被輸出
B. all 和 race 都不會被輸出
C. all 會被輸出,而 race 不會被輸出
D. all 不會被輸出,race 會被輸出
A. Promise
B. Generator
C. async
D. Proxy
A. Pending
B. Pause
C. Fulfilled
D. Rejected
答案
CDB
let [a,b, c,d, e]="hello";
A. e="hello";
B. 其它都為undefined
C. 當中 a="h", b="e";
D. 語法報錯
答案
C
A. push
B. concat
C. splice
D. map
A. const a=0xa1
B. const a=076
C. const a=0b21
D. const a=7e2
(1)function
(2) object
(3) null
(4) array
(5) NaN
(6) bigint
(7) regexp
(8) undefined
A. (1)、(2)、(3)、(4)、(5)、(6)、(7)、(8)
B. (1)、(2)、(3)、(8)
C. (1)、(2)、(8)
D. (1)、(2)、(6)、(8)
A. typeof 'string'
B. String('string').toString()
C. 'string'.split('').sort().join('')
D. (function(string){return string})('string')
E. JSON.parse('{"string":"string"}').string
A. parseInt(46.8) `==` parseFloat(46.8)
B. NaN `!==` NaN
C. isNaN('abc') `==` NaN
D. typeof NaN `===` 'number'
A. Array.from(A)
B. [].slice.apply(A)
C. [...A]
D. [].map.call(A, o=> o)
A. null==undefined
B. null===undefined
C. null===null
D. NaN==null
E. NaN===NaN
F. Infinity + 1 !==Infinity
答案
AC ABD D ABDE BD ABCD AC
function Person() { } var person=new Person();
A. 每一個原型都有一個constructor屬性指向關聯的構造函數。
B. 每一個對象都有一個prototype屬性。
C. Object.getPrototypeOf(person)===Person.prototype
D. person.constructor===Person
A. process.nextTick
B. promise
C. setTimeout
D. setInterval
答案
ACD AB
A. let聲明的變量值和類型都可以改變
B. const聲明的常量不可以改變
C. 兩者都不存在變量提升,同時存在暫時性死區,只能在聲明的位置后面使用
D. const可以先聲明再初始化,可以后賦值
A. Promise.all在所有給定的promise都fulfilled后才返回結果
B. Promise.race在給定的promise中,某個fulfilled后才返回結果
C. promise.then的回調函數中,可以返回一個新的promise
D. 對于一個向后臺獲取數據已經產生結果的promise:p1,再次調用p1.then,不會去重新發起請求獲取數據
答案
ABC CD
document.body.style.['background-color']='#fff'
document.body.style.setProperty('background-color', '#fff')
document.body.style='background-color': #fff'
document.body.style.fontSize='14px'
A. event.cancelBubble=true;
B. event.stopPropagation();
C. event.preventDefault();
D. return false;
答案
BCD ABD
var x=typeof x
var res=typeof typeof x;
console.log(x, res)
var arr=[];
console.log(typeof arr, Object.prototype.toString.call(arr));
// case 1
function showCase(value) {
switch(value) {
case 'A':
console.log('Case A');
break;
case 'B':
console.log('Case B');
break;
case undefined:
console.log('Case undefined');
break;
default:
console.log('Case default');
}
}
showCase(new String('A'));
// case 2
function showCase(value) {
switch(value) {
case 'A':
console.log('Case A');
break;
case 'B':
console.log('Case B');
break;
case undefined:
console.log('Case undefined');
break;
default:
console.log('Case default');
}
}
showCase(String('A'));
<html>
<body>
<p id="demo"></p>
<script type="text/javascript">
var x=10;
var y="10";
document.getElementById("demo").innerHTML=Boolean(x==y);
</script>
</body>
</html>
function funcA(x){
var temp=4;
function funcB(y){
document.write( ++x + y + (temp--));
}
funcB(5);
}
funcA(6)
var varArr=function(i,j,str) {
return j==0 ? str : varArr(i,--j,(str+=" " + i[j]));
}
var arr=new Array('apple','orange','peach','lime');
var str=varArr(arr,arr.length,"");
alert(str);
function greetingMaker(greeting) {
function addName(name) {
greeting=greeting.split(' ').reverse().join("-");
return greeting + " " + name;
}
return addName;
}
var daytimeGreeting=greetingMaker("Good Day to you");
alert(daytimeGreeting(name));
String.prototype.GetNum=function() {
var regEx=/[^\d]/g;
return this.replace(regEx, '');
};
var str="a1b2c3";
str=str.GetNum();
alert(str);
function sum(a, b) {
return a + b;
}
sum(1, "2");
var str="我非常喜歡編程";
str.length=3;
console.log(str);
let number=0;
console.log(number++);
console.log(++number);
console.log(number);
function nums(a, b) {
if (a > b)
console.log('a is bigger')
else
console.log('b is bigger')
return a + b
}
console.log(nums(4, 2))
console.log(nums(1, 2))
function side(arr) {
arr[0]=arr[2];
}
function func1(a, b, c=3) {
c=10;
side(arguments);
console.log(a + b + c);
}
function func2(a, b, c) {
c=10;
side(arguments);
console.log(a + b + c);
}
func1(1, 1, 1);
func2(1, 1, 1);
var a=3;
var b=new Number(3);
var c=3;
console.log(a==b);
console.log(a===b);
console.log(b===c);
var a=[];
a.push(1, 2);
a.shift(3, 4);
a.concat([5, 6]);
a.splice(0, 1, 2);
var a={}, b='123', c=123;
a[b]='b';
a[c]='c';
console.log(a[b]);
// example 2
var a={}, b=Symbol('123'), c=Symbol('123');
a[b]='b';
a[c]='c';
console.log(a[b]);
// example 3
var a={}, b={key:'123'}, c={key:'456'};
a[b]='b';
a[c]='c';
console.log(a[b]);
null==undefined
0.1 + 0.2==0.3
typeof NaN
typeof Function
typeof Object
typeof {}
'a' + 1
'a' - 1
Function instanceof Object
Object instanceof Function
var array=[]
for(var i=0; i < 3; i++) {
array.push(()=> i)
}
var newArray=array.map(el=> el())
console.log(newArray)
function a(m, n) {
var b=function (l) {
return l <=m ? l * b(l + 1) : 1;
}
return b(m - n + 1);
}
console.log(a(4, 2));
console.log(typeof undefined==typeof NULL);
console.log(typeof function () {}==typeof class {});
var a=10
var b={
age: 11
}
function fn(x,y) {
--y.age;
return --x;
}
fn(a,b)
var number=4;
var numberFactorial=(function (number){
return (number===0)? 1: number* factorial(number-1)
})(number)
console.log(numberFactorial)
var array=[]
for(var i=0; i < 3; i++) {
array.push(()=> i)
}
var newArray=array.map(el=> el())
console.log(newArray)
function addToList(item, list) {
return list.push(item)
}
const result=addToList("nowcoder", ["hello"])
console.log(result)
const first=()=> { console.log('first'); return false; }
const second=()=> { console.log('second'); return true; }
console.log( first() && second() );
console.log( second() || first() );
var s='12ab3cd', arr=s.split(/\d/);
console.log(arr[3],arr[4])
function getAge(...args) {
console.log(typeof args);
}
getAge(21);
var arr=[1,2,3];
arr.push(arr.shift())
console.log(arr[1],arr[2])
題目解析:this指向題目解析及擴展[3]
關于this還可以看看:可能是最好的 this 解析了...
var x=1;
var obj={
x: 3,
fun:function () {
var x=5;
return this.x;
}
};
var fun=obj.fun;
console.log( obj.fun(), fun() );
var a=5;
function test() {
a=0;
alert(a);
alert(this.a);
var a;
alert(a);
}
new test();
function fun () {
return ()=> {
return ()=> {
return ()=> {
console.log(this.name)
}
}
}
}
var f=fun.call({name: 'foo'})
var t1=f.call({name: 'bar'})()()
var t2=f().call({name: 'baz'})()
var t3=f()().call({name: 'qux'})
let obj1={
a: 1,
foo: ()=> {
console.log(this.a)
}
}
// log1
obj1.foo()
const obj2=obj1.foo
// log2
obj2()
const Person=(name="wang",age=10)=> {
this.name=name;
this.age=age;
return this.name +' is '+ this.age + 'years old'
}
let result=new Person('zhang',11)
console.log(result)
var person={
age: 18,
getAge: function() {
return this.age;
}
};
var getAge=person.getAge
getAge()
var name='global';
var obj={
name: 'local',
foo: function(){
this.name='foo';
}.bind(window)
};
var bar=new obj.foo();
setTimeout(function() {
console.log(window.name);
}, 0);
console.log(bar.name);
var bar3=bar2=bar;
bar2.name='foo2';
console.log(bar3.name);
var obj={
name:"zhangsan",
sayName:function(){
console.info(this.name);
}
}
var wfunc=obj.sayName;
obj.sayName();
wfunc();
var name="lisi";
obj.sayName();
wfunc();
var name='test'
var a={
name: 'ass',
getName: function() {
return this.name;
}
}
var b=a.getName;
b();
const promiseA=Promise.resolve('a')
promiseA. then((res)=> {
console.log(res)
}).then((res)=> {
console.log(res)
})
const promiseB=Promise.resolve('b')
promiseB. then((res)=> {
console.log(res)
})
promiseB. then((res)=> {
console.log(res)
})
setTimeout(()=> {
console.log(1)
}, 0)
const P=new Promise((resolve, reject)=> {
console.log(2)
setTimeout(()=> {
resolve()
console.log(3)
}, 0)
})
P.then(()=> {
console.log(4)
})
console.log(5)
setTimeout(function(){
console.log(1);
}, 0)
new Promise(function(resolve){
console.log(2);
resolve();
console.log(3);
}).then(function(){
console.log(4);
})
console.log(5);
(async ()=> {
console.log(1);
setTimeout(()=> {
console.log(2);
}, 0);
await new Promise((resolve, reject)=> {
console.log(3);
}).then(()=> {
console.log(4);
});
console.log(5);
})();
new Promise((resolve)=> {
console.log('1')
resolve()
console.log('2')
}).then(()=> {
console.log('3')
})
setTimeout(()=> {
console.log('4')
})
console.log('5')
var p1=new Promise(function(resolve, reject){
resolve("2")
})
setTimeout(function(){
console.log("1")
},10)
p1.then(function(value){
console.log(value)
})
setTimeout(function(){
console.log("3")
},0)
setTimeout(function() {
console.log('setTimeout');
}, 0);
Promise.resolve().then(function() {
console.log('promise1');
}).then(function() {
console.log('promise2');
});
setTimeout(function() {
console.log(1)
},0)
new Promise(function executor(resolve){
console.log(2)
for (var i=0; i<10000; i++) {
i - 9999 && resolve()
}
console.log(3)
}).then(function() {
console.log(4)
})
console.log(5)
<div class="outer">
<div class="inner"></div>
</div>
對應的js代碼如下:
var outer=document.querySelector('.outer');
var inner=document.querySelector('.inner');
function onClick() {
console.log('click');
setTimeout(function() {
console.log('timeout');
}, 0);
Promise.resolve().then(function() {
console.log('promise');
});
outer.setAttribute('data-random', Math.random());
}
inner.addEventListener('click', onClick);
outer.addEventListener('click', onClick);
當點擊class為inner的div塊時,控制臺依次輸出結果是什么? 10. 下面程序的輸出結果是?
(async ()=> {
console.log(1);
setTimeout(()=> {
console.log(2);
}, 0);
await new Promise((resolve, reject)=> {
console.log(3);
}).then(()=> {
console.log(4);
});
console.log(5);
})();
setTimeout(()=> console.log('a'));
Promise.resolve().then(
()=> console.log('b’);
).then(
()=> Promise.resolve('c').then(
(data)=> {
setTimeout(()=> console.log('d'));
console.log('f');
return data;
}
)
).then(data=> console.log(data));
console.log('one');
setTimeout(function() { console.log('two'); }, 0);
Promise.resolve()
.then(function() { console.log('three'); })
console.log('four');
setTimeout(function () {
console.log(C)
},0)
console.log('D')
new Promise(function(resolve){
console.log('E')
resolve()
console.log('F')
}).then(function() {
console.log('G')
})
console.log('H')
function log(msg, time) {
return new Promise((resolve)=> {
setTimeout(()=> {
console.log(msg);
resolve();
}, time);
});
}
則下面三段代碼輸出的結果是:
// 第一段代碼:
(async ()=> {
for (let i=0; i < 5; i++) {
await log(i, 1000);
}
})();
// 第二段代碼:
(async ()=> {
[ 1, 2, 3, 4 ].forEach(async (i)=> {
await log(i, 1000);
});
})();
// 第三段代碼:
(async ()=> {
for (const i of [ 1, 2, 3, 4 ]) {
await log(i, 1000);
}
})();
關于原型JS:看完這篇文章,徹底了解 “原型” & “this”
傳送門: 原型與原型鏈題目解析[4]
function Fn1(name) {
if(name){
this.name=name;
}
}
Fn1.prototype.name="jack"
let a=new Fn1();
console.log('a:', a.name);
function Fn2(name) {
this.name=name;
}
Fn2.prototype.name="jack"
let b=new Fn2();
console.log('b:', b.name);
var Foo=(function() {
var x=0;
function Foo() {}
Foo.prototype.increment=function() {
++x;
console.log(x);
};
return Foo;
})();
var a=new Foo();
a.increment();
a.increment();
var b=new Foo();
a.increment();
var name='Jay'
function Person(name){
this.name=name;
console.log(this.name)
}
var a=Person('Tom')
console.log(name)
console.log(a)
var b=new Person('Michael')
console.log(b)
class A{}
class B extends A{}
const a=new A()
const b=new B()
a.__proto__
b.__proto__
B. __proto__
B. prototype.__proto__
b.__proto__.__proto__
function test() {
getName=function() {
Promise.resolve().then(()=> console.log(0));
console.log(1);
};
return this;
}
test.getName=function() {
setTimeout(()=> console.log(2), 0);
console.log(3);
};
test.prototype.getName=function() {
console.log(4);
};
var getName=function() {
console.log(5);
};
function getName() {
console.log(6);
}
test.getName();
getName();
test().getName();
getName();
new test.getName();
new test().getName();
new new test().getName();
var tmp={};
var A=function() {};
A. prototype=tmp;
var a=new A();
A. prototype={};
var b=Object.create(tmp);
b.constructor=A. constructor;
console.log(a instanceof A);
console.log(b instanceof A);
function Foo(){}
Foo.prototype.z=3;
var obj=new Foo();
console.info(obj.z)
obj.z=10;
console.info(obj.z);
delete obj.z;
console.info(obj.z);
const Book={
price: 32
}
const book=Object.create(Book);
book.type='Math';
delete book.price;
delete book.type;
console.log(book.price);
console.log(book.type);
function sayHello() {
console.log(name);
console.log(age);
var name="Tom";
let age=18;
}
sayHello();
for (var i=0; i < 3; i++) {
setTimeout(_=> {
console.log(i)
})
}
for (let i=0; i < 3; i++) {
setTimeout(_=> {
console.log(i)
})
}
console.log(a);
var a='a';
console.log(b);
let b='b';
var foo="Hello";
(function(){
var bar=" World";
alert(foo + bar);
})();
alert(foo + bar);
var a=10;
(function () {
console.log(a)
a=5
console.log(window.a)
var a=20;
console.log(a)
})()
const a=10
function runFunction() {
const a=20
console.log('inside', a)
}
runFunction()
console.log('outside', a)
"use strict"
var name='Jay'
var person={
name: 'Wang',
pro: {
name: 'Michael',
getName: function () {
return this.name
}
}
}
console.log(person.pro.getName)
var people=person.pro.getName
console.log(people())
<ul>
<li>1</li>
<li>2</li>
<li>3</li>
<li>4</li>
</ul>
<script>
var elements=document.getElementsByTagName("li");
for (var i=0;i<elements.length;i++){
elements[i].onclick=function( ){
alert(i);
};
}
compute(10,100);
var compute=function(A,B) {
console.info(A * B) ;
};
function compute(A,B){
console.info(A + B);
}
function compute(A,B){
console.info((A + B)*2);
}
compute(2,10);
meili()
function meili() {
console.log("meili")
}
mogu()
var mogu=function() {
console.log("mogu")
}
// 片段1
check('first');
function check(ars){
console.log(ars);
}
// 片段2
check('second');
var check=function(ars){
console.log(ars);
}
const student={name: 'ZhangSan'}
Object.defineProperty(student, 'age', {value: 22})
console.log(student)
console.log(Object.keys(student))
function * cb(x, y) {
for(let i=Math.ceil(x); i <=y; i++) {
yield i;
}
}
var a=cb(6, 9);
console.log(a.next());
console.log(a.next());
function fn(...args) {
console.log(typeof args);
}
fn(21);
Promise.reject(0)
.catch(e=> e)
.catch(e=> console.log(e))
class Person {
constructor (name) {
this.name=name;
}
greet () {
console.log(`Hi, my name is ${this.name}`);
}
greetDelay (time) {
setTimeout(()=> {
console.log(`Hi, my name is ${this.name}`);
}, time);
}
}
function getPersonInfo (one, two, three) {
console.log(one)
console.log(two)
console.log(three)
}
const person='Lydia'
const age=21
getPersonInfo `${person} is ${age} years old`
// module.js
export default ()=> "Hello world"
export const name="nowcoder"
// index.js
import * as data from "./module"
console.log(data)
// a.js
let a=1
let b={}
setTimeout(()=> {
a=2
b.b=2
}, 100)
module.exports={ a, b }
// b.js
const a=require('./a')
console.log(a.a)
console.log(a.b)
setTimeout(()=> {
console.log(a.a)
console.log(a.b)
}, 500)
<div id="box1">
<div id="box2">
content
</div>
</div>
<script>
const $=document.querySelector.bind(document);
const box1=$('#box1');
const box2=$('#box2');
box1.addEventListener('click', ()=>{
console.log('box1 true');
}, true);
box1.addEventListener('click', ()=>{
console.log('box1 false');
}, false);
box2.addEventListener('click', ()=>{
console.log('box2 true');
}, true);
box2.addEventListener('click', ()=>{
console.log('box2 false');
}, false);
</script>
$(function () {
function fn1( value ) {
alert( value );
}
function fn2( value ) {
fn1("A");
return false;
}
var callbacks=$.Callbacks();
callbacks.add( fn1 );
callbacks.fire( "B" );
callbacks.add( fn2 );
callbacks.fire( "C" );
})
<html>
<head>
<script type="text/javascript" src="/jquery/jquery.js"></script>
<script type="text/javascript">
$(document).ready(function(){
$("button").click(function(){
$("<b>Hello World!</b>").______("p");
});
});
</script>
</head>
<body>
<p>This is a paragraph.</p>
<p>This is another paragraph.</p>
<button>在每個p元素的結尾添加內容</button>
</body>
</html>
<div id="box1">
<div id="box2">
content
</div>
</div>
<script>
const $=document.querySelector.bind(document);
const box1=$('#box1');
const box2=$('#box2');
box1.addEventListener('click', ()=> {
console.log('box1 true');
}, true);
box1.addEventListener('click', ()=> {
console.log('box1 false');
}, false);
box2.addEventListener('click', ()=> {
console.log('box2 true');
}, true);
box2.addEventListener('click', ()=> {
console.log('box2 false');
}, false);
</script>
、關于HTML語義化,你知道都有哪些標簽?
語義化就是讓計算機能夠快速讀懂內容,高效的處理信息。搜索引擎只能通過標簽來判斷內容的語義,因為頁面的很大一部分流量來自搜索引擎,要使頁面盡可能地對搜索引擎友好,所以盡可能地使用語義化標簽,如:
div是division分離,span是span范圍,table是表格,ol是orderList有序列表,ul是unorderList無序列表,li是list item列表選項,html5進一步推進web語義化的發展,使用了一些新的標簽有header、artical、address等。
2、HTML標簽分類有哪些?都有啥特點?
默認寬度是100%
塊級標簽獨占一行
塊級標簽可以使用height設置高度
常見塊級標簽:div、p、h1~h6、ol、ul、table、form等等。
默認寬度由內容撐開
行級標簽不會自動換行,從左到右一次排列
行級標簽height設置高度失效,高度由內容撐開。
常見行級標簽:span、a、br、strong、lable、i、em。
結合行級和塊級的優點
可以設置元素的寬高
還可以將多個元素顯示在一行從左到右一次排列。
常見行內塊標簽:img、input。
3、網頁編碼設置有幾種方式?
Charset屬性規定HTML文檔的字符編碼,常見的屬性值有以下幾個:
4、HTML的框架優缺點有哪些?
Html框架有iframe和frame兩個,將多個頁面通過一個瀏覽器窗口顯示。
框架的優點:
缺點:
5、HTML5有哪些新特性,移除了哪些元素?
H5新增了圖像、位置、存儲、多任務等功能。
新增元素:
移除元素:
Html5新增了 27 個元素,廢棄了 16 個元素,根據現有的標準規范,把 HTML5 的元素按優先級定義為結構性屬性、級塊性元素、行內語義性元素和交互性元素 4 大類。
6、如何區分HTML和HTML5?
DOCUMENT聲明方式是區分的重要元素。
根據新增加的結構、功能來區分。H5有好多新增語義化標簽。
7、H5文件離線存儲怎么使用,工作原理是什么?
在線情況下,瀏覽器發現html頭部有manifest屬性,它會請求manifest文件,如果是第一次訪問那么瀏覽器就會根據manifest文件的內容下載相應的資源,并進行離線存儲。如果已經訪問過并且資源已經離線存儲了,那么瀏覽器就會使用離線的資源加載頁面。然后瀏覽器會對比新的manifest文件與舊的manifest文件,如果文件沒有改變,就不會有任何操作,如果文件改變了,那么就會重新下載資源,并進行離線緩存。
頁面頭部加入manifest屬性。如:<html manifest="demo.appcache">
在cache.manifest文件中編寫離線存儲的資源。
8、Cookies,sessionStorage和localStorage的區別?
共同點:都是保存在瀏覽器端,而且都是同源的。
區別:
9、title與h1的區別、b與strong的區別、i與em的區別?
title屬性沒有明確意義,只表示標題,h1表示層次明確的標題,對頁面信息抓取也有很大的影響。
strong標明重點內容,語氣加強含義,b表示無意義的視覺表示
em表示強調文本,i是斜體,是無意義的視覺表示
視覺樣式標簽:b、u、i、s
語義樣式標簽:strong、em、ins、del、code
10、viewport 所有屬性 ?
viewport是用戶網頁的可視區域,使用meta設置viewport時有很多屬性,分別對以下各個屬性介紹
安卓中還支持:target-densitydpi,表示目標設備的密度等級,作用是決定css中的1px 代表多少物理像素。
11、meta標簽的name屬性值?
name屬性主要用于描述網頁,與之對應的屬性值為content,content中的內容主要是便于搜索機器人查找信息和分類信息用的。
Meta標簽的name屬性語法格式是:
<meta name=”參數”content=”具體的參數值”>
Name主要有以下幾個參數:
Content的參數主要有name的參數來決定,如果是關鍵字的時候,多個關鍵字之間使用逗號隔開,一般使用5個關鍵字為宜;如果是描述的時候,描述長度一般控制在200字左右;如果是索引的時候,一般使用inde、noindex、none、all,默認是all。
*請認真填寫需求信息,我們會在24小時內與您取得聯系。