JavaScript学习

JavaScript 是一门跨平台、面向对象的脚本语言,而Java语言也是跨平台的、面向对象的语言,只不过Java是编译语言,是需要编译成字节码文件才能运行的;JavaScript是脚本语言,不需要编译,由浏览器直接解析并执行。 JavaScript 是用来控制网页行为的,它能使网页可交互。

JavaScript(简称:JS)在1995年由Brendan Eich 发明,并于1997年成为一部ECMA 标准。

ECMAScript 6(ES6)是最新的JavaScript 版本(发布于2015年)。

JavaScript引入方式

JavaScript 引入方式就是 HTML 和 JavaScript 的结合方式。JavaScript引入方式有两种:

  • 内部脚本:将 JS代码定义在HTML页面中
  • 外部脚本:将 JS代码定义在外部 JS文件中,然后引入到 HTML页面中

内部脚本

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>

    <!--内部脚本-->
    <script>
        alert("Hello JavaScript!")
    </script>

</body>
</html>

一般把脚本置于 元素的底部,可改善显示速度 。

因为浏览器在加载页面的时候会从上往下进行加载并解析。 我们应该让用户看到页面内容,然后再展示动态的效果。

外部脚本

首先定义外部 js 文件。

demo.js:

alert("Hello JavaScript!!");

然后在页面中引入外部的js文件

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>

    <!--内部脚本-->
    <!--<script>
        alert("Hello JavaScript!")
    </script>-->

    <!--外部脚本-->
    <script src="../js/demo.js"></script>

</body>
</html>

注意

  • 外部脚本不能包含 <script> 标签

    在js文件中直接写 js 代码即可,不要在 js文件 中写 script 标签

  • <script> 标签不能自闭合

    在页面中引入外部js文件时,不能写成 <script src=“…/js/demo.js” />。

JavaScript基础语法

书写语法

  • 区分大小写:与 Java 一样,变量名、函数名以及其他一切东西都是区分大小写的

  • 每行结尾的分号可有可无

    如果一行上写多个语句时,必须加分号用来区分多个语句。

  • 注释

    单行注释:// 注释内容

    多行注释:/* 注释内容 */

    注意:JavaScript 没有文档注释

  • 大括号表示代码块

    和 java 一样 大括号表示代码块。

输出语句

  • 使用window.alert() 写入警告框

    window.可以省略

  • 使用document.write() 写入HTML输出

  • 使用console.log() 写入浏览器控制台

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>

<script>

    window.alert("Hello JS!");

    document.write("Hello JS!!");

    console.log("Hello JS!!!");

</script>

</body>
</html>

在谷歌浏览器右键选择检查,再点击Console可打开浏览器控制台。

变量

JavaScript 中用 var 关键字(variable 的缩写)来声明变量。

格式 var 变量名 = 数据值;

JavaScript 是一门弱类型语言,变量可以存放不同类型的值;

如在定义变量时赋值为数字数据,还可以将变量的值改为字符串类型的数据。

js 中的变量名命名也有如下规则,和java语言基本都相同

  • 组成字符可以是任何字母、数字、下划线(_)或美元符号($)
  • 数字不能开头
  • 建议使用驼峰命名

JavaScript 中 var 关键字有点特殊,有以下地方和其他语言不一样 。

  • 作用域:全局变量,在代码块中定义的变量,在代码块外边还可以使用。

        {
            str = "Hello JS!";
        }
    
        window.alert(str);
    
  • 变量可以重复定义,JavaScript 会用后面赋的值将之前变量的 值替换掉。

        {
            str = "Hello JS!";
            str = "Hello";
        }
    
        window.alert(str);   //打印的结果是Hello
    

ECMAScript 6 新增了 let 关键字来定义变量。它的用法类似于 var ,但是所声明的变量,只在 let 关键字所在的代码块内有效且不允许重复声明

ECMAScript 6 新增了 const关键字,用来声明一个只读的常量。一旦声明,常量的值就不能改变

    const s = "Hello";
    // s = "hello";

数据类型

JavaScript 中提供了两类数据类型:原始类型 和 引用类型。

5种原始类型:

  • number:数字(整数、小数、 NaN(Not a Number))
  • string:字符、字符串,单双引皆可
  • boolean:布尔。true,false
  • null:对象为空
  • undefined:当声明的变量未初始化时,该变量的默认值是undefined

使用 typeof 运算符可以获取数据类型。

    window.alert(typeof(str));

运算符

JavaScript 提供了如下的运算符。大部分和 Java语言都是一样的,不同的是 JS 关系运算符中的 =====

  • 一元运算符:++,–
  • 算术运算符:+,-,*,/,%
  • 赋值运算符:=,+=,-=…
  • 关系运算符:>,<,>=,<=,!=,=====
  • 逻辑运算符:&&,||,!
  • 三元运算符:条件表达式 ? true_value : false_value
=====区别

==:

  1. 判断类型是否一样,如果不一样,则进行类型转换
  2. 再去比较其值

===:js 中的全等于

  1. 判断类型是否一样,如果不一样,直接返回false
  2. 再去比较其值
    var num1="20";
    var num2=20;

    alert(num1 == num2);  //true
    alert(num1 === num2);  //false
类型转换

其他类型转为number

  • string 转换为 number 类型:按照字符串的字面值,转为数字。如果字面值不是数字,则转为NaN

    将 string 转换为 number 有两种方式:

    • 使用 + 正好运算符

          var num1=+"20";
      
          alert(num1+1);  // 21
      
    • 使用parseInt()函数(方法)

          var num1="20";
      
          alert(parseInt(num1)+1);  // 21
      

    建议使用 parseInt() 函数进行转换。

  • boolean 转换为 number 类型:true 转为1,false转为0

其他类型转为boolean

  • number 类型转换为 boolean 类型:0和NaN转为false,其他的数字转为true
  • string 类型转换为 boolean 类型:空字符串转为false,其他的字符串转为true
  • null类型转换为 boolean 类型是 false
  • undefined 转换为 boolean 类型是 false

流程控制语句

JavaScript 中提供了和 Java 一样的流程控制语句,如下

  • if
  • switch
  • for
  • while
  • do … while
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>

<script>

    var j = 1;
    if (j == 0) {
        alert("j == 0");
    } else {
        alert("j != 0");
    }

    for (let i = 0;i < 5;i++) {
        switch (i) {
            case 0:
                alert("swotch:i == 0");
                break;
            case 1:
                alert("switch:i == 1");
                break;
            default:
                alert("switch:i != 0 && i != 1");
                break;
        }
    }

    while (j < 5) {
        j++;
        alert("j="+j);
    }

    do {
        j--;
        alert("j = "+j);
    } while (j > 0);

</script>

</body>
</html>

函数

函数(就是Java中的方法)是被设计为执行特定任务的代码块;JavaScript 函数通过 function 关键词进行定义。

函数定义格式有两种:

  • 方式一

    function 函数名(参数1,参数2..){
    	要执行的代码
    }
    
  • 方式二

    var 函数名 = function (参数列表){
    	要执行的代码
    }
    

形式参数不需要类型。因为JavaScript是弱类型语言

function add(a, b){
	return a + b;
}

上述函数的参数 a 和 b 不需要定义数据类型,因为在每个参数前加上 var 也没有任何意义。

返回值也不需要定义类型,可以在函数内部直接使用return返回即可。

<script>

    function add(a,b) {
        return a+b;
    }

    var add2 = function (a,b) {
        return a+b;
    }

    let res = add(11,12);
    let res2 = add2(10,10);

    alert(res+" "+res2);

</script>

注意:

JS中,函数调用可以传递任意个数参数

例如 let result = add(1,2,3);

它是将数据 1 传递给了变量a,将数据 2 传递给了变量 b,而数据 3 没有变量接收.

JavaScript常用对象

基本对象

Array对象

JavaScript Array对象用于定义数组 。

定义格式
  • 方式一

    var 变量名 = new Array(元素列表);
    
  • 方式二

    var 变量名 = [元素列表];
    
元素访问
arr[索引] = 值;
<script>

    //方式一
    var arr1 = new Array(1,2,3,4,5);

    //方式二
    var arr2 = [5,4,3,2,1];

    alert(arr1[0]+" "+arr2[4]);  //1 1

</script>
特点

JavaScript 中的数组相当于 Java 中集合。数组的长度是可以变化的,而 JavaScript 是弱类型,所以可以存储任意的类型的数据。

   var arr3 = [1,2,3];
   arr3[10] = 10;
   alert(arr3[10]); // 10
   alert(arr3[9]); //undefined

   arr3[5] = "hello";
   alert(arr3[5]); // hello

   for (let i = 0;i < 11;i++) {
       alert(arr3[i]);
   }
属性

我们只讲解 length 属性,该数组可以动态的获取数组的长度。

    var arr = [1,2,3];
    for (let i = 0; i < arr.length; i++) {
        alert(arr[i]);
    }
方法

push函数:给数组添加元素,也就是在数组的末尾添加元素

<script>

    var arr = [1,2,3];
    arr.push(4);
    alert(arr);  //1,2,3,4

</script>

splice函数:删除元素

参数1:索引,表示从哪个索引位置删除

参数2:个数,表示删除几个元素

<script>

    var arr = [1,2,3,4,5,6];
    arr.splice(2,3);
    alert(arr);  //1,2,6

</script>
String对象
定义格式
  • 方式一

    var 变量名 = new String(s);
    
  • 方式二

    var 变量名 = "数组";
    
<script>

    var str1 = new String("Hello");
    var str2 = "World";

    alert(str1+" "+str2);  // Hello World

</script>
属性

String对象提供了很多属性,下面列举了一个属性 length ,该属性是用于动态的获取字符串的长度 。

  • length:字符串的长度
函数

String对象提供了很多函数(方法),下面给大家列举了两个方法

  • charAt() : 返回在指定位置的字符
  • indexOf() : 检索字符串

String对象还有一个函数 trim() ,该方法在文档中没有体现,但是所有的浏览器都支持;它是用来去掉字符串两端的空格。

<script>

    var str = "  Hello World!  ";
    
    var ch1 = str.charAt(2);
    var ch2 = str.indexOf("W");
    var str2 = str.trim();

    alert(ch1+" "+ch2+" "+str2);  // H 8 Hello WOrld!

</script>

自定义对象

下面是自定义对象的格式:

var 对象名称 = {
    属性名称1:属性值1,
    属性名称2:属性值2,
    ...,
    函数名称:function (形参列表){},
    ...
};

调用属性的格式:

对象名.属性名

调用函数的格式:

对象名.函数名()

代码演示 :

<script>

    var person = {
        name : "XiaoMing",
        age : 18,
        work : function () {
            alert("XiaoMing is Working!");
        }
    };

    alert(person.name);  // XiaoMing
    alert(person.age);  // 18
    person.work();  // XiaoMing is Working!

</script>

BOM

BOM:Browser Object Model 浏览器对象模型。也就是 JavaScript 将浏览器的各个组成部分封装为对象。

BOM 中包含了如下对象:

  • Window:浏览器窗口对象
  • Navigator:浏览器对象
  • Screen:屏幕对象
  • History:历史记录对象
  • Location:地址栏对象

在这里插入图片描述

Window对象

window 对象是 JavaScript 对浏览器的窗口进行封装的对象。

获取window对象

该对象不需要创建直接使用 window ,其中 window. 可以省略。比如我们之前使用的 alert() 函数,其实就是 window 对象的函数。

  • 显示使用Window对象调用

    window.alert("xxx");
    
  • 隐式调用

    alert("xxx");
    
window对象属性

window 对象提供了用于获取其他 BOM 组成对象的属性

属性描述
history对History 对象的只读引用。
location用于窗口或框架的Location对象。
Navigator对Navigator对象的只读引用。
Screen对Screen 对象的只读引用。

也就是说,我们想使用 Location 对象的话,就可以使用 window 对象获取;写成 window.location ,而 window. 可以 省略,简化写成 location 来获取 Location 对象。

window对象函数

window 对象提供了很多函数供我们使用,而很多都不常用;下面列举了一些比较常用的函数 。

函数描述
alert()显示带有一段消息和一个确认按钮的警告框。
confirm()显示带有一段消息以及确认按钮和取消按钮的对话框。
setInterval()按照指定的周期(以毫秒计算)来调用函数或计算表达式。
setTimeout()在指定的毫秒数后调用函数或计算表达式。
<script>

    var flag = confirm("Are You OK?");
    //当点击 确定 按钮, flag 变量值记录的就是 true,否则为 false
    alert(flag);

    setTimeout(function () {
        alert("Hello");
    },3000);  // 3秒后弹出

    setInterval(function () {
        alert("Hello2");
    },3000);  // 每隔3秒弹出

</script>

History对象

History 对象是 JavaScript 对历史记录进行封装的对象。

History 对象的获取
  • 使用 window.history获取,其中window. 可以省略
History 对象的函数
函数描述
back()加载history列表中的前一个URL
forword()加载history列表中的下一个URL

Location对象

Location 对象是 JavaScript 对地址栏封装的对象。可以通过操作该对象,跳转到任意页面。

获取Location对象

使用 window.location获取,其中window. 可以省略

Location对象属性

location对象最常用的一个属性是 href

  • href :设置或返回完整的URL
<script>

    alert(location.href);
    alert("跳转到百度");
    location.href = "https://www.baidu.com";

</script>

DOM

DOM:Document Object Model 文档对象模型。也就是 JavaScript 将 HTML 文档的各个组成部分封装为对象。

封装的对象分为

  • Document:整个文档对象
  • Element:元素对象
  • Attribute:属性对象
  • Text:文本对象
  • Comment:注释对象

JavaScript 通过 DOM, 就能够对 HTML进行操作了

  • 改变 HTML 元素的内容
  • 改变 HTML 元素的样式(CSS)
  • 对 HTML DOM 事件作出反应
  • 添加和删除 HTML 元素

获取 Element对象

HTML 中的 Element 对象可以通过 Document 对象获取,而 Document 对象是通过 window 对象获取。

Document 对象中提供了以下获取 Element 元素对象的函数

  • getElementById() :根据id属性值获取,返回单个Element对象
  • getElementsByTagName() :根据标签名称获取,返回Element对象数组
  • getElementsByName() :根据name属性值获取,返回Element对象数组
  • getElementsByClassName() :根据class属性值获取,返回Element对象数组
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<img id="image" src="a.jpg"> <br>

<div class="cls">Hello World 1</div>
<br>
<div class="cls">Hello World 2</div>
<br>

<input type="checkbox" name="hobby"> 电影
<input type="checkbox" name="hobby"> 旅游
<input type="checkbox" name="hobby"> 游戏
<br>
<script>
    // 根据 id 属性值获取上面的 img 元素对象,返回单个对象
    var img = document.getElementById("image");
    alert(img);

    // 根据标签名称获取所有的 div 元素对象
    var divs = document.getElementsByTagName("div");  // 返回一个数组,数组中存储的是 div 元素对象
    alert(divs.length);  // 2
    // 遍历数组
    for (let i = 0; i < divs.length; i++) {
        alert(divs[i]);
    }

    // 获取所有的满足 name = 'hobby' 条件的元素对象
    var hobbys = document.getElementsByName("hobby");
    for (let i = 0; i < hobbys.length; i++) {
        alert(hobbys[i]);
    }
    
    //  获取所有的满足 class='cls' 条件的元素对象
    var clss = document.getElementsByClassName("cls");
    for (let i = 0; i < clss.length; i++) {
        alert(clss[i]);
    }

</script>
</body>
</html>

HTML Element对象使用

HTML 中的 Element 元素对象有很多,以后可以根据具体的需求查阅文档使用。

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<img id="light" src="off.gif"> <br>

<div class="cls">Hello World 1</div>
<br>
<div class="cls">Hello World 2</div>
<br>

<input type="checkbox" name="hobby"> 电影
<input type="checkbox" name="hobby"> 旅游
<input type="checkbox" name="hobby"> 游戏
<br>
<script>

    // 点亮
    //1,根据 id='light' 获取 img 元素对象
    var img = document.getElementById("light");
    //2,修改 img 对象的 src 属性来改变图片
    img.src = "on.gif";

    // 将所有的 div 标签的标签体内容替换为 Hello
    var divs = document.getElementsByTagName("div");
    /*
        style:设置元素css样式
        innerHTML:设置元素内容
    */
    for (let i = 0;i < divs.length;i++) {
        divs[i].innerHTML = "Hello";
        divs[i].style.color = 'red';
    }

    // 使所有的复选框呈现被选中的状态
    //1,获取所有的 复选框 元素对象
    var hobbys = document.getElementsByName("hobby");
    //2,遍历数组,通过将 复选框 元素对象的 checked 属性值设置为 true 来改变复选框的选中状态
    for (let i = 0; i < hobbys.length; i++) {
        hobbys[i].checked = true;
    }

</script>
</body>
</html>

事件监听

HTML 事件是发生在 HTML 元素上的“事情”。比如:页面上的 按钮被点击 、 鼠标移动到元素之上 、 按下键盘按键 等都是事件。

事件监听是JavaScript 可以在事件被侦测到时执行一段逻辑代码。

事件绑定

JavaScript 提供了两种事件绑定方式:

  • 方式一:通过 HTML标签中的事件属性进行绑定
  • 方式二:通过 DOM 元素属性绑定
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>

    <img id="light" src="off.gif"> <br>
    <!--方式1:在下面input标签上添加 onclick 属性,并绑定 on() 函数-->
    <input type="button" value="开关" onclick="on()"> <br>
    <input type="button" value="开关" id="btn">

    <script>
        var flag = 1;
        function on() {
            var light = document.getElementById("light");
            alert("第一种");
            if (flag === 1) {
                light.src = "on.gif";
                flag = 0;
            } else {
                light.src = "off.gif";
                flag = 1;
            }
        }

        //方式2:获取 id="btn" 元素对象,通过调用 onclick 属性 绑定点击事件
        document.getElementById("btn").onclick = function () {
            var light = document.getElementById("light");
            alert("第二种");
            if (flag === 1) {
                light.src = "on.gif";
                flag = 0;
            } else {
                light.src = "off.gif";
                flag = 1;
            }
        }
    </script>
</body>
</html>

常见事件

事件属性名说明
onclick鼠标单击事件
onblur元素失去焦点
onfocus元素获得焦点
onload某个页面或图像被完成加载
onsubmit当表单提交时触发该事件
onmouseover鼠标被移到某元素之上
onmouseout鼠标从某元素移开
<!DOCTYPE html>
<html lang="en">
<head>
   <meta charset="UTF-8">
   <title>Title</title>
</head>
<body>

   <img id="light" src="off.gif" onclick="on()" onmouseover="oo()" onmouseout="ot()"> <br>
   <input id = "input" onblur="ob()" onfocus="of()"> <br>

   <script>
       var flag = 1;
       var light = document.getElementById("light");
       var input = document.getElementById("input");

       function on() {  // 鼠标单击事件
           if (flag === 1) {
               light.src = "on.gif";
               flag = 0;
           } else {
               light.src = "off.gif";
               flag = 1;
           }
       }

       function ob() {
           alert("onblur");  // 失去焦点
       }

       function of() {
           input.style.background = 'red';  // 获得焦点,背景变为红色
       }

       function oo() {  // 鼠标被移到某元素之上
           light.src = "on.gif";
           flag = 0;
       }

       function ot() {  // 鼠标从某元素移开
           light.src = "off.gif";
           flag = 1;
       }
   </script>
</body>
</html>

RegExp对象

RegExp 是正则对象。正则对象是判断指定字符串是否符合规则。

正则对象使用

创建对象

正则对象有两种创建方式:

  • 直接量方式:注意不要加引号

    var reg = /正则表达式/;
    
  • 创建 RegExp 对象

    var reg = new RegExp("正则表达式");
    
函数

test(str) :判断指定字符串是否符合规则,返回 true或 false

正则表达式

正则表达式常用的规则如下:

  • ^:表示开始
  • $:表示结束
  • [ ]:代表某个范围内的单个字符,比如: [0-9] 单个数字字符
  • .:代表任意单个字符,除了换行和行结束符
  • \w:代表单词字符:字母、数字、下划线(),相当于 [A-Za-z0-9]
  • \d:代表数字字符: 相当于 [0-9]

量词:

  • +:至少一个
  • *:零个或多个
  • ?:零个或一个
  • {x}:x个
  • {m,}:至少m个
  • {m,n}:至少m个,最多n个
    <script>
        //1,创建正则对象,对正则表达式进行封装
        var reg = /^\w{6,12}$/;
        //var reg = new RegExp("^\\w{6,12}$");

        var str = "abcdefg";

        //2,判断 str 字符串是否符合 reg 封装的正则表达式的规则
        var flag = reg.test(str);
        alert(flag);

    </script>
  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值