前端JS篇:运算符、流程控制、三元运算符、函数、自定义对象、内置对象、json对象、正则对象、BOM与DOM
2022.4.28前端之JavaScript(2)
- 运算符
- 流程控制
- 三元运算符
- 函数
- 自定义对象
- 内置对象
- json对象
- 正则对象
- BOM操作与DOM操作
一、运算符
1、算数运算符
复制代码
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
var x = 10;
var res1=x++; // 先赋值后自增1
var res2=++x // 先自增1后赋值
// undefined
res1
// 10
res2
// 12
2、比较运算符
复制代码
- 1
- 2
- 3
- 4
弱等于:自动转换类型
'5' == 5 // 结果是true,js会自动转换成相同数据类型比较值是否一样
强等于:不转换类型
'5' === 5 // 结果是false,判断是否绝对相等
3、逻辑运算符
复制代码
- 1
- 2
python中使用 and、or、not
js中使用&&、||、!
二、流程控制
1、if判断
(1)单if分支
复制代码
- 1
if(){条件成立执行的分支代码块}
(2)if...else分支
复制代码
- 1
if(条件){条件成立执行的分支代码块}else{条件不成立执行的分支代码块}
(3)if...else if...else分支
复制代码
- 1
- 2
- 3
if(条件1){条件1成立执行的分支代码块}
else if(条件2){条件2}
else{条件1和2都不成立执行的分支代码块}
(4)switch语法
复制代码
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
var n1 = 1;
switch (n1) { # n1是参数,对应case的值
case 0: # case 相当于
console.log("干饭");
break; # 如果不加break会基于当前位置一直往下运行
case 1:
console.log("睡觉");
break;
case 2:
console.log("玩耍")
default: # 没有对应条件统一执行default子代码
console.log("无所事事!!!")
}
2、while循环
复制代码
- 1
while(循环条件){循环体代码}
3、for循环
复制代码
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
for(初始值;循环条件;每次循环之后的操作){循环体代码}
# 循环打印0-9的数字
for (var i =0;i<10;i++){console.log(i)}
# 循环打印数组内所有元素
var l1 = [11,22,33,44,55]
for(var i =0,i<li.length;i++){console.log(l1[i])}
三、三元运算符
复制代码
- 1
- 2
- 3
# python中的三元运算
res = 11 if 1 > 2 else 22
# if 条件成立使用前面的值,反之使用后面的值
复制代码
- 1
- 2
- 3
- 4
// js中的三元运算
res = 1 > 2 ? 11 : 22
// 问号前面的条件成立则使用冒号前面的值,反之使用冒号右面的值
// 三元运算一般情况不推荐嵌套使用
四、函数
1、函数定义与调用
复制代码
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
function 函数名(参数1,参数2){
函数体代码
return 返回值
}
// function 定义函数的关键字,相当于python中的def
// 函数名的命名参考变量名,并且js推荐使用驼峰体(MyFunc\MyFunc)
// 参数可写可不写
// return返回值
函数名(参数1,参数2) // 正常加括号调用,有参则传参
2、无参函数
复制代码
- 1
- 2
function f1(){console.log(111)}
f1()
3、有参函数
复制代码
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
function f2(a, b){console.log(a,b)}
f2() // 可以调用 相当于传了两个undefined
f2(1) // 可以调用
f2(1,2) // 可以调用
f2(1,2,3,4,5) // 可以调用
/*js中的函数提供了有个内置关键字arguments:接收所有参数*/
function f2(){
console.log(arguments)
if (arguments.length === 0){console.log('什么参数都没传')
}else if(arguments.length === 1){console.log('传了一个参数')
}else{
console.log('传了多个参数')
}
// 1.返回值参数
return 不支持返回多个数据
// 2.匿名函数:直接不写函数名
var ff = function (){
console.log(123)
}
// 3.箭头函数(drf中vue框架会再次接触)
var f = v => v; // 箭头左边是形参右边是返回值
// 等同于:
var f = function(v){
return v;
}
var f = () => 5; // 匿名函数
// 等同于:
var f = function(){return 5};
var sum = (num1, num2) => num1 + num2; // 多参数函数
// 等同于
var sum = function(num1, num2){
return num1 + num2; //这里的return只能返回一个值,如果想返回多个值需要自己手动给他们包一个数组或对象中
}
五、自定义对象
相当于python里面的字典
复制代码
- 1
var d1 = {'name':'jason','age':18}
python字典取值操作js中的自定义对象都有,并且自定义对象还可以直接通过句点符取值 更像一个对象
复制代码
- 1
- 2
- 3
- 4
- 5
- 6
// 取值操作
d1.name # jason
// 循环取值
for(var i in d1){
console.log(d1[i])
}
定义自定义对象还有一种标准格式(自定义对象 内置对象 第三方对象)
复制代码
- 1
- 2
- 3
- 4
var d1 = new Object() // 相当于生成了空字典
...
var d1 = new Date() // 内置对象
var reg1 = new RegExp("^[a-zA-Z][a-zA-Z0-9]{5,11}"); // 正则对象
六、内置对象
内置对象可以看成是python中的内置方法,内置模块等提前写好直接调用。
复制代码
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
// Date对象
var d1 = new Date()
d1.toLocaleString() // '2022/4/28 10:47:01'
d1.toLocaleDateString() // '2022/4/28'
d1.toLocaleTimeString() // '10:47:01'
// getDate() 获取日
// getDay () 获取星期
// getMonth () 获取月(0-11)
// getFullYear () 获取完整年份
// getYear () 获取年
// getHours () 获取小时
// getMinutes () 获取分钟
// getSeconds () 获取秒
// getMilliseconds () 获取毫秒
// getTime () 返回累计毫秒数(从1970/1/1午夜)
小练习:
复制代码
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
// 需求:2017-12-27 11:11 星期三
const WEEKMAP = {
0:"星期天",
1:"星期一",
2:"星期二",
3:"星期三",
4:"星期四",
5:"星期五",
6:"星期六"
}; // 定义一个数字与星期的对应关系对象
function showTime() {
var d1 = new Date();
var year = d1.getFullYear();
var month = d1.getMonth() + 1; //注意月份是从0~11
var day = d1.getDate();
var hour = d1.getHours();
var minute = d1.getMinutes() < 10?"0"+d1.getMinutes():d1.getMinutes(); //三元运算
var week = WEEKMAP[d1.getDay()]; //星期是从0~6
var strTime = `
${year}-${month}-${day} ${hour}:${minute} ${week}
`; // 格式化输出
console.log(strTime)
};
showTime();
七、JSON对象
复制代码
- 1
- 2
- 3
- 4
# python中如何序列化反序列
import json
json.dumps()
json.loads()
复制代码
- 1
- 2
- 3
// js中如何序列化反序列化
JSON.stringify()
JSON.parse()
八、正则对象
1、创建正则表达式的两种方式
复制代码
- 1
- 2
- 3
- 4
// 方式1:
var reg1 = new RegExp("^[a-zA-Z][a-zA-Z0-9]{5,11}");
// 方式2:
var reg2 = /^[a-zA-Z][a-zA-Z0-9]{5,9}$/; // 推荐使用(简化)
2、使用正则
复制代码
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
var reg2 = /^[a-zA-Z][a-zA-Z0-9]{5,9}$/;
reg2.test('jason123') true
// 括号内什么都不写 就相当于写了undefined
reg2.test() true
// 验证:
var reg3 = /undefined/ 直接正则写undefined
reg3.test('jason666') false
reg3.test('undefined') true
reg3.test() true
// 全局匹配
// 在正则表达式的最后添加一个字母g
var reg4 = /^[a-zA-Z][a-zA-Z0-9]{5,9}$/g;
reg4.lastIndex // 目前起始位置为0
// 0
reg4.test('jason666')
// true
reg4.lastIndex // 目前起始位置为8
// 8
reg4.test('jason666')
// false
九、BOM操作(了解)
Browser Object Model是指浏览器对象模型,它使 JavaScript 有能力与浏览器进行“对话”
1、window操作浏览器
复制代码
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
// 打开子页面
window.open('https://www.baidu.com','','width=400,height=400') // (网址,名称,大小), 子页面的操作其实可以通过一些手段传递给父页面(父子联动)
// 关闭页面
window.close()
// 查看计算机及浏览器版本
window.navigator.appVersion
window.navigator.userAgent
// 前进一页
window.history.forward()
// 后退一页
window.history.back()
// 获取页面的url地址
window.location.href
// 刷新页面
window.location.reload()
// 跳转到指定页面
window.location.href = url
ps:window可以省略不写
2、弹框系列
复制代码
- 1
- 2
- 3
- 4
- 5
alert("你看到了吗?") // 页面弹框提示,可点击确认
confirm('要不要敲老赵的天灵盖') // 页面弹框提示,可点击确认、取消,点击确认返回true,点击取消返回false,至后端服务器
prompt('你还有什么要交代的吗') // 弹框提示用户输入内容,并且返回内容至后端服务器;也可以通过第二个参数添加默认内容
3、计时器
(1)单次计时
复制代码
- 1
- 2
var t = setTimeout(showMsg,9000) // 9秒钟之后自动执行showMsg
clearTimeout(t) // 取消定时器
(2)循环定时
复制代码
- 1
- 2
var s = setInterval(showMsg,3000) // 每隔3秒执行一次
clearInterval(s) // 取消定时器
(3)使用单次计时结束循环定时
复制代码
- 1
- 2
- 3
- 4
function showMsg() { alert(123) }
var t = setInterval(showMsg,3000) // 循环定时3秒执行showMsg
function clearMsg() { clearInterval(t) } // 包装结束循环定时的对象t
setTimeout(clearMsg, 9000) // 单次定时执行结束对象t的函数
ps:
复制代码
- 1
- 2
- 3
- 4
- 5
由于DOM是操作页面上的HTML代码 但是HTML页面加载顺序是从上往下
所以如果想要我们的代码能够正常执行 必须要先等待html页面加载完毕
解决的措施之一:
将script标签写在body内最下方
十、DOM操作
Document Object Model是指文档对象模型,通过它可以操作HTML文档的所有元素;
但是HTML页面上有很多相同的标签,所以我们在操作HTML标签之前还要先学会如何查找标签(js查找标签)
JS查找标签:
(1)直接查找
复制代码
- 1
- 2
- 3
- 4
- 5
- 6
// 1.通过标签名查找标签
document.getElementsByTagName('div') // 数组套标签对象
// 2.通过class值查找标签
document.getElementsByClassName('c1') // 数组套标签对象
// 3.通过id值查找标签
document.getElementById('d1') // 标签对象本身
(2)间接查找
复制代码
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
parentElement 父节点标签元素
children 所有子标签
firstElementChild 第一个子标签元素
lastElementChild 最后一个子标签元素
nextElementSibling 下一个兄弟标签元素
previousElementSibling 上一个兄弟标签元素
// 方法得出的标签对象还可以继续点击上述方法
// 通过间接方法可以顺藤摸瓜,找到每一个标签对象
分类:
前端基础知识
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步