堆栈与内置对象(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);

相关