韩顺平javaweb2022-javaScript笔记

javaScript

JavaScript能做什么?

修改HTML的属性

javaScript的特点

  • 解释型脚本语言,逐行进行解释
  • 可以创建对象,也可以使用现有对象
  • 变量的数据类型在运行过程中可以变化

js代码写在script标签中,最好写在head中,写在body中也行.

代码的执行顺序是从上到下的;

代码

image-20230601091921832

输出效果

打开网页控制台console的快捷键ctrl+shift+i

image-20230601091959245

使用JS的方式

  • 在head中使用script标签直接写
  • 在head中使用script标签链接js文件

注意:如果两种方式都使用,只有一种方式生效(按照顺序)

排查网页代码书写错误的方式

  • 控制台console中看

  • image-20230601094001635

  • 在调试器(Sources)中查看

  • image-20230601094053998

JS变量

var 直接声明你想要的类型

常用的数据类型

数值类型: number

字符串类型: String 可以用’ ’ 也可以用""

对象类型: object

布尔类型: boolean

函数类型: function

示例:

var n1 = “汤姆”//代表n1就是String类型

var n1 = 123 ;//代表n1就是number类型

特殊值

undefined 变量未初始赋值 ,默认undefined

null 空值

NaN 非数值

代码1

var n1 = 10.1;
console.log(n1);
console.log(typeof  n1);
var n2 = true;
console.log(n2);
console.log(typeof n2);

代码2

image-20230601100109445

console结果

image-20230601094928491

运算符

算术运算符

image-20230601100903259

赋值运算符

image-20230601100915760

关系运算符

image-20230601100826327

逻辑运算符

image-20230601133213403

&& 且运算

  • 当表达式全为真的时候,返回最后一个表达式的值
  • 当表达式中,有一个为假的时候,返回第一个为假的表达式的值

|| 或运算

  • 当表达式全为假时,返回最后一个表达式的值
  • 只有一个表达式为真,就会返回第一个为真的表达式的值

&& ,||有短路现象

当有确定结果后,后面的表达式不执行?

代码

<script type="text/javascript">
  var num1 = 1;
  var num2 = 2;
  var num3 = (num1++ < 100)|| num2++ ;
  alert("num1=" + num1 + "num2="+num2 );
</script>

效果图

image-20230601134834935

条件运算符

类似三元运算符(一真大师)

代码

<script type="text/javascript">
  //如果条件表达式为T,返回第一个值,否则返回第二个值
  var res = (10<1)? "汤姆": "tangMu" ;
  alert("res="+res);
</script>

效果图

image-20230601135447667

JS数组

数组定义的方式

  • 直接赋值

    示例:

    var num1 = [1,2,3,4];

  • 定义一个空数组不固定数组的长度,后面再给数组中每一个元素赋值,会自动给数组扩容.

    示例:

    var num1 = [];

    num1[0] = 1;

    num1[1]= 2;

  • new Array()

    不直接赋值定义为空数组时也会自动扩容

    示例:

    var num1 = new Array (1,2,3);

数组遍历

代码

<script type="text/javascript">
  var cars = ["宝马","奥迪","奔驰","bba",17];
  console.log("数组的长度" + cars.length)
  for (let i = 0; i < cars.length; i++) {
    console.log(cars[i]);
  }
</script>

效果图

image-20230601141448328

函数

function

概念

如果不调用函数,函数不会执行.

调用方式:

  • 主动调用 a()

    示例:

    ​ 代码

    function a(){
      alert("你好function");
    }//命名可以随便命名 a()-
    >b()
    a();
    

    达到效果图

    image-20230601142051385

  • 通过事件去触发函数

    代码

    <head>
      <meta charset="UTF-8">
      <title>Title</title>
      <script type="text/javascript">
        var cars = ["宝马","奥迪","奔驰","bba",17];
        console.log("数组的长度" + cars.length)
        for (let i = 0; i < cars.length; i++) {
          console.log(cars[i]);
        }
        function a(){
          alert("你好function");
        }
    
      </script>
    </head>
    <body>
    <button onclick="a()">点击这里</button>
    </body>
    

    达到效果

    image-20230601142419100

定义函数

function

基本语法:

function 函数名(形参列表){

​ 函数体

return 表达式

}

调用:

函数名(实参列表);


​ 代码:

//无参无返回值
function hi(){
  alert("say hi");
}
hi();
//有参数有返回值
    function  h2(id,name){
      return id+name ;
    }
    alert(    h2(1,2)
    );

​ 效果图:

image-20230601145055721

image-20230601145401975


var

基本语法:

var 函数名 = function(形参列表){

return 表达式;

}

调用:

函数名(实参列表);

示例:

  • 代码

    var num3 = function (id){
      return id ;
    }
    alert(num3(100));
    
  • 效果图

image-20230601150118137

JS函数注意事项和细节

  • JS函数重载会覆盖掉上一次的定义

    示例:

    ​ 代码

    function num1(){
      alert("你好无参num1");
    }
    num1();
    function num1(name){
      alert("你好有参"+name);
    }
    num1();
    

    ​ 效果图

    image-20230601151352670

  • 函数的agrument隐形参数(作用域在fuction 函数内)agrument是数组

    • 隐形参数:在function函数中不需要定义,可以直接用来获取所有参数的变量
    • 隐形参数特别像java中可变参数.public void fun(int…args)
    • js中隐形参数操作和Java可变参数一样,操作类似数组

示例:

​ 代码

function arr(){
  //遍历数组,注意console.log("arr="+arguments)会自动变成Object
  console.log("arr=",arguments);
}
arr("小红","小黄","小楠");

​ 效果图

image-20230601152033786


image-20230601152139600


示例2

如果有形参,在调用时形参个数与实参个数不匹配

  • 形参 < 实参

    • 如果匹配上了就赋值,但所有的实参都会存入arguments中
  • 形参 > 实参

    • 所有实参都会加入到arguments中,未匹配上的形参会被赋值为undefined

老韩练习

练习1

image-20230601152941854

代码:

function sum1() {
  //是否要用到arguments
    var num0 = 0;
    for (let i = 0; i < arguments.length; i++) {
      if (typeof (arguments[i]) == "number") {
        num0 += arguments[i]; 
    }
  }
    return num0 ;
}
alert(sum1(1,2,3,"汤姆"));
//注意:
错误列表:
1,判断的应该是遍历过的arguments[i],而不是整个arguements
2,返回值时在for循环执行完后返回

效果图:

image-20230601160512894


自定义对象方式

Object

定义方式

var 对象名 = new Object();//对象实例(空对象)

对象名.属性 = 值;//定义一个属性值

对象名.函数名 = function(){}//定义一个函数

访问对象

对象名.属性

对象名.函数名();

注意:当访问未定义的对象的属性或函数时,会自动转换为undefined类型.

​ 示例:

​ 代码

var obj = new Object();//无参类型
obj.name = "汤姆";
obj.meth = function (){
  alert("hello汤姆");
  console.log(this.name)
}
//调用Object对象
alert(obj.name);
obj.meth();

{}形式

语法

var 对象名 = {

属性名 : 值,//定义属性

属性名 : 值 ,

函数名 : function(){}//定义函数

}

访问对象

对象名.属性名;

对象名.函数名();

​ 示例:

​ 代码:

var kh = {
  name : "汤姆",
  id : 1 ,
  hi:function (){
    alert("你好汤姆");
  }
}
alert(kh.name+kh.id);
kh.hi();

事件

静态注册事件

通过html标签的事件 属性直接赋予事件响应后的代码

动态注册事件

通过js代码得到标签的dom对象,然后再通过dom对象.事件名 = function(){}

示例:

​ 代码

<head>
//静态注册事件
    function  hi(){
      alert("---静态注册事件");
    }
    window.onload = function (){
      alert("---动态注册事件");
    }
  </script>
</head>
<body>
<h1>hello</h1>
<input type="text" value="test">
</body>

常用事件

onload

window.onload = function (){

}

注意:window.onload 让页面先加载完毕

onClick事件

​ 代码:

<script type="text/javascript">
  function sayOK() {
  alert("你点击了sayOK按钮");
}

window.onload = function (){
    var btn01 = document.getElementById("btn01");
    alert(btn01);
    btn01.onclick = function (){
      alert("你点击了sayhi按钮");
    }
  }
</script>
<body>
<button onclick="sayOK()">sayOK按钮</button>
<button id="btn01">sayhi按钮</button>
</body>

​ 注意:这里获取到id = “btn01” 的button 是用document.getElementById()

onblur

onblur失去焦点事件

​ 代码

<script type="text/javascript">
  //静态注册事件onblur
  function update(){
    //获得input输入的属性值
    //1,先获得dom对象用document
    var name1 = document.getElementById("name1");
    //将获得的value变为大写字母再重新赋值给原来的value
     name1.value = name1.value.toUpperCase();
  }
  //动态onblur事件
  window.onload = function (){
    //先获得input输入的属性值
  var name2 = document.getElementById("name2");
  //将获得的value变为大写字母再重新赋值给原来的value
    name2.onblur = function () {
  name2.value =    name2.value.toUpperCase();
    }
  }
</script>

<body>
请输入英文单词:
<input type="text" id="name1" onblur="update()"><br>
请输入英文单词:
<input type="text" id="name2">

</body>


效果图:

image-20230604101940546

onchange内容发生改变事件

国家->省->市等等

代码:
<script type="text/javascript">
  //静态注册事件onchange
  function change(){
    alert("您的工资发送了改变");
  }
  //动态注册事件onchange
  window.onload = function (){
    //先获取select的dom对象
    var girl = document.getElementById("girl");
    //将获取的对象绑定onchange事件
    girl.onchange = function (){
      alert("您的女票发生变化");
    }
  }
</script>
<body>
<select onchange="change()">
  <option>--工资范围--</option>
  <option>10k以下</option>
  <option>10k-20k</option>
  <option>20k-30k</option>
</select><br>
<!-- 女票变化-->
<select id="girl">
  <option>女票变化</option>
  <option>小红</option>
  <option>小绿</option>
  <option>小黄</option>
</select>

</body>

效果图:

image-20230604103527038

表单提交事件
静态注册事件(表单)
代码:
<script type="text/javascript">
  function form1(){
    //判断提交信息是否为空如果为空,无法跳转页面
    //步骤
    //1先根据获取表单中value
    var host = document.getElementById("host");
    var pwd = document.getElementById("pwd");
    var value1 = "";
    if(host.value == value1||pwd.value == value1){
      alert("您输入的为空,请重新输入");
      return false ;
    }
    return true ;
  }
</script>
<body>
<form action="onblur.html" onsubmit="return  form1()">
 账户名:
  <input type="text" id="host" name="account"><br>
  密码:
  <input type="text" id="pwd" name="password"><br>

  <input type="submit" value="提交">

</form>
</body>


效果图

image-20230604120247373

动态注册事件(表单)
代码
<script type="text/javascript">
  //动态注册表单提交事件
  //1,先获取表单的dom对象
  window.onload = function () {
    var form1 = document.getElementById("form1");
    //创建表单的提交事件
    form1.onsubmit = function () {
      //对表单中的属性直接进行判断
      if (form1.account.value == "" || form1.password.value == "") {
        alert("输入不能为空白请重新输入");
        return false;
      }
      return true;
    }
  }
    </script>
    <body>
<form action="onblur.html" id = "form1">
  账户名:
  <input type="text" id="host" name="account"><br>
  密码:
  <input type="text" id="pwd" name="password"><br>

  <input type="submit" value="提交">
</form>

</body>



效果图

image-20230604140230539

表单提交事件(js正则)

js中正则表达式的转义符使用的是 /

代码:
<script type="text/javascript">
  //1,用户名的长度为4-6位
  //先取出用户名的dom对象

  window.onload = function () {
    var form1 = document.getElementById("form1");
    form1.onsubmit = function () {

      if (form1.hostName.value.length < 4 || form1.hostName.value.length > 6) {
        alert("输入的用户名长度必须为4-6");
        return false;
      }
      if (form1.pwd.value.length != 6) {
        alert("输入的密码长度必须为6");
        return false;
      }
      if (form1.pwd.value != form1.pwd1.value) {
        alert("输入密码不一致,请重新输入");
        return false;
      }
      //例如123-@souHu.com
      //是直接写匹配模式去==匹配吗?
      //不是
      //写正则表达式的dom对象,调用test()方法
      var email01 = '/^[\w-]+@([a-zA-Z]+\.)+[a-zA-Z]+$/';
      if (!email01.test(form1.email01.value)){
        alert("您输入的格式不正确请重新输入")
        return false;
      }

    }
  }
</script>
<h1>注册用户</h1>
<form action="onblur.html" id="form1">
  用户名: <input type="text" name="hostName"><br>
  密    码: <input type="password" name="pwd"><br>
  确    认: <input type="password" name="pwd1"><br>
  电    邮: <input type="email" name="email01"><br>
  <input type="submit" value="注册用户">
</form>


效果图

image-20230604144441982

DOM

Document Object Model 文档对象模型

功能:

把文档中标签,属性,文本,转换成为对象来管理

document

案例1
代码
<script type="text/javascript">
  //动态点击事件
  //先获取事件的对象
  window.onload = function () {
    var name1 = document.getElementById("name1");
  name1.onclick = function (){
    alert(name1.innerText);
  }
  }
  //静态点击事件
  function test(){
    //先获取h对象
    var elementById = document.getElementById("name2");
    elementById.onclick = function () {
      alert(elementById.innerText);
    }
  }

</script>
<body>
<h1 id="name1"value = "韩顺平教育">韩顺平教育</h1>
<h1 id="name2" onclick="test()">Tom</h1>
</body>

效果图

image-20230604192613827

案例2(多选框)
代码:
<script type="text/javascript">
  function selectAll(){
    //获取同一组选项
    var sport = document.getElementsByName("sport");
    //遍历NodeList,将checked赋值为true
    for (let i = 0; i < sport.length; i++) {
      sport[i].checked = true ;
    }
  }
  function selectNone(){
    //获取同一组选项
    var sport = document.getElementsByName("sport");
    //遍历NodeList,将checked赋值为true
    for (let i = 0; i < sport.length; i++) {
      sport[i].checked = false ;
    }
  }
  //反选
  function selectReverse() {
    //获取同一组选项
    var sport = document.getElementsByName("sport");
    // //遍历NodeList,将checked赋值为true
    for (let i = 0; i < sport.length; i++) {
      //   if(sport[i].checked != true) {
      //     sport[i].checked = true;
      //   }else {
      //     sport[i].checked = false ;
      //   }

      sport[i].checked = !sport[i].checked;
    }
  }



</script>
<body>
你会的运动项目:
 <input type="checkbox" name="sport" value="zq" checked="checked">足球
<input type="checkbox" name="sport" value="tq">台球
<input type="checkbox" name="sport" value="ppq">乒乓球<br>
<button onclick="selectAll()">全选</button>
 <button onclick="selectNone()">全不选</button>
 <button onclick="selectReverse()">反选</button>

</body>


效果图:

image-20230604195710254

添加图片
代码:
  <script type="text/javascript">
    function addImg(){
      //创建一个html的dom对象(img)
      var img = document.createElement("img");
      //添加img的属性
      img.src = "./img/1.png";
      document.body.appendChild(img);
    }
  </script>
</head>
<body>
<input type="button" onclick="addImg()" value="添加小猫">
</body>
效果图

image-20230605111308710

图片交互
代码:
<script type="text/javascript">
  function changeImg() {
    //根据value,change图片
    var imgs = document.getElementsByTagName("img");
    //1,先获得value
    var change = document.getElementById("change");
    if (change.value == "查看多少小猫,并切换多少小狗") {
      change.value = "查看多少小狗,并切换多少小猫";
      //切换图片
      //1,获取图片数组
      //2,遍历数组,更换图片src
      for (let i = 0; i < imgs.length; i++) {
        imgs[i].src = "./img/" + (i + 4) + ".png";
      }
    } else if (change.value == "查看多少小狗,并切换多少小猫") {
      change.value = "查看多少小猫,并切换多少小狗";
      for (let i = 0; i < imgs.length; i++) {
        imgs[i].src = "./img/" + (i+1) + ".png";
      }

    }
  }

</script>
<body>
<img src="./img/1.png" height="100">
<img src="./img/2.png" height="100">
<img src="./img/3.png" height="100">
<br>
<input type="button" onclick="changeImg()" value="查看多少小猫,并切换多少小狗" id="change">

</body>


效果图:

image-20230605113943535

节点

快捷键:idea 中 ctrl+home 跳转到行首

​ idea 中 ctrl+end 跳转到行尾

如果你的笔记本电脑没有 Home 和 End 键,你可以通过按下 Fn(即 Function 键) + 左箭头(即 Home)或 Fn + 右箭头(即 End)来模拟 Home 或 End

常用方法
getElementById(代码)
//查找id = java 节点
//运用动态注册事件
window.onload = function () {
  //通过注册按钮的点击事件
 var btn01 = document.getElementById("btn01");
 btn01.onclick = function () {
   //先拿到id=java的dom对象
   var java = document.getElementById("java");
   alert("java节点的内容为 " + java.innerText);
 }
效果图

image-20230605152804109

getElementsByTagName

代码:

 //查找所有option节点
 var btn02 = document.getElementById("btn02");
btn02.onclick =  function () {
  //拿到option的dom对象
  var option = document.getElementsByTagName("option");
  for (let i = 0; i < option.length; i++) {
    alert(option[i].innerText);
  }
}
效果图

image-20230605153101767

getElementsByName

代码:

//查找name = sport 的结点
var btn03 = document.getElementById("btn03");
btn03.onclick = function () {
  var sports = document.getElementsByName("sport");
  for (let i = 0; i < sports.length; i++) {
    if (sports[i].checked == true) {
      alert(sports[i].value);
    }
  }
}
效果图image-20230605153458648
childNodes
//返回id = sel01 的所有子节点
var btn05 = document.getElementById("btn05");
//包含text文本
  btn05.onclick = function () {
    var childNodes = document.getElementById("sel01").childNodes;
    for (let i = 0; i < childNodes.length; i++) {
      if (childNodes[i].selected) {
        alert(childNodes[i].innerText);
      }
    }
  }
      <select id="sel01">
      <option>---女友---</option>
      <option>艳红</option>
      <option id="ct" value="春桃菇凉">春桃</option>
      <option>春花</option>
      <option>桃红</option>
    </select>

注意:在查询所有节点时
这里有text文本 —女友—.

只要不是连接在一起换行后默认为text文本.

效果图

image-20230605154135923

firstChild

代码:

//返回id = sel01 的第一节点
var btn06 = document.getElementById("btn06");
btn06.onclick = function () {
  var firstChildNode = document.getElementById("sel01").firstChild;
  alert(firstChildNode);
效果图:

image-20230605154307530

parentNode
//根据某个结点去拿到父结点
var btn07 = document.getElementById("btn07");
btn07.onclick = function () {
  var parentNode = document.getElementById("java").parentNode;
  alert(parentNode);
}
效果图

image-20230605155128068

previousSibling nextSibling

代码:

//返回id = ct 的前后兄弟结点
  var btn08 = document.getElementById("btn08");
  btn08.onclick = function () {
   var ct = document.getElementById("ct");
   alert(ct.previousSibling);
   alert(ct.nextSibling);

  }
        <option>艳红</option>
      <option id="ct" value="春桃菇凉">春桃</option>
      <option>春花</option>

注意: 春桃前后都有换行,会被默认认为是 object Text

效果图

image-20230605160956521

innerText

代码:

//设置#person文本域
  var btn10 = document.getElementById("btn10");
btn10.onclick = function () {
  var person = document.getElementById("person");
  person.innerText = "你好JS";
}
效果图:

image-20230605161459102

老韩乌龟吃鸡小游戏

建立方向盘

代码:
<form>
  <table border="2px">
    <tr>
      <td></td>
      <td>向上走</td>
      <td></td>
    </tr>
<!--    第二行-->
    <tr>
      <td>向左走</td>
      <td></td>
      <td>向右走</td>
    </tr>
<!--    第三行-->
    <tr>
      <td></td>
      <td>向下走</td>
      <td></td>
    </tr>
  </table>
</form>
效果图:

image-20230605165741778

添加Turtle和Chicken的图片

代码
<div  id="Turtle" style="position: absolute;left: 100px ;top: 100px">
<img src="./img/1.bmp" width="100px" >
</div>
<div id="Chicken" style="position: absolute ;left: 200px;top: 200px">
<img src="./img/2.bmp" width="100px" >
</div>

注意:这里的坐标,是根据窗口的左上角开始定位(absolute绝对定位),left表示图片距离源点横坐标的距离,top表示图片距离源点众坐标的距离

效果图:

image-20230605170227063

总结:

动态事件判断碰撞时会出现传值判断失败问题,无法判断碰撞和弹出弹窗.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值