JavaScript进阶
(一)JS内置对象
JS内部已经内置了不少对象,类似于Python中的内置模块,可以直接使用,并且对象一般不需要导入,可以直接使用。
(1)math对象
Math对象是一个处理数学相关的对象,可以用来执行在数学相关的内容。
<body>
<script>
// Math对象 数学对象
// console.log(Math.PI) // 圆周率
// console.log(Math.pow(2,3)) // 幂次方
// console.log(Math.round(1.56)) // 四舍五入 不保留小数位
// console.log(Math.ceil(1.26)) // 向上取整 2 不保留小数位
// console.log(Math.floor(1.56)) // 向下取整 1 不保留小数位
// console.log(Math.max(1,2,3,4,5)) // 5 取最大值
// console.log(Math.min(1,2,3,4,5)) // 1 取最小值
// console.log(Math.random()) // 随机数 0-1
// 0-100
// console.log(Math.random()*100) // 随机数 0-100
// 取出来是一个整数
// console.log(Math.round(Math.random()*100)) // 随机整数 0-100
// console.log(Math.random() * 99 + 1) //0-100随机数
// console.log(Math.abs(-5)) // 绝对值
</script>
</body>
(2)日期对象
日期也是常用对象之一,基本和常用的方法都是需要了解和熟悉。
<body>
<script>
// Date 日期对象
data = new Date() //得到日期对象
// console.log(data.getTime()) //时间戳
// console.log(data.getFullYear()) //年份
// console.log(data.getMonth()+1) //月份 0-11 加一
// console.log(data.getDate()) //日期
// console.log(data.getHours()) //时
// console.log(data.getMinutes()) //分
// console.log(data.getSeconds()) //秒
// console.log(data.getDay()) //周期
year = data.getFullYear()
month = data.getMonth()+1
date = data.getDate()
document.body.innerText = year+'年' + month+'月'+date+'日' //得到现在的年月日
</script>
</body>
(二)JS的windows对象(计时器)
(1)JS计时器
setTimeout
(执行的事件,秒数) ---------延迟计时器 只执行一次
setInterval
(执行的事件,秒数) ---------间隔计时器 重复执行
①延迟计时器
<body>
<script>
a = 0
b = 0
// 延迟计时器 只执行一次
setTimeout(function () {
a++
console.log(a)
},2000) //单位2000毫秒
</script>
</body>
②间隔计时器
<body>
<script>
a = 0
b = 0
// 间隔计时器 重复执行
setInterval(function () {
b++
console.log(b)
},2000) //单位2000毫秒
</script>
</body>
③计时器停止
<body>
<button id="btn">计时器停止</button>
<script>
b = 0
interval = setInterval(function () {
b++
console.log(b)
},2000) //毫秒
//清除计时
// clearInterval() 间隔
// clearTimeout() 延迟
btn = document.getElementById('btn')
btn.onclick = function () {
//清除计时
clearInterval(interval)
}
</script>
</body>
(2)计时器实现跳转
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>计时器实现跳转</title>
</head>
<body>
<div id="box">
<span id="timer">5s</span>后跳转到百度
</div>
<script>
box = document.getElementById('box')
timer = document.getElementById('timer')
num = 5
time = setInterval(function () {
num--
timer.innerText = num+'s'
if (num===1){
clearInterval(time) //清除计时
// window.location.href = 'https://www.baidu.com/' //从当前窗口跳转到一个新的链接
//打开新的窗口进行跳转
// w = window.open()
// w.location = 'https://www.baidu.com/'
window.open('https://www.baidu.com/')
}
},1000)
</script>
</body>
</html>
(三)JS的函数
- JS函数介绍: JS的函数包裹在花括号当中,使用关键词function来定义。函数可以挂载在一个对象上,作为一个对象的属性,称为对象的方法。
- JS函数特性: 在JS中,函数即对象,程序可以随意操控它们。比如,JS可以把函数赋值给变量,或者作为参数传递给其他的函数,甚至可以设置属性,调用它们的方法。
- JS有名函数: 有名字的函数,使用时是:函数名加上括号执行,充当时间函数执行。
- JS匿名函数:没有名字的函数,匿名函数不能单独出现,一般充当事件函数,比如点击事件调用的函数。
(1)有名函数
有名函数
function 函数名(参数1,参数2,...) {
函数体
return 返回值
}
例:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>计时器</title>
</head>
<body>
<script>
//函数的调用
function func(x, y) {
alert(x + y) //弹窗
return [x, y] //返回一个值
}
a = func(1, 2)
console.log(a) //undefined
// 有名函数可以在定义前调用(即下方的方式)
// a = func(1, 2)
// console.log(a) //输出是undefined
//
// function func(x, y) {
// alert(x + y) //弹窗
// return [x, y] //返回一个值
// }
</script>
</body>
</html>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>计时器</title>
</head>
<body>
<script>
function f1(x,y){
alert(x+y)
}
// 间隔计时器)(每隔2秒弹窗一次)
setInterval(function () {
f1(1,2)
},2000)
</script>
</body>
</html>
(2)匿名函数
匿名函数:
变量 = function (参数1,参数2,...) {
函数体
return 返回值
}
变量(值1,值2,....)
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>计时器</title>
</head>
<body>
<script>
fa = function (x,y) {
alert(x + y)
return [x, y] //返回一个值
}
a = fa(1,2)
console.log(a);
</script>
</body>
</html>
匿名函数不可以在定义前调用
// 匿名函数自调用 在function前加上+ - ~ ! 匿名函数立即执行
-function () {
alert(111)
}();
(3)函数的参数
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>计时器</title>
</head>
<body>
<script>
//函数的参数
// 参数xy可以不给值,不会报错,只是返回undefined
// 多给参数值也不会报错,会自动传给arguments不定长参数
function func(x, y) {
// console.log(x); //undefined
// console.log(y); //undefined
// console.log(arguments); // 输出arguments,元组形式,包括了参数值,函数本身,参数长度,函数类型(迭代器对象)
// console.log(arguments.callee); // 函数本身的内容
// console.log(arguments.length); // 函数本身的长度
//arguments是伪数组,不具有数组实际意义上的一些方法,pop,push
// 循环取出arguments伪数组当中的参数值
for (i = 0; i < arguments.length; i++) {
console.log(arguments[i])
}
}
func(1, 2, 3, 4, 5, 6)
</script>
</body>
</html>
(4)变量声明与函数作用域(JS作用域)
声明:JS定义(声明)一个变量有三种方式 var、 let 、const
①var
<body>
<script>
// var 声明
// var可以在同一作用域下多次声明同一变量
var num = 1;
var num = 2;
console.log(num) //输出为2
// var定义的变量可以在声明前调用,返回的是undefined
// console.log(num) //undefined
// var num = 1
// console.log(num)
</script>
</body>
②let
<body>
<script>
// let 声明
// let不可以在同一作用域下多次声明同一变量
let num = 1;
let num = 2;
console.log(num) //会报错
// let定义的变量不可以在声明前调用
// console.log(num)
// let num = 1
// console.log(num)
</script>
</body>
③const
<body>
<script>
// const声明变量时,必须赋予值,不可以在同一作用域下多次声明同一变量,不可以在声明前调用
console.log(num)
const num = 1
const num = 2
console.log(num) //会报错
</script>
</body>
作用域:一个变量可以生效的范围。 变量不是在所有地方都可以使用的,而这个变量的使用范围就是我们要说的作用域。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>计时器</title>
</head>
<body>
<script>
//js作用域
var a = 11 // 在函数外声明的叫全局变量
function func() {
var a = 22 // 在函数内声明的叫局部变量,外部访问不到
// a = 22 // 如果把var删掉则是全局变量,能够覆盖外面的a
}
func()
console.log(a) //11 ==> 删掉var结果变为22
</script>
</body>
</html>
优先级
<body>
<script>
// 优先级,变量>函数
var a = 123
function a() {
console.log(321)
}
console.log(a) //输出是123 变量优先级大
</script>
</body>
块级作用域{}:针对let和const
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>计时器</title>
</head>
<body>
<script>
// let和const的块级作用域
{
let num = 10
console.log(num) //10
}
console.log(num) //在块级作用域外面无效会报错
{
var num = 10
console.log(num) //10
}
console.log(num) //10 块级作用域对var无效
</script>
</body>
</html>
(四)JS异常
js异常
try{
可能会出现异常的代码
}
catch (e) {
异常后跳到该作用域下,执行该代码块,e代表错误信息
}
finally {
不管是否异常都会执行的部分
}
例:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>异常</title>
</head>
<body>
<script>
try{
num = 1
console.log(num)
}
catch (e) {
console.log(e) //异常捕获给e,再通过e输出出来
}
finally {
console.log('异常处理完毕!')
}
</script>
</body>
</html>