心情

今天是正式学习的第四天,感觉上午任务不是特别重,身心放松,知识点都掌握的不错;一到下午刚上课就画风突变,内容突然就男了,后来依旧是男上加男。。。

重点:

  • 四大循环(理解)
  • 内置函数(了解)
  • 在script中用document抓取body中元素,使其发生内容或状态的改变(理解)
  • 事件(理解)

知识点

一、对昨天内容的复习及作业解答:

switch...case的效率问题case后面是字面量(常量)

不要强行用switch

函数名的命名规则:小驼峰式(第一个单词首字母小写,其余单词首字母大写)

作业解答:给一个日期,确定它是所在年的第几天:

 function getDays(year,month,day){
let count = 0;
switch(month){
case 12 : count += 30;
case 11 : count += 31;
case 10 : count += 30;
case 9 : count += 31;
case 8 : count += 31;
case 7 : count += 30;
case 6 : count += 31;
case 5 : count += 30;
case 4:
count += 31;
case 3:
count += (isRun(year) ? 29 : 28)
case 2:
count += 31;
case 1:
count += day; }
return count;
}
console.log(getDays(2022,2,14));
function isRun2(year){
switch(year % 400){
case 0:
console.log(year + "是闰年");
return;
default:
if(year % 4 == 0 && year % 100 != 0){
console.log(year + "是闰年");
return;
}
console.log(year + "不是闰年");
}
}
isRun2(2100);

二、四大循环

1、for语句循环

面试题:for循环的执行步骤。

  1. let i = 0;初始化条件,当i=0时,循环开始,只走一次;

  2. i < 10;判断条件,会和初始化条件配合循环的执行,决定了循环什么时候停止;

  3. 循环体:这个循环在重复什么事情;

  4. i++ 是循环条件,每次循环体执行完毕,让i产生变化;

  • i 可以看做是一个局部变量,在一个for里;

  • 循环条件可根据实际情况更改;

  • 当更改循环条件时,确保循环条件能达到判断条件标准,避免死循环;

  • 在开发中避免死循环;

for(let i = 0;i < 10;i++){
// 循环体
console.log(i); }
// for 的几种死循环,死循环但不报错
// for(;;){
// } // for(let i = 0; i < 10;){
// } // for(let i = 0;;i++){
// } // for(let i = 0; ;){
// } let arr = [10,5,9,7,-5,100,257]
// 打印输出数字中所有元素
// console.log(arr[0]);
// 数组有一个属性length=长度
// 长度:数组中有多少元素
// 注意区分长度和下标(索引)
// 去除数组中最后一个元素,不能是undefined
// console.log(arr[arr,length-1]);
// 如果变量的作用域有重叠,不要出现重名的现象,全局和局部的变量最好不要重名
// 练习1:
// 找出数组中的最大值,可以用三元,可以用if...else
// 答1:// let max = 0;
// for(let i = 0;i < arr.length;i++){
// if(max < arr[i]){
// max = arr[i]
// }
// }
// console.log("最大值为:" + max);
// 答2:假设 max = arr[0](数组中第一个值)
let max = arr[0];
for (let i = 0;i < arr.length;i++){
if(max < arr[i]){
max = arr[i]
}
}
console.log("最大值为:" + max);

// 练习2:
// 判断一个数是否在数组中,如果在,返回它的下标
// 如果不存在,返回-1
let a = -5;
let index = -1;
for (let i = 0;i < arr.length;i++){
if(a == arr[i]){
index = i;
} }
console.log(index);

2.for in 循环语句:能做的事少,只能做遍历操作

// 可以理解为a是arr数组的下标通过映射给a

    let arr = [1,2,3,4,5];
for(let a in arr){
console.log(arr[a]);
}

3.while循环

执行流程:

  • let a = 10;初始条件

  • a < 100 循环判断条件

  • a++ 循环条件

    1.初始化条件

    2.判断条件

    3.执行循环体

    4.自增

    while循环 pk for循环

  • while初始化条件不受自己控制,for循环自己定义初始化条件

  • while循环条件没有固定位置不好控制,for循环的循环条件都是隔离的(有固定位置的)

  • while写函数时,返回值便于管理,

死循环:

    //    while(ture){};
// 练习1:
// 今年是2022年
// 今年我们公司有10个人
// 每年公司会以10%的比重招人
// 问:哪一年公司人数突破100人
// 答1:
let b = 10;
let i = 0;
while(b < 100 ){
b += 0.1*b;
i++;
}
console.log((2022 + i) + "年能突破100人");
// 答2:
function count(){
let year = 2022;
let sum = 10;
while(sum <= 100){
sum *= 1.1;
year++;
}
// return可以返回字符串
return year + "年超过了100人,人数是" + sum;
}
console.log(count());

4.do...while循环

执行流程:

  • let a 初始化条件
  • do 做什么事
  • log 循环体
  • a > 100判断条件
  • a++循环条件

do...while 和 while的区别

  • do...while先执行一次在判断,while如果条件不成立,一次都不执行
let a = 10;
do{
console.log(a); }while(a > 100);

do...while的死循环:

// do{}while(ture);

三、JS的内置函数

Array :

1.concat()链接

2.join('-')设置分隔符连接数组为一个字符串

3.pop()删除最后一个元素

4.sort()排序,从小到大

    let arr = [1,2,3];
// arr.pop();
// console.log(arr[2]);
console.log(arr.sort());

Global:

1.isNaN():判断一个值是不是数字

2.parseFloat:把一个整数转换成小数

3.parseInt():把一个小数取整

4.number():把一个值转换成number类型

5.string():把其他类型转换成字符串

    let a =1.9;
console.log(parseInt(a)); let num1 = parseFloat("11");
let num2 = parseFloat("12");
console.log(num1 + num2);

string:

1.charAt():取出指定位置的字符

2.indexxof():判断指定的字符是否存在,如果存在返回下标

3.lastIndexof('a'):从后往前找

4.replace('a','b'):替换字符串

5.split('-'):根据- 去拆分字符串,得到数组

6.substring(1,6);字符差截取

    let b = "hello";
console.log(b.charAt(0));

Math:

1.ceil():向上取整

2.floor():向下取整

3.round():四舍五入

4.random():随机生成一个0-1的随机数

5.三角函数():tan() sin() cot() cos()

6.E PI

let c = 10.5;
console.log(Math.ceil(c));
// 生成0-100的随机整数,不包括0,包括100
console.log(Math.random()*100);
// 生成5-11的随机整数
console.log(Math.random());

Date:

1.new Date():获取系统当前时间

2.getDate():返回日期的日

3.getHours():返回时间中的时

4.getMinutes():返回时间中的分

5.getSeconds():返回时间中的秒

6.getTime():获取系统当前时间

7.getYear():获取当前时间的年

四、在script中用document抓取body中元素,使其发生内容或状态的改变 (我认为和css有点相似)

    根据id抓取HTML元素
let div1 = document.getElementById('div1');
console.log("div1");
// 根据class抓取HTML元素,得到的事一堆元素
let divs = document.getElementsByClassName('div1');
console.log(divs[0]); // 根据标签抓取AHTML元素
let div3 = document.getElementsByTagName("div");
console.log(div3[0]); // 新方法
// 根据选择器抓取第一个元素(选择器在括号里,旧方法不在括号里)
let div = document.querySelector('.div');
console.log(div); // 根据选择器抓取全部某个类型元素
let div4 = document.querySelectorAll('.div');
console.log(div[0]); let div5 = document.querySelector('div'); // 获取元素内的文本
console.log(div.innerText); // 获取元素内的所有内容,包括标签
console.log(div.innerHTML); // 改变div内容,不认标签
div.innerText = "我是JS来的" // 改变div内容,认识标签
div.innerHTML = "<h1>我是JS来的<h1>"

五、事件就是我们和HTML标签元素发生交互时产生的行为

  • onclick:单击事件
  • ondblclicl:双击事件
  • onblur:失去焦点
  • onfocus:得到焦点
  • onchange:改变事件
  • onload:加载事件(加载的时候干什么)
  • onmousemove:鼠标跟随事件(跟随鼠标的特效)


        // 当设置了对应的时间之后会执行目标函数
// 点击按钮就弹出一个弹窗
function jump(){
alert("按钮被点击了") }
function valid(){
console.log("失去了焦点。。。"); }
function get(){
console.log("获得了焦点。。。"); }
function change(){
console.log("发生了改变");
}
function load(){
console.log("已经加载完毕");
} <details>
<summary>练习</summary> <!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<p>
账号:<input type="text" id="username">
</p>
<p>
密码:<input type="password" id="password">
</p>
<p>
<input type="button" value="登录" onclick="jump()">
</p> <script>
// 练习1
// 需求:当用户名==admin,密码==123456,提示登陆成功
// 否则,提示用户名或密码错误
// 思路:
// 给按钮添加单击事件
// 当点击按钮后,获取用户名框和密码框输入的值,然后判断,if()登陆成功else()用户名或密码错误
function jump(){
let username = document.getElementById("username").value;
let password = document.getElementById("password").value;
if(username == "admin" && password == "123456"){
alert("登录成功");
}else{
alert("用户名或密码错误");
} } </script>
</body>
</html> <!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
用户名:<input type="text" id="username" onblur="valid()">
<span></span> <script>
/*
在用户名的文本框中输入用户名,
如果用户名为admin,则在span中显示用户名已被占用
否则,显示用户名可用!
分析:
需要给文本框添加onchange,onblur,出发函数
需要向span中写入内容!innerText innerHTML
*/
function valid(){
let username = document.querySelector("#username").value;
let span = document.querySelector("span");
if(username == "admin"){
// 用户名已被占用
span.innerText = "用户名已被占用!"
}else {
// 用户名可用
span.innerText = "用户名可用!";
}
} </script>
</body>
</html> #作业: <!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<select id="sheng" onchange="setshi()">
<option>---请选择省---</option>
<option value="ji">吉林省</option>
<option value="li">辽宁省</option>
</select>
<select id="shi" onchange="setqu()">
<option >---请选择市---</option> </select>
<select id="qu">
<option>请选择区</option> </select> <script>
function setshi(){
document.querySelector('#qu').innerHTML='<option>请选择区</option>'; // 思路:
// 先抓取省的下拉菜单,知道你选了哪个省
// 判断哪个省
// 构建市的下拉菜单选项
// 抓取市的下拉菜单 //初始状态区没有选项
// 选择了省,区没有选项
// 选了省,选了市,选了区,又切换了省
let sheng = document.getElementById("sheng").value;
// 要保留市原本内容
let shi = document.querySelector("#shi");
let html = shi.innerHTML;
if(sheng =='ji'){
html='<option>请选择市</option>'
html += '<option value="cc">长春市</option><option value="sp">四平市</option>';
// 在写入选项之前清空
shi.innerHTML = "<option >---请选择市---</option>"
// 把拼接好的下拉菜单选项通过innerHTML放回下拉菜单中
shi.innerHTML = html;
}
if(sheng == 'li'){
html='<option>请选择市</option>'
html +='<option value="sy">沈阳市</option> <option value="dl">大连市</option>';
shi.innerHTML = "<option >---请选择市---</option>";
shi.innerHTML = html; }
}
function setqu(){
let shi = document.getElementById("shi").value;
let qu = document.querySelector("#qu");
let html1 = qu.innerHTML;
if (shi == "cc") {
html1='<option>请选择区</option>'
html1 +='<option value="cy">朝阳区</option><option value="ly">绿园区</option>';
qu.innerHTML = "<option>请选择区</option>";
qu.innerHTML = html1; }
if (shi =="sp") {
html1='<option>请选择区</option>'
html1 +='<option value="td">铁东区</option><option value="tx">铁西区</option>';
qu.innerHTML = "<option>请选择区</option>";
qu.innerHTML = html1; }
if (shi =="sy") {
html1='<option>请选择区</option>'
html1 +='<option value="hg">皇姑区</option> <option value="sh">沈河区</option>';
qu.innerHTML = "<option>请选择区</option>";
qu.innerHTML = html1; }
if (shi =="dl") {
html1='<option>请选择区</option>'
html1 +='<option value="jz">金州区</option><option value="gjz">甘井子区</option>';
qu.innerHTML = "<option>请选择区</option>";
qu.innerHTML = html1; }
} </script> </body>
</html>

20220712 第一小组 张明旭 JS学习记录的更多相关文章

  1. 我的three.js学习记录(二)

    通过上一篇文章我的three.js学习记录(一)基本上是入门了three.js,但是这不够3D,这次我希望能把之前做的demo弄出来,然后通过例子来分析操作步骤. 1. 示例 上图是之前做的一个dem ...

  2. 我的three.js学习记录(三)

    此次的亮点不是three.js的3d部分,而是通过调用摄像头然后通过摄像头的图像变化进行简单的判断后进行一些操作.上篇中我通过简单的示例分析来学习three.js,这次是通过上一篇的一些代码来与摄像头 ...

  3. vue.js学习记录

    vue.js学习记录 文章已同步我的github笔记https://github.com/ymblog/blog,欢迎大家加star~~ vue实例 生命周期 beforeCreate:不能访问thi ...

  4. D3.js学习记录【转】【新】

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  5. JS学习记录------JS基本指令

    对未来的恐慌,和想成为一名自由开发的梦想.让我觉得应该点亮一个新的技能:WEB前端开发. 重新学习JS以及jQuery,让我在日常code的过程中可以更得心应手,毕竟,我爱代码. 这篇文章主要记录的内 ...

  6. 我的three.js学习记录(一)

    在之前因为项目需要使用WebGL技术做网页应用,但是苦于自己没有接触,只是使用过OpenGL.然后接触到了thre.js这个第三方库之后我突然心情很愉快,这将节省我很多时间. 过了这个项目之后,就再也 ...

  7. css,js 学习记录

    记录一些自己曾经阅读,值得收藏的网址 --(css3新特性) https://segmentfault.com/a/1190000010780991#articleHeader41 --CSS3 3D ...

  8. python , angular js 学习记录【1】

    1.日期格式化 Letter Date or Time Component Presentation Examples G Era designator Text AD y Year Year 199 ...

  9. Js 框架之Vue .JS学习记录 ① 与Vue 初识

    目录 与 Vue.js 认识 VUE.JS是个啥?有啥好处? Vue 的目标 战前准备  VUE.JS环境 VUE.JS 尝试一下,你就明白 第一步 实例化VUE 对象 第二步VueAPP 调用数据 ...

  10. js 学习记录(一)

    前情提要: 本记录参照  <<javascript 入门导论>>  这本书学习 

随机推荐

  1. 最新go语言学习教程

    go语言学习教程 集合了连接go routine.go连接redis.go连接kafka等示例,所有代码均经过实践,可以直接使用 https://github.com/fastbpmn/go-stud ...

  2. django中读取settings中的相关参数

    from django.conf import settings print(settings.IP_LOCAL)

  3. 可收集ALC问题[A non-collectible assembly may not reference a collectible assembly.]

    ITask程序集在共享类库中定义,初衷是任务调度程序,创建新的可卸载ALC以供每一个任务运行,此时会出现两个问题: 任务调度程序加载了任务程序后,任务程序中的ITask类型和任务调度程序中的ITask ...

  4. NanoPi R1 安装 python环境 及opencv

    (友善NanoPi  1G RAM/8GB eMMC) 安装python2/python3  pip/pip3 环境 sudo apt-get install python sudo apt-get ...

  5. ES6-新增方法

    一.字符串的新增方法 1.includes方法(实例的方法): 应用: 代码优化: (1)先使用includes方法判断是url中否包含? (2)如果包含?, 再判断url最后一位字符是不是?或&am ...

  6. python实现web应用程序(1)虚拟环境与Django

    前言 在这个系列博客中,我将使用python实现一个名为"OI笔记"的项目. 1 建立项目目录 第一步,我们先为自己的项目建立一个目录. 首先,打开终端. win+r键,然后输入c ...

  7. accept 类型列表

    *.3gpp audio/3gpp, video/3gpp 3GPP Audio/Video *.ac3 audio/ac3 AC3 Audio *.asf allpication/vnd.ms-as ...

  8. JavaScript的Array.flat()函数深入探讨

      JavaScript的Array.flat()函数深入探讨 在过去的几年中,已经将许多有用的功能添加到Javascript Array全局对象中,这些功能为开发人员在编写可用于数组的代码时提供了多 ...

  9. Ubuntu16.04设置root以及root用户自动登录

    自己之前做的笔记确实不是很详细.因为像是一些环境的配置,即使是这样做,但是自己大概率下是不知道这样做的原因,所以很多东西能不能弄好是有很大的运气成分在里面.所以就很需要记录下自己到底干了些什么. 所以 ...

  10. ubuntu添加新硬盘进行分区,并挂载到/home

    ubuntu添加新硬盘,进行分区,并挂载到/home目录. 1.查看已有的磁盘,可以看到sdb还没有分区. > sudo fdisk -l 可以看到各个硬盘的设备名,一般以sda.sdb.sdc ...