除了 iPhone 12 系列和 HomePod mini,蘋果還上架了這些配件新品
1、瀏覽器本地儲存
在較高版本的瀏覽器中,js
提供了sessionStorage
和globalStorage
。在HTML5
中提供了localStorage
來取代globalStorage
。
html5
中的Web Storage
包括了兩種儲存方式:sessionStorage
和localStorage
。
sessionStorage
用於本地儲存一個會話(session)中的資料,這些資料只有在同一個會話中的頁面才能訪問並且當會話結束後資料也隨之銷燬。因此sessionStorage
不是一種持久化的本地儲存,僅僅是會話級別的儲存。
而localStorage
用於持久化的本地儲存,除非主動刪除資料,否則資料是永遠不會過期的。
web storage和cookie的區別
Web Storage
的概念和cookie
相似,區別是它是為了更大容量儲存設計的。Cookie
的大小是受限的,並且每次你請求一個新的頁面的時候Cookie
都會被髮送過去,這樣無形中浪費了頻寬,另外cookie
還需要指定作用域,不可以跨域呼叫。
除此之外,Web Storage
擁有setItem,getItem,removeItem,clear
等方法,不像cookie
需要前端開發者自己封裝setCookie,getCookie
。
但是cookie
也是不可以或缺的:cookie
的作用是與伺服器進行互動,作為HTTP
規範的一部分而存在 ,而Web Storage
瀏覽器的支援除了IE7
及以下不支援外,其他標準瀏覽器都完全支援(ie及FF需在web伺服器裡執行),值得一提的是IE總是辦好事,例如IE7、IE6中的userData
其實就是javascript
本地儲存的解決方案。通過簡單的程式碼封裝可以統一到所有的瀏覽器都支援web storage
。
localStorage
和sessionStorage
都具有相同的操作方法,例如setItem、getItem
和removeItem
等
cookie 和session 的區別:
1、cookie資料存放在客戶的瀏覽器上,session資料放在伺服器上。
2、cookie不是很安全,別人可以分析存放在本地的COOKIE並進行COOKIE欺騙
考慮到安全應當使用session。
3、session會在一定時間內儲存在伺服器上。當訪問增多,會比較佔用你伺服器的效能
考慮到減輕伺服器效能方面,應當使用COOKIE。
4、單個cookie儲存的資料不能超過4K,很多瀏覽器都限制一個站點最多儲存20個cookie。
5、所以個人建議:
將登陸資訊等重要資訊存放為SESSION
其他資訊如果需要保留,可以放在COOKIE中
2、GET和POST的區別
GET:一般用於資訊獲取,使用URL傳遞引數,對所傳送資訊的數量也有限制,一般在2000個字元
POST:一般用於修改伺服器上的資源,對所傳送的資訊沒有限制。
GET方式需要使用Request.QueryString來取得變數的值,而POST方式通過Request.Form來獲取變數的值,
也就是說Get是通過位址列來傳值,而Post是通過提交表單來傳值。
3、js物件的深度克隆
function clone(Obj) { var buf; if (Obj instanceof Array) { buf = []; //建立一個空的陣列 var i = Obj.length; while (i--) { buf[i] = clone(Obj[i]); } return buf; }else if (Obj instanceof Object){ buf = {}; //建立一個空物件 for (var k in Obj) { //為這個物件新增新的屬性 buf[k] = clone(Obj[k]); } return buf; }else{ return Obj; } }
4、如何獲取UA
<script> function whatBrowser() { document.Browser.Name.value=navigator.appName; document.Browser.Version.value=navigator.appVersion; document.Browser.Code.value=navigator.appCodeName; document.Browser.Agent.value=navigator.userAgent; } </script>
5、js陣列去重
以下是陣列去重的三種方法:
Array.prototype.unique1 = function () { var n = []; //一個新的臨時陣列 for (var i = 0; i < this.length; i++) //遍歷當前陣列 { //如果當前陣列的第i已經儲存進了臨時陣列,那麼跳過, //否則把當前項push到臨時數組裡面 if (n.indexOf(this[i]) == -1) n.push(this[i]); } return n; } Array.prototype.unique2 = function() { var n = {},r=[]; //n為hash表,r為臨時陣列 for(var i = 0; i < this.length; i++) //遍歷當前陣列 { if (!n[this[i]]) //如果hash表中沒有當前項 { n[this[i]] = true; //存入hash表 r.push(this[i]); //把當前陣列的當前項push到臨時數組裡面 } } return r; } Array.prototype.unique3 = function() { var n = [this[0]]; //結果陣列 for(var i = 1; i < this.length; i++) //從第二項開始遍歷 { //如果當前陣列的第i項在當前陣列中第一次出現的位置不是i, //那麼表示第i項是重複的,忽略掉。否則存入結果陣列 if (this.indexOf(this[i]) == i) n.push(this[i]); } return n; }
6、js操作獲取和設定cookie
//建立cookie function setCookie(name, value, expires, path, domain, secure) { var cookieText = encodeURIComponent(name) + '=' + encodeURIComponent(value); if (expires instanceof Date) { cookieText += '; expires=' + expires; } if (path) { cookieText += '; expires=' + expires; } if (domain) { cookieText += '; domain=' + domain; } if (secure) { cookieText += '; secure'; } document.cookie = cookieText; } //獲取cookie function getCookie(name) { var cookieName = encodeURIComponent(name) + '='; var cookieStart = document.cookie.indexOf(cookieName); var cookieValue = null; if (cookieStart > -1) { var cookieEnd = document.cookie.indexOf(';', cookieStart); if (cookieEnd == -1) { cookieEnd = document.cookie.length; } cookieValue = decodeURIComponent(document.cookie.substring(cookieStart + cookieName.length, cookieEnd)); } return cookieValue; } //刪除cookie function unsetCookie(name) { document.cookie = name + "= ; expires=" + new Date(0); }
7、Promise
依照Promise/A+
的定義,Promise
有四種狀態:
pending: 初始狀態, 非 fulfilled 或 rejected.
fulfilled: 成功的操作.
rejected: 失敗的操作.
settled: Promise已被fulfilled或rejected,且不是pending
另外,fulfilled
與rejected
一起合稱settled
。
Promise
物件用來進行延遲(deferred) 和非同步(asynchronous ) 計算。
Promise 的建構函式
構造一個Promise
,最基本的用法如下:
var promise = new Promise(function(resolve, reject) {
if (...) { // succeed
resolve(result);
} else { // fails
reject(Error(errMessage));
}
});
Promise
例項擁有then
方法(具有then
方法的物件,通常被稱為thenable
)。它的使用方法如下:
promise.then(onFulfilled, onRejected)
接收兩個函式作為引數,一個在fulfilled
的時候被呼叫,一個在rejected
的時候被呼叫,接收引數就是future,onFulfilled
對應resolve
,onRejected
對應reject
。
8、棧和佇列的區別
棧的插入和刪除操作都是在一端進行的,而佇列的操作卻是在兩端進行的。
佇列先進先出,棧先進後出。
棧只允許在表尾一端進行插入和刪除,而佇列只允許在表尾一端進行插入,在表頭一端進行刪除