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