填坑-十萬個爲何?(8)

簡介:不少概念不清或忘記,從新構建本身的知識體系。天天問本身1~多個問題。我是菜鳥 成爲大神之路!html

繼續第7天的內容git

1. 瀏覽器IndexedDB是什麼? 🍬link

  • 可使用 cookies 或 LocalStorage,但它們都是比較簡單的技術,而 IndexedDB 提供了相似數據庫風格的數據存儲和使用方式。
  • IndexedDB 很適合存儲大量數據,它的 API 是異步調用的。IndexedDB 使用索引存儲數據,各類數據庫操做放在事務中執行。IndexedDB 甚至還支持簡單的數據類型。IndexedDB 比 localstorage 強大得多,但它的 API 也相對複雜。對於簡單的數據,你應該繼續使用 localstorage,但當你但願存儲大量數據時,IndexedDB 會明顯的更適合,IndexedDB 能提供你更爲複雜的查詢數據的方式。 更多的內容以後在作學習

2. CacheStorage 和 Service Worker(瀏覽器緩存)的認識? 🏀link

var wsCache = new WebStorageCache();

// 緩存字符串'wqteam' 到 'username' 中, 超時時間100秒
wsCache.set('username', 'wqteam', {exp : 100});

// 超時截止日期,可用使用Date類型
var nextYear = new Date();
nextYear.setFullYear(nextYear.getFullYear() + 1);
wsCache.set('username', 'wqteam', {exp : nextYear});

// 獲取緩存中 'username' 的值
wsCache.get('username');

// 緩存簡單js對象,默認使用序列化方法爲JSON.stringify。能夠經過初始化wsCache的時候配置serializer.serialize
wsCache.set('user', { name: 'Wu', organization: 'wqteam'});

// 讀取緩存中的簡單js對象 - 默認使用反序列化方法爲JSON.parse。能夠經過初始化wsCache的時候配置serializer.deserialize
var user = wsCache.get('user');
alert(user.name + ' belongs to ' + user.organization);

// 刪除緩存中 'username'
wsCache.delete('username');

// 手工刪除全部超時CacheItem,
wsCache.deleteAllExpires();

// 清除客戶端中全部緩存
wsCache.clear();

// 爲已存在的(未超時的)緩存值設置新的超時時間。
wsCache.touch('username', 1);

// 若是緩存中沒有key爲username2的緩存,則添加username2。反之什麼都不作
wsCache.add('username2', 'wqteam', {exp : 1});

// 若是緩存中有key爲username的緩存,則替換爲新值。反之什麼都不作
wsCache.replace('username', 'new wqteam', {exp : 1});

// 檢查當前選擇做爲緩存的storage是否被用戶瀏覽器支持。
//若是不支持調用WebStorageCache API提供的方法將什麼都不作。
wsCache.isSupported();
複製代碼

3. Javascript的引用賦值與傳值賦值?

①傳值賦值

基本的數據類型有:undefined,boolean,number,string,null。 基本類型存放在棧區,訪問是按值訪問的,就是說你能夠操做保存在變量中的實際的值。github

var str = "12";
var str1 = "13";
str1 = str;
str1 = "24";

console.log(str + "++" + str1);//12++24
複製代碼
②引用賦值

引用類型指的是對象。能夠擁有屬性和方法,而且咱們能夠修改其屬性和方法。引用對象存放的方式是:在棧中存放對象變量標示名稱和該對象在堆中的存放地址,在堆中存放數據。
對象使用的是引用賦值。當咱們把一個對象賦值給一個新的變量時,賦的實際上是該對象的在堆中的地址,而不是堆中的數據。也就是兩個對象指向的是同一個存儲空間,不管哪一個對象發生改變,其實都是改變的存儲空間的內容,所以,兩個對象是聯動的。web

var arr = [1,2,3];
var arr1 = arr;
console.log(arr);//[1, 2, 3]
console.log(arr1);//[1, 2, 3]
arr.pop();
console.log(arr);//[1, 2]
console.log(arr1);//[1, 2]
複製代碼
③參數傳遞

JavaScript的函數參數傳遞爲值傳遞數據庫

'當傳入的是 基本類型的參數時:就是複製了分內容給i而已,i與age之間沒有關係。'
function setAge(i) {
    console.log(i);//24
    i = 18;
    console.log(i);//18,i的改變不會影響外面的age
};

var age = 24;
setAge(age);
console.log(age);//24
複製代碼
'當傳入的參數爲引用類型時:'
function setName(obj) {
    obj.name = 'haha';
};
 
var obj2 = new Object();
setName(obj2);
console.log(obj2.name);    // haha

'這看起來很像是傳遞的是引用,由於obj.name受到改變了,但其實不是,其實仍是值,由於obj2自己的值就是新對象的地址,因此傳進去的就是這個地址。'
複製代碼
'阿里2014年的筆試題'
var a = 1;
var obj = {
    b: 2
};
var fn = function () {};
fn.c = 3;
function test(x, y, z) {
    x = 4;
    y.b = 5;
    z.c = 6;
    return z;
}
test(a, obj, fn);
console.log(a + obj.b + fn.c);
複製代碼

參考文章:
www.cnblogs.com/vincentvoid…
github.com/WQTeam/web-…
www.cnblogs.com/cench/p/601…瀏覽器

相關文章
相關標籤/搜索