前端(五)

运算符

算术运算符

var x=10;
var res1=x++;  // 先赋值后自增1  10
var res2=++x;  // 先自增1后赋值  12

比较运算符

弱等于:自动转换类型
'5' == 5  '结果是true js会自动转换成相同数据类型比较值是否一样'
强等于:不转换类型,必须完全一样才为true
'5' === 5  '结果是false'

逻辑运算符

&&与  ||或  !非

流程控制

if判断

if...else if...else分支// 单if
if(条件){
      // 条件成立执行的分支代码块
    }
// if else分支
if(条件){
	// 条件成立执行的分支代码块
}else{
	// 条件不成立执行的分支代码块
}
// if...else if...else分支
if(条件1){
	// 条件1成立执行的分支代码块
}else if(条件2){
	// 条件1不成立条件2成立执行的分支代码块
}else{
	// 条件1和2都不成立执行的分支代码块
}

switch

var n1 = 1;
switch (n1) 
{
	case 0:
		console.log("干饭");
		break;  # 如果不加break会基于当前位置一直往下运行
	case 1:
		console.log("睡觉");
		break;
	case 2:
		console.log("玩耍")
	default:  # 没有对应条件统一执行default子代码
		console.log("无所事事!!!")
}

while

while (条件)
{
    // 需要执行的代码
}

do/while

do
{
    // 需要执行的代码
}
while (条件);

至少会执行一次

for循环

for(初始值;循环条件;每次循环之后的操作){
    // 循环体代码
}

三元运算符

res = 1 > 2 ? 11 : 22
// 问号前面的条件成立则使用冒号左边的值,否则使用冒号右边的值三元运算一般情况下都不推荐嵌套使用!

函数

函数定义:
function 函数名(参数1,参数2){
函数体代码
return 返回值
}
1.function 定义函数的关键字
2.函数名的命名参考变量名 并且js推荐使用驼峰体(Myfunc\MyFunc)
3.参数可写可不写
4.return返回值
函数调用:
函数名加括号 有参则传参即可

无参函数

function f1(){console.log(111)}
f1()

有参函数

function f2(a, b){console.log(a,b)}
f2()  # 可以调用 相当于传了两个undefined
f2(1)  # 可以调用 
f2(1,2)  # 可以调用
f2(1,2,3,4,5)  # 可以调用
function f2()
{
	console.log(arguments)
	if (arguments.length === 0){
		console.log('什么参数都没传')
	}else if(arguments.length === 1){
		console.log('传了一个参数')
	}else{
		console.log('传了多个参数')
	}
}

js中的函数提供了有个内置关键字arguments:接收所有参数
实参的集合(不是数组,但是类似数组,有length,也可以用下标找到其中的数据)
当函数参数个数无法确定的时候,用arguments

返回值参数

return不支持返回多个数据

匿名函数

var ff = function ()
{
	console.log(123)
}
// ff可以看成函数名

箭头函数

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一致)

自定义对象

自定义对象(相当于python里面的字典)

var d1 = {'name':'jason','age':18}
// python字典取值操作js中的自定义对象都有,并且自定义对象还可以直接通过句点符取值,更像一个对象
// 取值操作
d1.name  # jason
// 循环取值
for(var i in d1)
{
	console.log(d1[i])
}
// 定义自定义对象还有一种标准格式(自定义对象 内置对象 第三方对象)
var d2 = new Object()  // 相当于生成了空字典

内置对象

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午夜)

小练习: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}
    `;
    // var strTime = year + '-' + month + '-' + day + '-' + hour + '-' + minute + '-' + week
    console.log(strTime);
};
showTime();

JSON对象

// js中如何序列化反序列化
JSON.stringify();
JSON.parse();

正则对象

// 创建正则表达式的两种方式
var reg1 = new RegExp("^[a-zA-Z][a-zA-Z0-9]{5,11}");
var reg2 = /^[a-zA-Z][a-zA-Z0-9]{5,9}$/;  # 推荐使用(简化)

// 使用正则
reg2.test('jason123')  // true
// 括号内什么都不写 就相当于写了undefined
reg2.test()  //  true

// 验证
var reg3 = /undefined/
reg3.test('jason666')  // false
reg3.test('undefined')  // true
reg3.test()  // true

// 全局匹配
//  在正则表达式的最后添加一个字母g
var reg2 = /^[a-zA-Z][a-zA-Z0-9]{5,9}$/g;
reg3.lastIndex  // 0
reg3.test('jason666')  // true
reg3.lastIndex  // 8
reg3.test('jason666')  // false

BOM操作(了解)


window.open('https://www.baidu.com','','width=400,height=400')
/* 
打开子页面 
	子页面的操作其实可以通过一些手段传递给父页面(父子联动)
关闭页面
	window.close()  
*/
window.navigator.appVersion
window.navigator.userAgent


window.history.forward()  // 前进一页
window.history.back()  // 后退一页


window.location.href  // 获取页面的url地址
window.location.reload()  // 刷新页面
window.location.href = url  // 跳转到指定页面
// window可以省略不写

// 弹框系列
alert("你看到了吗?")  // 警告
confirm('要不要敲老赵的天灵盖')  // 确认
// 获取用户是点击取消还是确认 返回false和true
prompt('你还有什么要交代的吗')  // 提示
// 获取用户输入的内容 也可以通过第二个参数添加默认内容
   
// 计时器
// 单次定时
var t = setTimeout(showMsg,9000)  // 9秒钟之后自动执行showMsg
clearTimeout(t)  // 取消定时器
// 循环定时
var s = setInterval(showMsg,3000)  // 每隔3秒执行一次
clearInterval(s)  // 取消定时器
  
function showMsg() 
{
	alert(123)
}
var t = setInterval(showMsg,3000)
function clearMsg() 
{
	clearInterval(t)
}
setTimeout(clearMsg, 9000)
// 轮播图会用到计时器

由于DOM是操作页面上的HTML代码 但是HTML页面加载顺序是从上往下
所以如果想要我们的代码能够正常执行 必须要先等待html页面加载完毕

解决的措施之一:
将script标签写在body内最下方

DOM操作

Document Object Model是指文档对象模型,通过它可以操作HTML文档的所有元素
但是HTML页面上有很多相同的标签 所以我们在操作HTML标签之前还要先学会如何查找标签(js查找标签)

直接查找

// 通过标签名查找标签
document.getElementsByTagName('div')  // 数组套标签对象
// 通过class值查找标签
document.getElementsByClassName('c1')  // 数组套标签对象
// 通过id值查找标签
document.getElementById('d1')  // 标签对象本身

间接查找

parentElement  // 父节点标签元素
children  // 所有子标签
firstElementChild  // 第一个子标签元素
lastElementChild  // 最后一个子标签元素
nextElementSibling  // 下一个兄弟标签元素
previousElementSibling  // 上一个兄弟标签元素
// 方法得出的标签对象还可以继续点击上述方法
posted @ 2022-04-28 20:37  小金同学要加油  阅读(25)  评论(0)    收藏  举报