值传递和引用传递
- js的存储数据方式
- 栈内存
- 所有的变量名都是存储在栈里面,js在使用某个变量的时候只会在栈里面查找
- 基础数据类型的值直接存在栈里面的
- 复杂数据类型在栈里面存储的是一个地址
- 在使用复杂数据类型的时候得到就是一个地址,会根据这个地址到堆里面找到这个数据
- 堆内存
- 复杂数据类型的值存在堆里面的
- 在堆内存里面存储数据的时候就会开辟一块空间,得到一个空间地址,会将这个地址存储在栈里面
- 栈内存
- 值传递和引用传递
- 当我们把一个变量的数据赋值给另一个变量的过程称为传递过程
- 基础数据类型之间的传递是值传递,直接是把一个变量的值给了另一个变量,这样一个变量变化另一个不受影响
- 复杂数据类型之间的传递是地址传递(引用传递),直接把一个变量的存储地址赋值给了另一个变量,两个变量地址指向的是同一块堆内存的数据,一个变化另一个也会变化
- 值传递和引用传递影响
- 赋值
- 比较
arguments
- 每一个函数内部都自带一个arguments
- 可以记录函数在调用的时候传递的实参信息
- 它是一个伪数组,真的数组里面是没有callee
Math
- js里面内置的对象
- 凡是设计到数学运算的
了解
- 求最大值
- Math.max(数,数,...)
- 求最小值
- Math.min(数,数,...)
- 求绝对值
- Math.abs(数)
- 求n次方
- Math.pow(底数,次方数)
- 求平方根
- Math.sqrt(数)
掌握 取整
- 向上取整
- 正数 舍去小数位 整数位+1
- 负数 舍去小数位 整数位不变
- Math.ceil(数)
- 向下取整
- 正数 舍去小数位 整数位不变
- 负数 舍去小数位 整数位-1
- Math.floor(数)
- 四舍五入取整
- 如果小数大于4采用向上 小于等于4采用向下
- Math.round(数)
保留几位小数
- 借助字符串的toFixed方法
- 数字.toFixed(位数)
Date
- 凡是和日期相关都会用到Date
- 获取计算机本地年月日 时分秒 星期
- Date是js内置的构造函数
- 使用Date的流程
- 创建一个日期对象
- var riqi = new Date()
- 利用创建出来的日期对象获取年月日 时分秒
- riqi.getFullYear()
- riqi.getMonth() 0代表1月份 1代表2月份... 拿到月份做加一的处理
- riqi.getDate()
- riqi.getHours()
- riqi.getMinutes()
- riqi.getSeconds()
- riqi.getDay() 0-6 0代表星期天 1代表星期1...
- 获取是当前电脑系统的时间
- 创建一个日期对象
- 国际标准的日期格式
- YYYY-MM-DD hh:mm:ss
- YYYY/MM/DD hh:mm:ss
- 时钟
- 间隔一秒钟获取最新的系统时间 写到页面
- 定时器
- 可以实现间隔一段时间执行一次代码
- 可以实现延迟一段时间执行一次代码
- 间隔定时器
// fn代表一个函数 // ms代表毫秒数 1s = 1000ms setInterval(fn, ms) - 延迟定时器
setTimeout(fn, ms)
- 倒计时
- '2023-01-22 00:00:00'
- 时间戳
- 含义: 一个时间距离计算机初始化时间(1970-01-01 00:00:00)的毫秒数
- 获取时间戳
- 先要把这个字符串转换成一个日期对象
- 调用getTime()
实例
(以下代码均为课程实例)
(1)值传递和引用传递
<script>
var num1 = 1
var num2 = num1 // 将num1的值赋值给num2
num1++
// 一个变化另一个不会变化的
console.log(num1)
console.log(num2)
var arr1 = [1,2,3,4]
var arr2 = arr1
arr1.push(5)
console.log(arr1)
console.log(arr2)
</script>
(2)数组排序
<script>
var arr1 = [2,23,1,2,34,5]
arr1.sort(function(a, b){
return a-b
})
// 将arr1赋值给了arr2
var arr2 = arr1 // 此处赋值是一个引用的传递
// 改变arr2 因为arr2和arr1地址指向的是同一块空间的数据
arr2.sort(function(a, b){
return b-a
})
//
console.log(arr2)
console.log(arr1)
// 深克隆和浅克隆
</script>
(3)比较数据
<script>
var num1 = 1
var num2 = 1
// 此处比较是两个值进行比较
console.log(num1 === num2)
console.log(num1 == num2)
var arr1 = [1,2,3,4]
var arr2 = [1,2,3,4]
// 此处比较是两个地址进行比较
console.log(arr1 === arr2)
console.log(arr1 == arr2)
</script>
(4)math函数的运用
<script>
console.log(Math)
console.log(Math.PI)
console.log(Math['PI'])
var num = Math.random()
// 求最大值
var maxNum = Math.max(10,12,33,4,7,8)
console.log(maxNum)
var maxNum01 = Math.max([10,12,33,4,7,8])
console.log(maxNum01)
// 求最小值
var minNum = Math.min(10,12,33,4,7,8)
console.log(minNum)
// 求绝对值
var num1 = Math.abs(10)
console.log(num1)
var num2 = Math.abs(-10)
console.log(num2)
// 求平方
console.log(Math.pow(3,2)) // 3的平方
console.log(Math.pow(3,3)) // 3的立方
console.log(Math.pow(3,8)) // 3的8次方
// 求平方根
console.log(Math.sqrt(4))
</script>
(5)利用date获取年月日时分秒
<script>
// 创建一个日期对象
var riqi = new Date()
console.log(riqi)
// 获取年
var year = riqi.getFullYear()
console.log(year)
// 获取月
var month = riqi.getMonth()
console.log(month + 1)
// 获取日
var date = riqi.getDate()
console.log(date)
// 获取时
var hour = riqi.getHours()
console.log(hour)
// 获取分
var minute = riqi.getMinutes()
console.log(minute)
// 获取秒
var second = riqi.getSeconds()
console.log(second)
// 获取星期
var week = riqi.getDay()
console.log(week)
</script>
(6)日期格式化
<script>
// 创建一个日期对象
var riqi = new Date();
// 获取年
var year = riqi.getFullYear();
// 针对于月日时分秒如果是个位的话 要在数字前面补0
// 获取月
var month = riqi.getMonth() + 1;
month = month<10 ? '0' + month : month
// 获取日
var date = riqi.getDate();
date = date<10 ? '0' + date : date
// 获取时
var hour = riqi.getHours();
hour = hour<10 ? '0' + hour : hour
// 获取分
var minute = riqi.getMinutes();
minute = minute<10 ? '0' + minute : minute
// 获取秒
var second = riqi.getSeconds();
second = second<10 ? '0' + second : second
var str = year + '-' + month + '-' + date + ' ' + hour + ':' + minute + ':' + second
document.write(str)
</script>
(7)间隔定时器
<script>
console.log('哈哈哈')
function time(){
// 只有此处的代码会间隔调用的
console.log('time函数被调用了')
}
console.log('嘻嘻嘻')
// time这个函数是setInterval这个函数来调用的
// 1s会调用time函数一次
setInterval(time, 1000)
console.log('呵呵呵')
</script>
(8)延迟定时器
<script>
setTimeout(function(){
console.log('函数调用了')
}, 1000)
</script>
(9)时钟
<script>
function showTime() {
// 创建一个日期对象
var riqi = new Date();
// 获取年
var year = riqi.getFullYear();
// 针对于月日时分秒如果是个位的话 要在数字前面补0
// 获取月
var month = riqi.getMonth() + 1;
month = month < 10 ? "0" + month : month;
// 获取日
var date = riqi.getDate();
date = date < 10 ? "0" + date : date;
// 获取时
var hour = riqi.getHours();
hour = hour < 10 ? "0" + hour : hour;
// 获取分
var minute = riqi.getMinutes();
minute = minute < 10 ? "0" + minute : minute;
// 获取秒
var second = riqi.getSeconds();
second = second < 10 ? "0" + second : second;
var str =
year +
"/" +
month +
"/" +
date +
" " +
hour +
":" +
minute +
":" +
second;
// 在每一次写新时间之前清除上一次的内容
document.body.innerHTML = "";
// 把时间写到页面
document.write(str);
}
// 页面进入的时候就需要写一次
showTime()
setInterval(function () {
// 每间隔一秒钟写一次
showTime()
}, 1000);
</script>
(10)倒计时
<script>
// 创建一个日期对象
var riqi = new Date();
// 获取年
var year = riqi.getFullYear();
// 针对于月日时分秒如果是个位的话 要在数字前面补0
// 获取月
var month = riqi.getMonth() + 1;
month = month < 10 ? "0" + month : month;
// 获取日
var date = riqi.getDate();
date = date < 10 ? "0" + date : date;
// 获取时
var hour = riqi.getHours();
hour = hour < 10 ? "0" + hour : hour;
// 获取分
var minute = riqi.getMinutes();
minute = minute < 10 ? "0" + minute : minute;
// 获取秒
var second = riqi.getSeconds();
second = second < 10 ? "0" + second : second;
var str =
year +
"/" +
month +
"/" +
date +
" " +
hour +
":" +
minute +
":" +
second;
// 过年时间
var str2 = "2023-01-22 00:00:00";
console.log(str2, str)
// 过年的时间 - 当前的时间
console.log(str2 - str);
var riqi = new Date(str) // 将字符串转换成日期对象
console.log(riqi.getTime()) // 获取时间戳
var riqi2 = new Date(str2) // 将字符串转换成日期对象
console.log(riqi2.getTime()) // 获取时间戳
// console.log(riqi2.getTime() - riqi.getTime())
var times = (riqi2.getTime() - riqi.getTime()) / 1000
// document.write(times)
var d = parseInt(times / 60 / 60 / 24);
d = d < 10 ? '0' + d : d; // 利用三元表达式统一格式,当数字小于10 时在前一位补0
var h = parseInt(times / 60 / 60 % 24);
h = h < 10 ? '0' + h : h;
var m = parseInt(times / 60 % 60);
m = m < 10 ? '0' + m : m;
var s = parseInt(times % 60);
s = s < 10 ? '0' + s : s;
var times1 = d + '天' + h + '时' + m + '分' + s + '秒'
document.write(times1)
function countdown() {
// 创建一个日期对象
var riqi = new Date();
// 获取年
var year = riqi.getFullYear();
// 针对于月日时分秒如果是个位的话 要在数字前面补0
// 获取月
var month = riqi.getMonth() + 1;
month = month < 10 ? "0" + month : month;
// 获取日
var date = riqi.getDate();
date = date < 10 ? "0" + date : date;
// 获取时
var hour = riqi.getHours();
hour = hour < 10 ? "0" + hour : hour;
// 获取分
var minute = riqi.getMinutes();
minute = minute < 10 ? "0" + minute : minute;
// 获取秒
var second = riqi.getSeconds();
second = second < 10 ? "0" + second : second;
var str =
year +
"/" +
month +
"/" +
date +
" " +
hour +
":" +
minute +
":" +
second;
// 过年时间
var str2 = "2023-01-22 00:00:00";
console.log(str2, str)
// 过年的时间 - 当前的时间
console.log(str2 - str);
var riqi = new Date(str) // 将字符串转换成日期对象
console.log(riqi.getTime()) // 获取时间戳
var riqi2 = new Date(str2) // 将字符串转换成日期对象
console.log(riqi2.getTime()) // 获取时间戳
// console.log(riqi2.getTime() - riqi.getTime())
var times = (riqi2.getTime() - riqi.getTime()) / 1000
// document.write(times)
var d = parseInt(times / 60 / 60 / 24);
d = d < 10 ? '0' + d : d; // 利用三元表达式统一格式,当数字小于10 时在前一位补0
var h = parseInt(times / 60 / 60 % 24);
h = h < 10 ? '0' + h : h;
var m = parseInt(times / 60 % 60);
m = m < 10 ? '0' + m : m;
var s = parseInt(times % 60);
s = s < 10 ? '0' + s : s;
var times1 = d + '天' + h + '时' + m + '分' + s + '秒'
document.body.innerHTML = "";//在每一次写新时间之前清空页面
document.write(times1)
}
setInterval(function () {
// 每间隔一秒钟写一次
countdown()
}, 1000);
// 一个月按30天
</script>
(11)封装函数最大值
<script>
// 封装一个返回最大值和最小值的函数
function max(){
console.log(arguments)
// 找到arguments伪数组里面最大的
for(i=0;i<arguments.length;i++){
if(arguments[i]>arguments[i+1]){
// 交换位置
var temp = null
temp = arguments[i]
arguments[i] = arguments[i+1]
arguments[i+1] = temp
}
}
return arguments[arguments.length-1]
}
console.log(max(10,12,33,4,7,8))
var num01 = max(10,12,33,4,7,8,100, 33,66)
console.log(num01)
</script>