//与python的布尔值相比,JS中布尔值使用全小写
let a = false;
let b = true;
//空字符串、0、null、undefined、NaN都是false
null与undefined的区别
null表示值为空,一般是清空一个变量时才会使用
undefined表示刚声明了一个变量,还未赋值,那么变量的默认值为undefined;还有就是函数没有明确的返回值时,也是返回undefined
JavaScript中所有的事物都是对象
对象就是自身包含了属性和方法的特殊数据类型
JavaScript提供了多个内建对象,比如String、Date、Array等
// 定义语法
let l1 = [11, 'jason', true]
// 取值
l1[1] //'jason'
常用方法:
| 方法 | 说明 |
|---|---|
| length | 数组的大小 |
| push(ele) | 尾部追加元素 |
| pop() | 获取尾部元素 |
| unshift(ele) | 头部追加元素 |
| shift() | 头部移除元素 |
| slice(start,end) | 切片 |
| reverse() | 反转 |
| join() | 将数组根据指定元素连接成字符串 |
| concat() | 合并数组 |
| sort() | 排序 |
| forEach() | 将数组的每个元素传给回调函数 |
| splice() | 删除元素,并向数组添加新元素 |
| map() | 映射,将每个元素使用函数做处理后返回 |
forEach
//语法结构
数组.forEach(function(当前元素,索引,当前元素所属的数组对象))
//类似于Python中的for循环
splice
//语法结构
数组.splice(索引,数值,新元素)
/*
索引:通过索引设定开始删除或添加元素的位置
数值:删除多少个元素,默认从索引位置到末尾,可以为0
新元素(可选):要添加到数组的新元素
*/
map
//语法结构
数组.map(function(当前元素,索引,当前对象))
//map会返回一个处理后的新数组
类似于Python中的字典数据类型
//定义方式1
let d1 = {'name': 'jason', 'age':24}
//定义方式2
let d2 = new Object()
//相较于Python的字典,自定义对象操作数据值可以直接使用句点符的方式,更加简单方便
| 符号 | 说明 |
|---|---|
| + | 加 |
| - | 减 |
| * | 乘 |
| / | 除 |
| % | 取余 |
| ++ | 自增 |
| – | 自减 |
//需要注意自增与自减编写的位置
let a = 10
let b = a++
let c = ++a
//由于b赋值时是先赋值后自增,所以b是10;c是先自增后赋值,所以c是12
| 符号 | 说明 |
|---|---|
| > | 大于 |
| < | 小于 |
| >= | 大于等于 |
| <= | 小于等于 |
| != | 弱不等于 |
| !== | 强不等于 |
| == | 弱等于 |
| === | 强等于 |
1=='1' //true
1==='1' //false
//由于JavaScript是一门弱类型语言,会自动转换数据类型,使用两个等号进行比较时,会自动将数据类型转换为一致比较,所以以后尽量使用三个等号,防止判断错误
| 符号 | 说明 |
|---|---|
| && | 与,and |
| || | 或,or |
| ! | 非,not |
| 符号 | 说明 |
|---|---|
| = | 赋值符号 |
| a+=b | 等同于a=a+b |
| a-=b | 等同于a=a-b |
| a*=b | 等同于a=a*b |
| a/=b | 等同于a=a/b |
//单if分支
if(条件){
条件成立执行的代码
}
//if...else分支
if(条件){
条件成立执行的代码
}else{
条件不成立执行的代码
}
//if...else if...else分支
if(条件1){
条件1成立后执行的代码
}else if(条件2){
条件1不成立,条件2成立执行的代码
}else{
条件都不成立执行的代码}
//switch语句
var day = new Date().getDay();
switch(day){
case 0:
console.log("Sunday");
break
case 1::
console.log("Monday");
break
default:
console.log("...")
/*
switch 语句和 if...else...if 语句的区别
switch 语句进行条件判断后直接执行到程序的条件语句,效率更高;而if语句有几种条件,就得判断多少次
*/
// for循环
关键字(循环开始前执行;结束条件;循环结束后执行){
循环体代码
}
for(let i=1;i<101;i++){
console.log(i)
}
//while循环
关键字(条件){
循环体代码
}
var i = 0
while (i<10){
console.log(i)
i++
}
JS中的函数和Python的函数非常相似,只是定义方式有一点不同
//语法结构
function 函数名(形参){
函数体代码
return 返回值
}
function fn1(a,b){
console.log(a,b)
}
//参数的数量不需要一一对应,如果不传参默认为undefined,如果想要限制参数传入个数,需要使用内置关键字arguments
function fn2(a,b){
if(arguments===2){
console.log(a,b)
}else{console.log('参数不够')}
}
//匿名参数
function(a,b){
return a + b;
}
//箭头函数
let f = 参数 => 返回值;
//如果不需要参数或多个参数,则需要使用括号
let sum = (num1, num2) => num1 + num2;
let f = () => 10;
//return只能返回一个值,如果想要返回多个值则需自己将数据使用数组或自定义对象保存
类似于Python中的内置函数或内置模块
语法结构:var 变量名 = new 内置对象名();
// 不指定参数
var d1 = new Date(); // Thu Aug 25 2022 19:12:47 GMT+0800 (中国标准时间)
//参数为日期字符串
var d2 = new Date('2022/8/25 11:11'); // Thu Aug 25 2022 11:11:00 GMT+0800 (中国标准时间)
//参数为毫秒数
var d3 = new Date(0); // Thu Jan 01 1970 08:00:00 GMT+0800 (中国标准时间)
//参数为数值
var d4 = new Date(2022,8,25,11,11,11); // Thu Sep 15 2022 11:11:11 GMT+0800 (中国标准时间)
Date对象的方法
| 方法 | 说明 |
|---|---|
| getDate() | 获取日期 |
| getDay() | 获取星期(0-6) |
| getMonth() | 获取月份(0-11) |
| getYear() | 获取年 |
| getFullYear() | 获取完整年份 |
| getHours() | 获取小时 |
| getMinutes() | 获取分钟 |
| getSeconds() | 获取秒数 |
| getMilliseconds() | 获取毫秒数 |
| getTime() | 获取时间戳 |
//序列化
let res = {'name':'jason','age':18}
let j1 = JSON.stringify(res)
j1; // '{"name":"jason","age":18}'
//反序列化
let d2 = JSON.parse(j1)
d2; // {name: 'jason', age: 18}
| 方法 | 说明 |
|---|---|
| stringify | 将对象序列化为JSON字符串 |
| parse | 将JSON字符串反序列化为对象 |
//有两种正则表达式的定义方式
let reg1 = new RegExp('^[a-zA-Z][a-zA-z0-9]{5,12}')
let reg2 = /^[a-zA-Z][a-zA-z0-9]{5,12}/
//正则校验数据
reg.test('待校验数据')
/*正则的修饰符
g:全局匹配
i:大小写不敏感
m:检测字符串中的换行符
*/
//如果检验时不传入数据,那么会自动传入undefined
BOM:浏览器对象模型,通过js代码与浏览器交互
DOM:文档对象模型,通过js代码与HTML交互
所有浏览器都支持window对象,它表示浏览器窗口
常用window方法:
window.open() // 打开一个新窗口
window.close() // 关闭当前窗口
window.innerHeight // 获取浏览器窗口内部高度
window.innerWidth // 获取浏览器窗口内部宽度
| 方法 | 说明 |
|---|---|
| open(pageURL,name,parameters) | 打开一个新窗口 |
| close() | 关闭当前窗口 |
| innerHeight | 浏览器内部高度 |
| innerWidth | 浏览器内部宽度 |
// navigator
window.navigator.appName // Web浏览器全称
window.navigator.appVersion // Web浏览器厂商和版本的详细字符串
window.navigator.appAgent // 客户端大部分信息
window.navigator.platform // 浏览器运行所在的操作系统
// history
window.history.forward // 前进一页
window.history.back // 后退一页
// location
window.location.href // 获取当前网址
window.location.href = 新网址 // 跳转到指定网址
window.location.reload // 重新加载页面
// 警告框
alert(); // 用于确保用户可以得到某些信息,需要用户确定才能继续操作
// 确认框
confirm(); // 用于使用户可以验证或接受某些信息,需要用户确定或者取消;如果选择确定则返回值为true,反之则为false
// 提示框
prompt(); // 用于提示用户输入某个值;如果确认返回值为输入的值,反之则返回null
通过js代码,实现每隔一定时间间隔之后执行代码
setTimeout
//语法结构
let t1 = setTimeout(js语句,毫秒) // 经过指定的毫秒数后执行js语句
// 可以使用它的返回值来结束掉它
clearTimeout
//语法结构
clearTimeout(t1)
// 上边的方法只能够触发一次,如果想要重复触发可以使用下边的方法
setInterval
//语法结构
let t2 = setInterval(js语句,毫秒)
// 此方法会不停的调用js语句,直到调用clearInterval关闭或者窗口被关闭
clearInterval(t2)
js操作html也需要先查找标签
// 直接查找
document.getElementById(); // 根据id值查找标签,结果直接是标签对象本身
document.getElementsByClassName(); // 根据class值查找标签,结果是一个数组
document.getElementByTagName(); // 根据标签名查找标签,结果是一个数组
// 根据上边获得的标签,可以使用间接查找其他标签
let divEle = document.getElementById(d1);
div.parentElement // 父节点标签
div.children // 所有子标签
div.firstElementChild // 第一个子标签
div.lastElementChild // 最后一个子标签
div.nexElementSibling // 下一个兄弟标签
div.previousElementSibling // 上一个兄弟标签
// 创建节点
let AEle = document.createElement('标签名') // 动态创建一个标签,临时有效
divEle.append(AEle) // 在指定标签下插入该标签
AEle.id = 'id值' // 可以使用句点符给id属性赋值
AEle.xxx = 'xxx' // 只能够修改默认属性
AEle.setAttribute('username','jason') // 既可以该默认属性,也可以改自定义属性
divEle.innerText // 只获取标签内部所有的文本信息
divEle.innerHTML // 获取标签内部所有的信息
divEle.innerText = 'Text
' // 只能修改标签内部的文本数据
divEle.innerHTML = 'HTML
' // 能够实现标签的添加