WBE前端笔记3:JavaScript练习--基础语法

简介: WBE前端笔记3:JavaScript练习--基础语法

插入Javascript脚本的三种方式

1.行间事件方式 以及 按钮的onclink和alert

<body>
    <input type="button" value="hello" onclick="window.alert('hello word!!!!!!!')"></input>
</body>

使用上述代码即可实现点击按钮弹出窗口的效果

image.png

2.代码块的方式

    <script type="text/javascript">
        window.alert("hello")
    </script>

执行上述代码,打开网页就会显示弹窗

image.png

3.外部文件的方式

创建js文件夹并在其中创建hello.js

在内部写入代码

window.alert("hello kitty");

然后在html中调用

<body>
    <script type="text/javascript" src="js/hello.js"></script>
</body>

运行后结果为

image.png

4.函数

编写如图所示代码

<body>
    <input type="button" onclick="sayhello('wwwww')" />
    <script type="text/javascript">
      function hanshu(a,b){
        window.alert(a+"?"+b);
      }
      hanshu("abc",true);
      hanshu();
      hanshu(1);
      hanshu(1,2);
      hanshu(1,2,3);
      // 第二种声明方式
      mysum=function(a,b){
        return a+b;
      }
      var res=mysum(10,20);
      window.alert(res);
      function sayhello(a){
        window.alert("hello!!!"+a);
      }
    </script>
  </body>

执行结果为:

image.png

全局变量与局部变量相较于java不同的地方

    <script type="text/javascript">
      function sayhello(){
        p="asdadasd";
      }
      sayhello();
      window.alert(p);
    </script>

调用结果为

image.png

在JavaScript中不使用var关键字进行声明的变量,都为全局变量

js中的函数是不能重载的

函数若重名 后声明的会覆盖前面的

数据类型

number

NaN

在js脚本运行数学运算时,若结果不是数字,则会返回nan

例如

  <body>
    <script type="text/javascript">
      var res = 199/"http";
      window.alert(res);
    </script>
  </body>

image.png

infinity

无穷大 在js中计算 100/0时变量中的值将为infinity

isNaN函数

isNaN会判断传入参数是否为数字

如果不是数字 返回true

是数字,返回flase

特殊的bool型的数据使用isNaN也会被判定为数字

number函数

number函数会将传入的参数

<body>
    <script>
        var i=Number("123456");
        window.alert(typeof(i));
    </script>
</body>

结果为:

image.png

parseInt函数

使用parseInt可以将其他数据类型暴力取整

<body>
    <script>
        var i=Number("123456.999");
        window.alert(parseInt(i));
    </script>
</body>

<body>
    <script>
        var i=Number("123456qwe");
        window.alert(parseInt(i));
    </script>
</body>

运行结果都是:

image.png

Math.ceil函数

此函数作用与parseInt类似 与之不同的是,此函数是向上取整

特殊

js中10/3不是3 而是3.3333333

Boolean类型

boolean只有ture和false两个值

Boolean函数

此函数会将任意类型的数据转换为Boolean类型

image.png

Boolean在js中会被隐式调用

下面两种方式是等价的

        if(Boolean("asd")){
        }
        if("abc"){
        }

string类型

常用属性和方法

<body>
    <script type="text/javascript">
      console.log("abcdef".length);//6
      console.log("qwerty".charAt(3))//r
      console.log("qwe".concat("rty"))//qwerty
      console.log("a=b&b=c".indexOf("="))//1
      console.log("a=b&b=c".lastIndexOf("="))//5
      console.log("1-1-501".replace("-",","))//1,1-501(只能替换第一个)
      var arr = "1-1-501".split("-");//拆分字符串 //不需要使用var[]
      for(var i=0;i<arr.length;i++){
        console.log(arr[i]);
      }
      console.log("abcdefg".substr(2))//cdefg
      console.log("abcdefg".substring(2))//cdefg
      //在参数为两个时
      //substr为(start,len)
      //substring为(start,end)(不包括end)
      console.log("abcdefg".substr(2,3))//cde
      console.log("abcdefg".substring(2,3))//c
      console.log("Abc".toLowerCase())//abc
      console.log("Abc".toUpperCase())//ABC
    </script>
  </body>

Object

与java相同,可以把Ovject类型看成是所有类的基类

Object对象其中最重要的是它的prototype属性

它可以动态的给类扩展方法和属性

例如

    <script type="text/javascript">
      var obj = new Object();
      Object.prototype.mytest = function(){
        console.log("test success");
      }
      obj.mytest();
      Object.prototype.username="zhangsan";
      console.log(obj.username)
    </script>

上述代码结果为

image.png

<script type="text/javascript">
      /*js中定义类
      第一种方法:
        function 类名(形式参数列表){
          this.属性名 = 参数
          this.属性名 = 参数
          this.方法名 = function(){
          }
        }
      第二种方法:
        类名 = function(形式参数列表){
          this.属性名 = 参数
          this.属性名 = 参数
          this.方法名 = function(){
          }
        }*/
      //sayHello既是函数,也是类,取决于如何调用
      function sayHello(){
      }
      //这样调用是当作函数调用,不会在堆中new对象
      sayHello();
      //new 来调用 就是当作类来调用,会在浏览器的堆中开辟新对象
      var obj= new sayHello();
    </script>

示例(员工类):

      function Emp(empno,ename,sal){
        //属性
        this.empno=empno;
        this.ename=ename;
        this.sal = sal;
        //方法
        this.work=function(){
          console.log(ename+"working.....");
        }
      }
      //创建对象
      var v1=new Emp();
      v1.work();
      var v2=new Emp(1);
      v2.work();
      var v3=new Emp(1,"zhangsan");
      v3.work();
      var v4=new Emp(1,"zhangsan",900);
      v4.work();
      console.log("第一种方式"+v4.sal);
      //另一种引用方式
      console.log("第二种方式"+v4["sal"])
      //给emp动态添加方法
      Emp.prototype.getSal=function(){
        return this.sal;
      }
      console.log(v4.getSal());

运行结果:

image.png

= =和= = =

===相当于java里的equals,即比较数据是否相等,又比较数据类型是否一致
==则只比较值是否相等
var v1=true;
var v2=1;
console.log(v1==v2);//true
console.log(v1===v2);//flase

null NaN 和undefined区别

null == undefined 但数据类型不同

NaN与任何都不能等同

javaScript 事件

<!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>
load事件(在页面加载完毕之后触发)
<body onload="console.log('加载完毕')">
    焦点事件:<input type="text" onblur="console.log('失去焦点')" onfocus="console.log('获得焦点')">
    <br>
    单击事件:<input type="button" onclick="console.log('单击')" value="单击">
    <br>
    双击事件:<input type="button" ondblclick="console.log('双击')" value="双击">
    <br>
    按键事件:<input type="text" onkeydown="console.log('按键按下')" onkeyup="console.log('按键抬起')">
    <br>
    鼠标相关事件
    <div style="border: 1px solid black; width: 300px; height: 300px;"onmouseover="console.log('鼠标经过了')"
                                                                        onmousemove="console.log('鼠标在div内移动了')"
                                                                        onmouseout="console.log('鼠标离开了')"
                                                                        onmouseup="console.log('鼠标弹起了')"
                                                                        onmousedown="console.log('鼠标按下了')"
                                                                        ></div>
                                                                        <br>
    表单事件
    <form onsubmit="alert('表单提交了')" onreset="console.log('表单重置了')">
        <input type="submit" value="提交">
        <input type="reset"  value="重置">
    </form>
    <br>
    选中文本事件和修改事件
    <input type="text"  onselect="console.log('文本被选中了')" onchange="console.log('文本被修改')"></textarea>
    <br>
    <select onchange="console.log('选项被修改')"> 
        <option value="">请选择您的学历</option>
        <option value="bk">本科</option>
        <option value="zk">专科</option>
    </select>
</body>
</html>

ECMAScript DOM BOM

ECMAScript是javaScript的语法核心

DOM是组件如按钮,表格等,在js中 document是表示DOM组件

BOM是所有浏览器操作 如弹窗等 在js中使用window表示

事件注册

事件注册有两种方式

第一种就是直接在元素中通过onclick声明

第二种

<body>
    <input type="button" id="mybutton1" value="button1"/>
    <input type="button" id="mybutton2" value="button2"/>
    <script type="text/javascript">
        function t1(){
            console.log("1111");
            window.alert("t1被调用了");
        }
        var b1=document.getElementById("mybutton1");
        b1.onclick=t1;
        console.log(b1);
        var b2=document.getElementById("mybutton2");
        b2.onclick = function (){
            console.log("2222");
            window.alert("匿名函数被调用了")
        }
        console.log(b2);
    </script>
</body>

代码的执行顺序

在使用DOM获取元素时要注意脚本要写在元素声明之后

<body>
    <script type="text/javascript">
           var bt = document.getElementById("bt");
           bt.onclick = function(){
               alert("匿名函数");
           }
    </script>
    <input type="button" id="bt" value="BUTTON"/>
</body>

像上面这样的代码,因为先执行的脚本,导致bt对象为null,此时修改顺序即可解决问题

或者也可以将代码改为下面这种写法

<body onload="load()">
    <script type="text/javascript">
        function load (){
            var bt = document.getElementById("bt");
            bt.onclick = function(){
                alert("匿名函数");
            }
        }
    </script>
    <input type="button" id="bt" value="BUTTON"/>
</body>

或者

<body>
    <script type="text/javascript">
        window.onload=function(){
            var bt = document.getElementById("bt");
            bt.onclick = function(){
                alert("匿名函数");
            }
        }
    </script>
    <input type="button" id="bt" value="BUTTON"/>
</body>

键盘监听

上面提到了一系列键盘监听事件,我们可以通过以下代码获取得到的按键

  <body>
    <input type="text" id="username"/>
    <script type="text/javascript">
      function DL (a){
        if(a.keyCode==13){
          console.log("点击了enter");
        }
      }
      window.onload=function(){
        var username = document.getElementById("username");
        username.onkeypress=DL;
      }
    </script>
  </body>

  <body>
    <input type="text" id="username"/>
    <script type="text/javascript">
      window.onload=function(){
        var username = document.getElementById("username");
        username.onkeypress=function(a){
          if(a.keyCode==13){
            console.log("点击了enter")
          }
        }
      }
    </script>
  </body>

练习 移动方块

  <body id="body">
    <div id="person" style="width: 10px; height: 10px; position: absolute; left: 50px; top: 50px; background-color: #2F2D2E;"></div>
    <script type="text/javascript">
      window.onload=function(){
        person = document.getElementById("person");
        body = document.getElementById("body");
        speed = 1.0;
        last_key='q';
        window.onkeydown=function(data){
          var y=parseInt(person.style.top);
          var x=parseInt(person.style.left);
          if (last_key==data.key){
            speed=speed+0.5;
          }
          else {
            speed=1;
          }
          last_key = data.key;
          if(data.key=='w'&&y>30){
            y=y-speed;
            person.style.top=y+'px';
          }
          if(data.key=='s'&&y<window.innerHeight-30){
            y=y+speed;
            person.style.top=y+'px';
          }
          if(data.key=='a'&&x>30){
            x=x-speed;
            person.style.left=x+'px';
          }
          if(data.key=='d'&&x<window.innerWidth-30){
            x=x+speed;
            person.style.left=x+'px';
          }
        }
      }
    </script>
  </body>

void运算符

void运算符的用法是 void(表达式)

那么表达式返回的将返回空值

假如我们想有一个超链接样式的文本,单击后执行js代码,并且在执行完js代码后不跳转页面。

我们就可以这样写

<body>
    <br><br><br><br><br><br><br><br><br><br><br><br><br><br><br>
    <br><br><br><br><br><br><br><br><br><br><br><br><br><br><br>
    <br><br><br><br><br><br><br><br><br><br><br><br><br><br><br>
    <br><br><br><br><br><br><br><br><br><br><br><br><br><br><br>
    <br><br><br><br><br><br><br><br><br><br><br><br><br><br><br>
    <a href="javascript:void(0)" onclick="alert('link')" >
        dlaks;lkalskdl;akdl;ak;l
    </a>    
</body>

如果写成href=""那么单击相当于访问当前页 ,不符合要求

array 数组

<body>
    <script type="text/javascript">
        var a=[];
        a.push(5);
        a.push(6);
        a.push(7);
        console.log(a.length);// 3
        console.log("pop"+a.pop());//pop7
        console.log(a.length);//2
        /****push和pop符合栈的特点*****/
        var b = new Array(2001,1,1);
        var str = b.join("_");
        console.log(str); //2001_1_1
        var c=[9,8,7,true,false];
        c.reverse();
        for(var i in c){
            console.log(c[i]); //false true 7 8 9
        }
    </script>
</body>

date对象

<!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>
    <script type="text/javascript">
        var time=new Date();
        console.log(time);//Sun Dec 05 2021 14:57:56 GMT+0800 (中国标准时间)
        year = time.getFullYear();
        month = time.getMonth();
        //day = time.getDay(); 这样获取到的是星期几
        day = time.getDate();
        console.log(year+"年"+month+"月"+day+"日");//2021年11月5日
        var strDate = time.toLocaleDateString();
        var strtime = time.toLocaleTimeString();
        var strDateTime = time.toLocaleString();
        console.log(strDate); //2021/12/5
        console.log(strtime); //下午3:05:30
        console.log(strDateTime); //2021/12/5 下午3:05:30
        //获取1970-1-1 0:0:0到现在的总毫秒数
        var now = new Date();
        var timeMilis = now.getTime();//1638688162376
        console.log(timeMilis);
    </script>
</body>
</html>

   


相关文章
|
28天前
|
JavaScript 前端开发 程序员
前端原生Js批量修改页面元素属性的2个方法
原生 Js 的 getElementsByClassName 和 querySelectorAll 都能获取批量的页面元素,但是它们之间有些细微的差别,稍不注意,就很容易弄错!
|
25天前
|
JavaScript 前端开发 Java
springboot解决js前端跨域问题,javascript跨域问题解决
本文介绍了如何在Spring Boot项目中编写Filter过滤器以处理跨域问题,并通过一个示例展示了使用JavaScript进行跨域请求的方法。首先,在Spring Boot应用中添加一个实现了`Filter`接口的类,设置响应头允许所有来源的跨域请求。接着,通过一个简单的HTML页面和jQuery发送AJAX请求到指定URL,验证跨域请求是否成功。文中还提供了请求成功的响应数据样例及请求效果截图。
springboot解决js前端跨域问题,javascript跨域问题解决
|
27天前
|
缓存 JavaScript 前端开发
JavaScript 与 DOM 交互的基础及进阶技巧,涵盖 DOM 获取、修改、创建、删除元素的方法,事件处理,性能优化及与其他前端技术的结合,助你构建动态交互的网页应用
本文深入讲解了 JavaScript 与 DOM 交互的基础及进阶技巧,涵盖 DOM 获取、修改、创建、删除元素的方法,事件处理,性能优化及与其他前端技术的结合,助你构建动态交互的网页应用。
40 5
|
26天前
|
缓存 前端开发 JavaScript
JavaScript前端路由的实现原理及其在单页应用中的重要性,涵盖前端路由概念、基本原理、常见实现方式
本文深入解析了JavaScript前端路由的实现原理及其在单页应用中的重要性,涵盖前端路由概念、基本原理、常见实现方式(Hash路由和History路由)、优点及挑战,并通过实际案例分析,帮助开发者更好地理解和应用这一关键技术,提升用户体验。
63 1
|
1月前
|
JSON 前端开发 JavaScript
聊聊 Go 语言中的 JSON 序列化与 js 前端交互类型失真问题
在Web开发中,后端与前端的数据交换常使用JSON格式,但JavaScript的数字类型仅能安全处理-2^53到2^53间的整数,超出此范围会导致精度丢失。本文通过Go语言的`encoding/json`包,介绍如何通过将大整数以字符串形式序列化和反序列化,有效解决这一问题,确保前后端数据交换的准确性。
35 4
|
2月前
|
存储 人工智能 前端开发
前端大模型应用笔记(三):Vue3+Antdv+transformers+本地模型实现浏览器端侧增强搜索
本文介绍了一个纯前端实现的增强列表搜索应用,通过使用Transformer模型,实现了更智能的搜索功能,如使用“番茄”可以搜索到“西红柿”。项目基于Vue3和Ant Design Vue,使用了Xenova的bge-base-zh-v1.5模型。文章详细介绍了从环境搭建、数据准备到具体实现的全过程,并展示了实际效果和待改进点。
178 2
|
2月前
|
JavaScript 前端开发 程序员
前端学习笔记——node.js
前端学习笔记——node.js
48 0
|
2月前
|
人工智能 自然语言处理 运维
前端大模型应用笔记(一):两个指令反过来说大模型就理解不了啦?或许该让第三者插足啦 -通过引入中间LLM预处理用户输入以提高多任务处理能力
本文探讨了在多任务处理场景下,自然语言指令解析的困境及解决方案。通过增加一个LLM解析层,将复杂的指令拆解为多个明确的步骤,明确操作类型与对象识别,处理任务依赖关系,并将自然语言转化为具体的工具命令,从而提高指令解析的准确性和执行效率。
|
2月前
|
存储 弹性计算 算法
前端大模型应用笔记(四):如何在资源受限例如1核和1G内存的端侧或ECS上运行一个合适的向量存储库及如何优化
本文探讨了在资源受限的嵌入式设备(如1核处理器和1GB内存)上实现高效向量存储和检索的方法,旨在支持端侧大模型应用。文章分析了Annoy、HNSWLib、NMSLib、FLANN、VP-Trees和Lshbox等向量存储库的特点与适用场景,推荐Annoy作为多数情况下的首选方案,并提出了数据预处理、索引优化、查询优化等策略以提升性能。通过这些方法,即使在资源受限的环境中也能实现高效的向量检索。
|
2月前
|
机器学习/深度学习 弹性计算 自然语言处理
前端大模型应用笔记(二):最新llama3.2小参数版本1B的古董机测试 - 支持128K上下文,表现优异,和移动端更配
llama3.1支持128K上下文,6万字+输入,适用于多种场景。模型能力超出预期,但处理中文时需加中英翻译。测试显示,其英文支持较好,中文则需改进。llama3.2 1B参数量小,适合移动端和资源受限环境,可在阿里云2vCPU和4G ECS上运行。
124 1
下一篇
DataWorks