堆疊與內建物件(JSON、Math、Date)與垃圾回收機制與彈窗方法
堆和棧的概念
資料結構的兩種,專門用來解決資料的儲存和讀取
記憶體:棧記憶體和堆記憶體(其它語言),js當中只有堆記憶體(堆記憶體又分為棧結構和堆結構,我們相當於用的棧結構和堆結構)
棧記憶體比較小,但是快
堆記憶體比較大,但是慢
拓展: 佇列結構 先進先出 管狀結構
棧:棧的資料結構 FILO先進後出(有序)
堆:連結串列的資料結構,無序的可以隨意新增和刪除
垃圾回收機制
堆空間的釋放是靠垃圾回收機制進行的
當程式函式或者整個程式執行完成後,棧裡面所有的東西都被釋放銷燬,堆當中的資料可能還在,只是沒有任何的變數指向(引用),那麼堆當中的資料就會變成垃圾物件。回收機制會在適當的時候將垃圾物件清理回收;
如果我們在程式當中需要去刪除物件,那麼就將這個物件的變數賦值為null,代表這個物件引用被改變,這個物件也就成了垃圾物件,其實刪除物件就是讓堆當中的物件資料成為垃圾物件;
彈窗方法
函式 | 作用 | 引數 | 返回值 |
---|---|---|---|
window.prompt() | 用於獲取使用者輸入的字串 |
message (可選),顯示給使用者的文字字串default (可選)在文字輸入欄位中顯示的預設值 |
點確定返回string 點取消返回null |
window.alert() | 警示資訊 |
message 在警報對話方塊中顯示的字串 |
string |
內建物件
內建物件JSON
1.什麼是json,json作用
json是一種資料格式;現在我們大多數都是通過json資料格式進行前後端資料互動的,json本質上是一個字串
前端往後臺傳資料的時候,要傳json格式的資料json串
在前端json串的格式原形就是物件或者物件的陣列;所以我們要先把資料儲存為物件或者物件的陣列,然後轉化為json串進行傳遞
2. JSON物件的方法
方法 | 作用 | 返回值 |
---|---|---|
JSON.parse(text,[reviver]) | 解析JSON字串 | Object型別 |
JSON.stringify(value,[replacer], [space]) | 將一個 JavaScript 物件或值轉換為 JSON 字串 | |
JSON.stringify引數
value
將要序列化成 一個 JSON 字串的值。
-
replacer
可選
如果該引數是一個函式,則在序列化過程中,被序列化的值的每個屬性都會經過該函式的轉換和處理;如果該引數是一個數組,則只有包含在這個陣列中的屬性名才會被序列化到最終的 JSON 字串中;如果該引數為 null 或者未提供,則物件所有的屬性都會被序列化。
-
space
可選
指定縮排用的空白字串,用於美化輸出(pretty-print);如果引數是個數字,它代表有多少的空格;上限為10。該值若小於1,則意味著沒有空格;如果該引數為字串(當字串長度超過10個字母,取其前10個字母),該字串將被作為空格;如果該引數沒有提供(或者為 null),將沒有空格。
JSON.parse引數
text
要被解析成 JavaScript 值的字串,關於JSON的語法格式,請參考:JSON
。
-
reviver
可選
轉換器, 如果傳入該引數(函式),可以用來修改解析生成的原始值,呼叫時機在 parse 函式返回之前。
內建物件Math
方法 | 描述 |
---|---|
abs(x) | 返回數的絕對值 |
ceil(x) | 對數進行上舍入 |
floor(x) | 對數進行下舍入 |
max(x,y) | 返回x和y中的最高值 |
min(x,y) | 返回x和y中的最低值 |
pow(x,y) | 返回x的y次冪 |
random() | 返回0-1之間的隨機數(不包含1) |
round(x) | 把數四捨五入為最接近的整數 |
sqrt(x) | 返回數的平方根 |
內建物件Date
var date=new Date();
eg:Date沒引數是獲取當前時間,給Date傳時間戳是獲取時間戳的時間
方法 | 作用 |
---|---|
date.getFullYear() | 年 |
date.getMonth() | 月 |
date.getDate() | 日 |
date.getHours() | 時 |
date.getMinutes() | 分 |
date.getSeconds() | 秒 |
date.getDay() | 星期幾 |
date.toLocaleTimeString() | 當前時間的本地格式化字串 |
date.toLocaleDateString() | 當前日期的本地格式化字串 |
date.getTime() | 1970 年 1 月 1 日到現在之間的毫秒數(又叫時間戳) |
面試題:
第一題:
var num1 = 10;
var num2 = num1;
num1 = 20;
console.log(num1);
console.log(num2);
第二題
var num = 50;
function f1(num) {
num = 60;
console.log(num);
}
f1(num);
console.log(num);
第三題
var num1 = 55;
var num2 = 66;
function f1(num, num1) {
num = 100;
num1 = 100;
num2 = 100;
console.log(num);
console.log(num1);
console.log(num2);
}
f1(num1, num2);
console.log(num1);
console.log(num2);
console.log(num);
第四題
函式傳參如果傳的是基本資料型別和傳引用(物件)有什麼區別
var a = 10;
var b = 20;
function add(a, b) {
a = 30;
return a + b;
}
add(a, b);
console.log(a);
function f1(arr) {
for (var i = 0; i < arr.length; i++) {
arr[i] += 2
}
console.log(arr);
}
var arr;
arr = [1, 2];
f1(arr);
console.log(arr);
第五題
兩個物件是同一個物件,不同的操作有什麼不同
var a = [1, 2];
var b = a;
a[0] = 20;
console.log(b);
var a = []; // new Array()
var b = []; // new Array()
console.log(a == b);
第六題
function Person(name, age, height) {
this.name = name;
this.age = age;
this.height = height;
}
function f1(pp) {
pp.name = "ls";
pp = new Person("aa", 18, 160);
}
var p = new Person("zs", 18, 180);
console.log(p.name);
f1(p);
console.log(p.name);