前言
最近在看一些網上的面試題的時候,發現有很多零碎的、容易被忽略的知識點,有些是概念性的技術點,有些是不經常用的冷知識,不經常用可能印象不深刻,在這裡做一個簡單的小總結。
(以下只是我看到的,覺得有必要整理的,後續會更新~)
1. 實現多行文字溢位顯示...
單行文字溢位顯示省略號這可能比較常用,多行溢位顯示還真用的不多。
貼程式碼:
display: -webkit-box;
-webkit-box-orient: vertical;
-webkit-line-clamp: 3;
overflow: hidden;
複製程式碼
適用範圍:
因使用了WebKit的CSS擴充套件屬性,該方法適用於WebKit瀏覽器及移動端;
注:
1、-webkit-line-clamp用來限制在一個塊元素顯示的文字的行數。
為了實現該效果,它需要組合其他的WebKit屬性。常見結合屬性:
2、display: -webkit-box; 必須結合的屬性 ,將物件作為彈性伸縮盒子模型顯示 。
3、-webkit-box-orient 必須結合的屬性 ,設定或檢索伸縮盒物件的子元素的排列方式 。
複製程式碼
2. 讓圖文不可被複制
有時候可能有要維護版權,禁止盜圖之類的這種需求。。。
-webkit-user-select: none;
-ms-user-select: none;
-moz-user-select: none;
-khtml-user-select: none;
user-select: none;
複製程式碼
思路:
1、答案區域監聽copy事件,並阻止這個事件的預設行為。
2、獲取選中的內容(window.getSelection())加上版權資訊,然後設定到剪下板(clipboarddata.setData())。
3. 盒子垂直水平居中
面試必問的題目,雖然很簡單,也有多種實現方法,在這裡列出:
1、定位 盒子寬高已知
position: absolute;
left: 50%;
top: 50%;
margin-left:-自身一半寬度;
margin-top: -自身一半高度;
2、table-cell佈局
父級 display: table-cell; vertical-align: middle;
子級 margin: 0 auto;
3、定位 + transform ; 適用於 子盒子 寬高不定時;
position: relative / absolute;
/*top和left偏移各為50%*/
top: 50%;
left: 50%;
/*translate(-50%,-50%) 偏移自身的寬和高的-50%*/
transform: translate(-50%, -50%);
4、flex 佈局
父級:
/*flex 佈局*/
display: flex;
/*實現垂直居中*/
align-items: center;
/*實現水平居中*/
justify-content: center;
再加一種水平方向上居中 :margin-left : 50% ; transform: translateX(-50%);
複製程式碼
4. 快速的讓一個陣列亂序排列
var arr = [1,2,3,4,5,6,7,8,9,10];
arr.sort(function(){
return Math.random() - 0.5;
})
console.log(arr);
複製程式碼
結果:
原理:
首先 sort()
的引數是一個比較函式;
如果指明瞭 compareFunction ,那麼陣列會按照呼叫該函式的返回值排序。
即 a 和 b 是兩個將要被比較的元素:
- 如果 compareFunction(a, b) 小於 0 ,那麼 a 會被排列到 b 之前;
- 如果 compareFunction(a, b) 等於 0 , a 和 b 的相對位置不變。
- 如果 compareFunction(a, b) 大於 0 , b 會被排列到 a 之前。
所以,比較函式格式如下:
function compare(a, b) {
if (a < b ) { // 按某種排序標準進行比較, a 小於 b
return -1;
}
if (a > b ) {
return 1;
}
// a must be equal to b
return 0;
}
複製程式碼
要比較數字而非字串,比較函式可以簡單的以 a 減 b,如下的函式將會將陣列升序排列
function compareNumbers(a, b) {
return a - b;
}
複製程式碼
一開始這個陣列是按照升序排列的,在比較函式裡,當Math.random() > 0.5
的時候,當前的這個數和他後邊的數不會互換位置,進行下一輪比較,以此類推,直到 Math.random() < 0.5
的時候,當前數和他後邊的數互換位置,一共進行9次排列。
程式如下:
5.陣列去重
原生方法用indexOf()
迴圈當前陣列即可去重,但這不是我說的重點
其實用ES6的方法,一行程式碼就搞定,誰還會去寫那三五行的for迴圈?
ES6中新增了Set資料結構,類似於陣列,但是 它的成員都是唯一的 ,其建構函式可以接受一個陣列作為引數。
let array = [1, 1, 1, 1, 2, 3, 4, 4, 5, 3];
let set = new Set(array);
console.log(set);
// => Set {1, 2, 3, 4, 5}
複製程式碼
ES6中Array新增了一個靜態方法Array.from,可以把類似陣列的物件轉換為陣列。
改進後:
let array = [1, 1, 1, 1, 2, 3, 4, 4, 5, 3];
let set = Array.from(new Set(array));
console.log(set);
// => Set {1, 2, 3, 4, 5}
複製程式碼
還是附上ES5的方法吧:
function unique(arr) {
var newArr = [];
for(var i=0; i < arr.length; i++) {
if (newArr.indexOf(arr.[i]) === -1) {
newArr.push(arr[i])
}
return newArr;
}
}
複製程式碼
6. javascript的typeof返回哪些資料型別?
object number function boolean undefined string
複製程式碼
(面試的時候被問到過,回答的不完整,心痛。。。)
7. javascript的本地物件,內建物件和宿主物件?
- 本地物件為array obj regexp等可以new例項化,具體有:
Object、Function、Array、String、Boolean、Number、Date、RegExp、
Error、EvalError、RangeError、ReferenceError、SyntaxError、TypeError、URIError
複製程式碼
-
內建物件為Global Math 等不可以例項化的 宿主為瀏覽器自帶的
document,window
等。 -
所有非本地物件都是宿主物件(host object),即由 ECMAScript 實現的宿主環境提供的物件。