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>

   


相关文章
|
25天前
|
JavaScript 前端开发 Java
springboot解决js前端跨域问题,javascript跨域问题解决
本文介绍了如何在Spring Boot项目中编写Filter过滤器以处理跨域问题,并通过一个示例展示了使用JavaScript进行跨域请求的方法。首先,在Spring Boot应用中添加一个实现了`Filter`接口的类,设置响应头允许所有来源的跨域请求。接着,通过一个简单的HTML页面和jQuery发送AJAX请求到指定URL,验证跨域请求是否成功。文中还提供了请求成功的响应数据样例及请求效果截图。
springboot解决js前端跨域问题,javascript跨域问题解决
|
28天前
|
缓存 JavaScript 前端开发
JavaScript 与 DOM 交互的基础及进阶技巧,涵盖 DOM 获取、修改、创建、删除元素的方法,事件处理,性能优化及与其他前端技术的结合,助你构建动态交互的网页应用
本文深入讲解了 JavaScript 与 DOM 交互的基础及进阶技巧,涵盖 DOM 获取、修改、创建、删除元素的方法,事件处理,性能优化及与其他前端技术的结合,助你构建动态交互的网页应用。
41 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
|
1月前
|
资源调度 前端开发 JavaScript
vite3+vue3 实现前端部署加密混淆 javascript-obfuscator
【11月更文挑战第10天】本文介绍了在 Vite 3 + Vue 3 项目中使用 `javascript-obfuscator` 实现前端代码加密混淆的详细步骤,包括安装依赖、创建混淆脚本、修改 `package.json` 脚本命令、构建项目并执行混淆,以及在 HTML 文件中引用混淆后的文件。通过这些步骤,可以有效提高代码的安全性。
|
1月前
|
设计模式 前端开发 JavaScript
揭秘!前端大牛们如何巧妙利用JavaScript,打造智能交互体验!
【10月更文挑战第30天】前端开发领域充满了无限可能与创意,JavaScript作为核心语言,凭借强大的功能和灵活性,成为打造智能交互体验的重要工具。本文介绍前端大牛如何利用JavaScript实现平滑滚动、复杂动画、实时数据更新和智能表单验证等效果,展示了JavaScript的多样性和强大能力。
51 4
|
1月前
|
自然语言处理 JavaScript 前端开发
[JS]同事看了我做的this笔记,直摇头,坦言:我还是参考启发博文吧
本文介绍了JavaScript中`this`关键字的重要性和使用规则。作者回顾了早期笔记,总结了`this`指向的各种情况,并分享了最新的理解。文章强调了`this`在不同上下文中的指向,包括对象方法、全局函数、箭头函数等,并提供了改变`this`指向的方法。适合JavaScript开发者参考。
48 2
|
2月前
|
JavaScript 前端开发
JavaScript 函数语法
JavaScript 函数是使用 `function` 关键词定义的代码块,可在调用时执行特定任务。函数可以无参或带参,参数用于传递值并在函数内部使用。函数调用可在事件触发时进行,如用户点击按钮。JavaScript 对大小写敏感,函数名和关键词必须严格匹配。示例中展示了如何通过不同参数调用函数以生成不同的输出。
|
1月前
|
前端开发 JavaScript 安全
vite3+vue3 实现前端部署加密混淆 javascript-obfuscator
【11月更文挑战第7天】本文介绍了在 Vite 3 + Vue 3 项目中使用 `javascript-obfuscator` 实现前端代码加密混淆的详细步骤。包括项目准备、安装 `javascript-obfuscator`、配置 Vite 构建以应用混淆,以及最终构建项目进行混淆。通过这些步骤,可以有效提升前端代码的安全性,防止被他人轻易分析和盗用。
159 0
|
2月前
|
JavaScript 前端开发 应用服务中间件
vue前端开发中,通过vue.config.js配置和nginx配置,实现多个入口文件的实现方法
vue前端开发中,通过vue.config.js配置和nginx配置,实现多个入口文件的实现方法
183 0
下一篇
DataWorks