TC - front end
JS
1、一個陣列 par 中存放有多個人員的資訊,每個人員的資訊由年齡 age 和姓名 name 組成,如{age: 2, name: ‘xx’}。請寫一段 JS 程式,對這個陣列按年齡從小到大進行排序。
function getAge (arr) {
return arr.sort(function(x,y){
return x.age - y.age;
});
}
2、有字串 var = ‘abc345efgabcab’,請寫出 3 條 JS 語句分別實現如下 3 個功能:
1)去掉字串中的a、b、c 字元,形成結果:‘345efg’
2)將字串中的數字用中括號括起來,形成結果:‘abc[3][4][5]efgabcab’
3)將字串中的每個數字的值分別乘以 2,形成結果:‘abc6810efgabcab’
str.replace(/[a-c]/g,’’);
str.replace(/(\d)/g, “[$1]”);
str.replace(/(\d)/g, function(a){return a*2});
3、請寫一段 JS 程式類,定義一個列表類List,該類包含兩個成員:屬性 length(表示列表中的元素個數)和方法 add (像列表中新增元素),其中要求建構函式和 add 方法的引數為動態引數。
function List(arrArg){
this.arr = arrArg || [];
this.arrlength = this.arr.length || 0;
}
List.prototype = {
constructor: List,
add: function(arg) {
this.arr.push(arg);
this.arrlength = this.arr.length;
return this.arr;
}
}
4、請問以下 JS 程式有什麼問題?應該如何優化?
function setStyle(element) {
element.style.fontWeight = “bold”;
element.style.textDecoration = “none”;
element.style.color = “#000000”;
}
我這邊優化如下:
function setStyle(element) {
if (!element.style) {
return;
}
var eleStyle = element.style;
eleStyle.fontWeight = “bold”;
eleStyle.textDecoration = “none”;
eleStyle.color = “#000000”;
}
5、請寫出一下正規表示式:
1)匹配一個全部是數字的字串
2)提取一個 url 所使用的協議型別如 http、ftp 和 host 名稱
我這邊實現如下:
// 1)
var str = ‘1234’;
/^\d+KaTeX parse error: Expected 'EOF', got '\/' at position 81: …a-zA-Z]{3,5})\:\̲/̲\/)?(www\.)?([a…/);
6、請寫出下面 JS 程式中幾個 document.write 的結果:
function Parent() {
this.a = 1;
this.b = [1, 2, this.a];
this.c = {demo: 5};
this.show = function() {
document.write(this.a + ’ ’ + this.c.demo + ‘:’ + this.b + ‘
’)
}
}
function Child() {
this.a = 2;
this.change = function() {
this.b.push(this.a);
this.a = this.b.length;
this.c.demo = this.a++;
}
}
Child.prototype = new Parent();
var parent = new Parent();
var child1 = new Child();
var child2 = new Child();
child1.a = 11;
child2.a = 12;
parent.show();
child1.show();
child2.show();
child1.change();
child2.change();
parent.show();
child1.show();
child2.show();
7、請用 js 程式實現二分演算法。
8、JS作用域:
for es5
1、沒有var宣告屬於全域性申明,一般不太規範
2、變數提前在申明前使用,變數提升
3、js沒有塊級作用域,只有函式作用域
4、函式內部可以訪問外部變數,外部無法訪問內部變數
5、函式中變數查詢是就近原則去尋找
作用域鏈:多層巢狀,最深層的作用域在作用域鏈的最開始層(水平描述在最左側),最上層的作用域window在作用域鏈的最終層(水平描述在最右側),作用域鏈最深訪問處理越耗時;
9、變數查詢順序
javascript搜尋引擎LHS和RHS作用域鏈查詢
LHS - 等號左側: 試圖找到變數容器的本身,對其賦值;
RHS - 等號右側:找到變數
非嚴格模式下,a = 4; console.log(a); // LHS查詢,找不到變數給它賦值全域性變數
console.log(b); b = 4; // RHS查詢,找不到變數,則返回引用異常未定義ReferenceError:b is not defined
func();
// 先通過RHS查詢變數,可以找到定義不報ReferenceError錯, 但使用不合法;
// func 為undefined,執行了一個函式
var func = function () {
console.log(100);
};
ReferenceError代表作用域判別失敗,也就是作用域內查詢變數失敗。
TypeError代表作用域判別成功,但是對結果的操作是非法或者不合理的。
10、JS事件模型
DOM0級模型
html事件繫結:
html事件
js事件繫結:
var ep = document.getElementById(‘eventP’);
ep.onclick = fun;
事件移除:
ep.onclick = null;
IE事件模型
var btn = document.getElementById(’.btn’);
btn.attachEvent(‘onclick’, showMessage);
btn.detachEvent(‘onclick’, showMessage);
DOM2級模型
見 11、
11、瀏覽器事件模型
捕獲階段
目標階段
冒泡階段
一個3層元素結構模型,點選最裡層元素,觸發流程:
由外向裡層層捕獲,到目標,層層向上冒泡,
如果給目標繫結捕獲和冒泡事件,即觸發2次,
addEventListener(event, fn, Boolean);
// event, 事件方法
// fn 執行事件函式
// Booolean, true為捕獲階段觸發事件,false為冒泡階段觸發事件
attachEvent(on + ‘event’, fn); // ie事件模型, 僅有冒泡階段事件處理,沒有捕獲階段的程式控制,但整個事件流程也是有捕獲和冒泡的;
阻止事件傳播
e.stopPropagation(),阻止事件傳播既可以是在冒泡階段,也可以是在捕獲階段;
(e.stopPropagation()很少用到在捕獲階段去阻止事件的傳播,大家就以為e.stopPropagation()只能阻止事件在冒泡階段傳播。)
阻止預設行為
e.preventDefault(), 預設行為是指:點選a標籤就轉跳到其他頁面、拖拽一個圖片到瀏覽器會自動開啟、點選表單的提交按鈕會提交表單等等,因為有的時候我們並不希望發生這些事情,所以需要阻止預設行為。
DOM事件模型中的事件物件常用屬性:
type用於獲取事件型別
target獲取事件目標
stopPropagation()阻止事件冒泡
preventDefault()阻止事件預設行為
IE事件模型中的事件物件常用屬性:
type用於獲取事件型別
srcElement獲取事件目標
cancelBubble阻止事件冒泡
returnValue阻止事件預設行為
自定義事件:
JS中已經內建了很多事件,如click, mouseover等等,但是內建事件畢竟有限,有時候我們想自己定義一些事件,例如三連擊,threeclick。如何實現自定義事件呢?
首先要建立一個事件。可以使用以下方式:
var event = new Event('threeclick', {"bubbles":true, "cancelable":false});
然後我們需要為事件註冊監聽函式:
target.addEventListener('threeclick', hello, false);
最後我們要在合適的時機觸發該事件,我們可以使用dispatchEvent函式。該方法在當前節點觸發指定事件,從而觸發監聽函式執行。該方法返回一個布林值,只要有一個監聽函式呼叫了Event.preventDefault(), 則返回false, 否則返回true。
target.dispatchEvent(event);
JQuery Event模型
JQuery解決的一個主要問題就是瀏覽器的相容問題,它有自己的事件模型實現方式。它主要有以下特性:
重定義了JQuery.Event物件, 統一了事件屬性和方法, 統一了事件模型
可以在一個事件型別上新增多個事件處理函式, 可以一次新增多個事件型別的事件處理函式
支援自定義事件(事件名稱空間)
提供了toggle, hover組合事件
提供了one, live-die, delegate-undelegate
提供了統一的事件封裝, 繫結, 執行, 銷燬機制
$(document).ready();
....
12、事件捕獲作用
13、事件代理原理/事件委託
事件代理: 事件在冒泡過程中會上傳到父節點,因此可以把子節點的監聽函式定義在父節點上,由父節點的監聽函式統一處理多個子元素的事件,這種方式稱為事件代理(Event delegation)。
我們有一個div元素,它包含三個按鈕:
<div id="box">
<input type="button" value="按鈕" id="btn">
<input type="button" value="按鈕2" id="btn2">
<input type="button" value="按鈕3" id="btn3">
</div>
我們可以在父節點上一次性的為所有子節點註冊監聽函式:
var box = document.getElementById('box');
box.addEventListener('click', function(event) {
if (event.target.tagName.toLowerCase() === 'input') {
// some code
}
});
14、脫敏資料:可逆脫敏(進行序列化等轉化可轉化回來的資料)與不可逆脫敏(將資料轉化為某種資料形式,不可轉化回原始資料)
15、js和flash這樣的外掛是如何互動的呢? ExternalInterface
flash使用的actionscript跟javascript是非常相通的,下面描述如何互相呼叫函式:
1:javascript呼叫flash中的函式
在flash的指令碼中增加
程式碼:import flash.external.ExternalInterface;
假定要呼叫的函式是hello,as程式碼如下
程式碼:function hello(){
return “hello”;
}
ExternalInterface.addCallback(“hello”, this, hello);
//第一個引數為匯出函式名,第三個引數為as的函式名
這樣就可以在js中呼叫as的hello函式了
2:flash呼叫js的函式
ExternalInterface.call(“hello2”, “jacky”);
//第一個引數是js的函式名,後面的是js函式的引數
3:如何互相呼叫
html程式碼如下:
程式碼:<object type="application/x-shockwave-flash" data="test.swf" width="525" height="390" name="test">
<param name="allowScriptAccess" value="sameDomain" />
<param name="movie" value="test.swf" />
<param name="quality" value="high" />
<param name="scale" value="noScale" />
<param name="wmode" value="transparent" />
</object>
function callFromFlash() {
var a=thisMovie("test").hello();
alert(a);
}
function thisMovie(movieName) {
if (navigator.appName.indexOf("Microsoft") != -1) {
return window[movieName]
}
else {
return document[movieName]
}
}
最近開發網站時遇到一個問題,如何與FLASH裡的AS指令碼進行互動?
需要在Flash裡讀取網頁JavaScript裡的值,用於控制兩個Flash協同顯示內容。
最後終於在Flash找到了ExternalInterface類,要求環境:AS 1.0,Flash Player 8.0以上
一、在網頁中通過JavaScript呼叫Flash裡的ActionScript:
可以通過ExternalInterface的addCallback方法,在Flash裡註冊一個可以供網頁上的JavaScript或ActiveX呼叫的方法,具體程式碼如下:
程式程式碼
import flash.external.*;
var methodName:String = “PlayBB”;
var instance:Object = null;
var method:Function = playB;
var ws:Boolean = ExternalInterface.addCallback(methodName, instance, method);
在JavaScript中呼叫時,需要為Flash所在的Object標籤設定一個ID,並且設定allowScriptAccess屬性,示例程式碼如下:
程式程式碼
網頁中的JavaScript具體的呼叫示例:
程式程式碼
function thisMovie(movieName) {
if (navigator.appName.indexOf(“Microsoft”) != -1) {
return window[movieName]
}
else {
return document[movieName]
}
}
(“topFlash”).PlayBB();
二、在Flash的ActionScript中呼叫網頁裡的JavaScript:
直接使用ExternalInterface的Call方法就可以了,示例程式碼如下:
程式程式碼
import flash.external.*;
var obj:Object = ExternalInterface.Call(“JavaScript方法”, “引數”);
引數可以是任何As中的型別,在呼叫時Flash會自動封裝,多引數使用,分隔。
16、jquery ajax支援的傳輸資料型別:
xml html script json jsonp text
17、判斷一個字串物件str是否為String?
var str = new String(‘1ksdmw’);
// 通過instanceOf判斷是否為例項, str instanceOf String , true
// typeof str // “object”
Css佈局及重構
1、viewpoint:移動裝置訪問頁面的畫素檢視縮放關係,
device-width
user-scalable: no-scale
target-densitydpi: device-dpi: high-dpi, medium-dpi, low-dpi
例:
(設定螢幕寬度為裝置寬度,禁止使用者手動調整縮放)
2、border: none(無邊框樣式),border: 0(邊框寬度為0,但如果設定寬度不只是需要設定這個值就行,還需要設定1px solid #color等);
css sprite: 多張圖片的合併大小通常還會比單張加起來的總和要小;
3、關於ie和firefox的描述:
innerText IE支援,FIREFOX也支援
document.createElement FIREFOX支援,IE也支援
setAttribute(‘class’,‘styleClass’) FIREFOX支援,
IE也支援但寫法為: setAttribute(‘className’,‘styleClass’)
4、假設當前螢幕分別率為1024×768,定義一個居中的佔螢幕一半大小的表格的語句是
瀏覽器及伺服器相關
1、狀態碼
2、dns
3、cdn
4、Netscape原網景公司,mozilla後該公司成立的組織,後該組織建立的gecko引擎,因其市場優異很多開發會根據mozilla標識開發更優良的程式碼,
微軟ie瀏覽器與之競爭,微軟仿造加入mozilla引起這種混亂風,很多瀏覽器開始仿造加入mozilla標誌,chrome, safari,opera等等,因此現在很混亂。
為什麼瀏覽器User-agent總是有Mozilla字樣?
https://zhidao.baidu.com/question/1767408752449075980.html
5、常見的瀏覽器端的儲存技術
cookie
localStorage
userData
// session為服務端建立
cookie 是靠譜的瀏覽器都支援;
localStorge 比 cookie 存的更多,獲取更方便,而且儲存內容不會隨請求傳送給伺服器;session 雖然需要 cookie 支援(通常存放加密過的 sessionId),但是不在瀏覽器端存放主要資訊,排除;
IE 支援 userData 儲存資料,但是基本很少使用到,除非有很強的瀏覽器相容需求。
Node
1、設計一個批量輸入的頁面,一次輸入5000條記錄,如何設計:
分批次處理:將資料分批次,然後交予非同步處理
非同步處理:通過nodejs非同步讀取檔案操作非同步處理,readFile
安全
1、XSS,CSRF,hash碰撞,闡述與防治
前沿
相關文章
- front檔案
- end-to-end delay proof
- tc_qos
- 如何理解端到端(end-to-end)?
- TC275---VADC筆記筆記
- 論文閱讀:End to End Chinese Lexical Fusion Recognition with Sememe Knowledge
- 《REBEL Relation Extraction By End-to-end Language generation》閱讀筆記筆記
- tc39 proposal: Class field declarations
- 【Leetcode】1670. Design Front Middle Back QueueLeetCode
- 如何理解深度學習領域中的端到端 (end to end)深度學習
- 安裝centOS虛擬機器提示Section %Packages Does Not End With %EndCentOS虛擬機Package
- 論文翻譯:Extracting Relational Facts by an End-to-End Neural Model with Copy Mechanism
- Implementing Ethereum trading front-runs on the Bancor exchange in PythonPython
- TC (Teamcenter) 許可證解決方案
- tc39 proposal: Classes static fields and methods
- Newline required at end of file but not foundUI
- where to start, from where the end
- Sparse R-CNN: End-to-End Object Detection with Learnable Proposals 論文解讀CNNObject
- The_C_Language cpt1_end && Jav_How_2_Program 2.2_end
- 目標檢測 - Sparse R-CNN: End-to-End Object Detection with Learnable ProposalsCNNObject
- RFN-Nest_ An end-to-end residual fusion network for infrared and visible images 論文解讀
- RBE104TC C/C++ Programming LanguageC++
- tc39 proposal: Classes private methods and getter/setters
- 模擬網路狀態的利器TC
- SQL Server CASE WHEN ... THEN ... ELSE ... ENDSQLServer
- Solaris syntax error: unexpected end of fileError
- Madden NFL 22: Tight End Ratings
- 論文翻譯:2020_WaveCRN: An efficient convolutional recurrent neural network for end-to-end speech enhancement
- Sparse R-CNN: End-to-End Object Detection with Learnable Proposals - 論文閱讀翻譯CNNObject
- AISecOps:從DARPA TC專案看終端攻防AI
- AURIX TC397 SCU 之 Watchdog 看門狗
- IMP-00009: abnormal end of export fileORMExport
- End Of Live OpenSSL 1.1 vs Slow OpenSSL 3.0
- 【maven】Maven報錯 zip END header not foundMavenHeader
- Leetcode 19 Remove Nth Node From End of ListLeetCodeREM
- for (auto it = _list.begin(); it != _list.end(); )關於在for迴圈中使用std::vector中的begin和end
- 018 通過連結串列學Rust之實現pop frontRust
- 018 透過連結串列學Rust之實現pop frontRust