1.var的變數提升的底層原理是什麼?
JS
引擎的工作方式是
1)先解析程式碼,獲取所有被宣告的變數;
2)然後再執行。
也就是分為預處理和執行這兩個階段。
變數提升:所有用var
宣告變數的語句都會被提升到程式碼頭部。另外function
也可看作變數宣告,也存在變數提升的情況。
2.垂直水平居中的方式?
1)定位
父元素設定為:position: relative
;
子元素設定為:position: absolute
;
距上50%
,據左50%
,然後減去元素自身寬度的距離就可以實現
width: 100px;
height: 100px;
position: absolute;
left: 50%;
top: 50%;
margin: -50px 0 0 -50px;
複製程式碼
2)flex佈局
display: flex; //flex佈局
justify-content: center; //使子專案水平居中
align-items: center; //使子專案垂直居中
複製程式碼
3)tabel-cell
display: table-cell;
vertical-align: middle;//使子元素垂直居中
text-align: center;//使子元素水平居中
複製程式碼
3.如何判斷一個物件是否為陣列
Array.prototype.isPrototypeOf(obj)
方法,判定Array
是不是在obj
的原型鏈中,如果是,則返回true
,否則false
;obj instanceof Array
;Object.prototype.toString.call(obj);(==="[object Array]")
Array.isArray(obj)
;
4.行內元素和塊級元素有哪些?img屬於什麼元素?
塊元素(block element)
  * address - 地址
  * blockquote - 塊引用
  * center - 舉中對齊塊
  * dir - 目錄列表
  * div - 常用塊級容易,也是css layout的主要標籤
  * dl - 定義列表
  * fieldset - form控制組
  * form - 互動表單
  * h1 - 大標題
  * h2 - 副標題
  * h3 - 3級標題
  * h4 - 4級標題
  * h5 - 5級標題
  * h6 - 6級標題
  * hr - 水平分隔線
  * isindex - input prompt
  * menu - 選單列表
  * noframes - frames可選內容,(對於不支援frame的瀏覽器顯示此區塊內容
  * noscript - 可選指令碼內容(對於不支援script的瀏覽器顯示此內容)
  * ol - 排序表單
  * p - 段落
  * pre - 格式化文字
  * table - 表格
  * ul - 非排序列表
內聯元素(inline element)
  * a - 錨點
  * abbr - 縮寫
  * acronym - 首字
  * b - 粗體(不推薦)
  * bdo - bidi override
  * big - 大字型
  * br - 換行
  * cite - 引用
  * code - 計算機程式碼(在引用原始碼的時候需要)
  * dfn - 定義欄位
  * em - 強調
  * font - 字型設定(不推薦)
  * i - 斜體
  * img - 圖片
  * input - 輸入框
  * kbd - 定義鍵盤文字
  * label - 表格標籤
  * q - 短引用
  * s - 中劃線(不推薦)
  * samp - 定義範例計算機程式碼
  * select - 專案選擇
  * small - 小字型文字
  * span - 常用內聯容器,定義文字內區塊
  * strike - 中劃線
  * strong - 粗體強調
  * sub - 下標
  * sup - 上標
  * textarea - 多行文字輸入框
  * tt - 電傳文字
  * u - 下劃線
  * var - 定義變數
可變元素
  可變元素為根據上下文語境決定該元素為塊元素或者內聯元素。
  * applet - java applet
  * button - 按鈕
  * del - 刪除文字
  * iframe - inline frame
  * ins - 插入的文字
  * map - 圖片區塊(map)
  * object - object物件
  * script - 客戶端指令碼
複製程式碼
img
、input
屬於行內替換元素。height/width/padding/margin
均可用。效果等於塊元素。
5.margin塌陷?
當兩個盒子在垂直方向上設定margin
值時,會出現塌陷現象
解決方法:
1.給父盒子新增border
2.給父盒子新增padding-top
3.給父盒子新增overflow:hidden
4.父盒子:position:fixed
5.父盒子:display:table
6.給子元素的前面新增一個兄弟元素
屬性為:content:"";
overflow:hidden;
複製程式碼
解決方法的主要原理就是設定盒子為BFC
BFC
為頁面上的一個隔離的獨立容器,容器裡面的子元素不會影響到外面的元素。
6.偽類與偽元素的區別
1)偽類
偽類用於選擇DOM
樹之外的資訊,或是不能用簡單選擇器進行表示的資訊。前者包含那些匹配指定狀態的元素,比如:link,:visited,:hover,:active
;後者包含那些滿足一定邏輯條件的DOM樹中的元素,比如:first-child,:first-of-type,:target
。
2)偽元素
偽元素為DOM
樹沒有定義的虛擬元素。不同於其他選擇器,它不以元素元素為最小選擇單元,它選擇的是元素制定單元。比如::before
表示選擇元素內容的之前內容;::selection
表示選擇元素被選中的內容。
3)偽類/偽元素一覽表
<偽類如下>
/*
:active 選擇正在被啟用的元素
:hover 選擇被滑鼠懸浮著元素
:link 選擇未被訪問的元素
:visited 選擇已被訪問的元素
:first-child 選擇滿足是其父元素的第一個子元素的元素
:lang 選擇帶有指定 lang 屬性的元素
:focus 選擇擁有鍵盤輸入焦點的元素
:enable 選擇每個已啟動的元素
:disable 選擇每個已禁止的元素
:checked 選擇每個被選中的元素
:target 選擇當前的錨點元素
*/
複製程式碼
<偽元素如下>
/*
::first-letter 選擇指定元素的第一個單詞
::first-line 選擇指定元素的第一行
::after 在指定元素的內容後面插入內容
::before 在指定元素的內容前面插入內容
::selection 選擇指定元素中被使用者選中的內容
*/
複製程式碼
7.介紹一下JS的基本資料型別
Undefined,Null,Boolean,Number,String
8.JavaScript的typeof返回那些資料型別
undefined,string,boolean,number,symbol(ES6),object,function
9.介紹一下JS有哪些內建物件?
資料封裝類物件:Object、Array、Boolean、Number、String
其他物件:Function、Argument、Math、Date、RegExp、Error
10.null和undefined的區別
1)null
表示一個物件被定義了,值為“空值”;undefined
表示不存在這個值。
2)變數被定義了,但是沒有賦值時,就等於undefined
。
3)注意:在驗證null
時,要用===
,因為==
無法區分null
和undefined
。
typeof null // "object"
說明:null
是一個沒有任何屬性和方法的物件
11.對JSON的瞭解
JSON(JavaScript Object Notation)
是一種輕量級的資料交換格式。- 它是基於
JavaScript
的一個子集。資料格式簡單,易於讀寫,佔用頻寬小。 如:{"age":"12", "name":"back"}
12.列舉3種強制型別轉換和2種隱式型別轉換
強制:parseInt(),parseFloat(),Number()
,(Boolean(),String()
)
隱式:==
,!
13.input的type屬性有哪些?
text
:文字框
password
:密碼
radio
:單選按鈕
checkbox
:核取方塊
file
:檔案選擇域
hidden
:隱藏域
button
:按鈕
reset
:重置按鈕
submit
:表單提交按鈕
image
:圖片按鈕
14.IE和標準下有哪些相容性的寫法
var ev = ev || window.event
document.documentElement.clientWidth || document.body.clientWidth
var target = ev.srcElement||ev.target
複製程式碼
15.如何阻止事件冒泡
ie
:阻止冒泡ev.cancelBubble = true
;
非IE
ev.stopPropagation()
;
16.如何阻止預設事件
1)return false
;2) ev.preventDefault()
;