1. 程式人生 > 其它 >堆疊與內建物件(JSON、Math、Date)與垃圾回收機制與彈窗方法

堆疊與內建物件(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串的格式原形就是物件或者物件的陣列;所以我們要先把資料儲存為物件或者物件的陣列,然後轉化為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);