JavaScript 教程

JavaScript 简介 | 菜鸟教程

JavaScript 是互联网上最流行的脚本语言,这门语言可用于 HTML 和 web,更可广泛用于服务器、PC、笔记本电脑、平板电脑和智能手机等设备

JavaScript 用法:

HTML 中的 Javascript 脚本代码必须位于 <script> 与 </script> 标签之间。

Javascript 脚本代码可被放置在 HTML 页面的 <body> 和 <head> 部分中 

引用:

   页面内嵌<script>  </script>

    外部引入<script src="location">  </script>

基本语法:

 变量声明 var 

 命名规则.必须以(英文字母_$)开头,包括(英文字母_$数字)不可以使用系统关键字保留字

JavaScript 数据类型:

基本类型:字符串(String)、数字(Number)、布尔(Boolean)、空(Null)、未定义(Undefined)、Symbol。

引用数据类型(对象类型):对象(Object)、数组(Array)、函数(Function),还有两个特殊的对象:正则(RegExp)和日期(Date)

常见的HTML事件:

事件描述
onchangeHTML 元素改变
onclick用户点击 HTML 元素
onmouseover鼠标指针移动到指定的元素上时发生
onmouseout用户从一个 HTML 元素上移开鼠标时发生
onkeydown用户按下键盘按键
onload浏览器已完成页面的加载

JavaScript 显示数据:

JavaScript 可以通过不同的方式来输出数据:

  • 使用 window.alert() 弹出警告框。
  • 使用 document.write() 方法将内容显示到 HTML 文档中。
  • 使用 innerHTML 写入到 HTML 元素。
  • 使用 console.log() 写入到浏览器的控制台。

JavaScript:直接写入 HTML 输出流:

<script>
  document.write("<h1>这是一个标题</h1>");
</script>

JavaScript:对事件的反应:

 <button type="button" onclick="alert('欢迎!')">点我</button>

JavaScript 函数: 

//语法
function functionname()
{
    
}
//调用带参数的函数
<p>点击这个按钮,来调用带参数的函数。</p>
<button onclick="csFunction('Harry Potter','Wizard')">点击这里</button>
<script>
    function csFunction(name, job) {
      alert("Welcome " + name + ", the " + job);
    }
</script>
//带有返回值的函数,通过使用 return 语句就可以实现。
//在使用 return 语句时,函数会停止执行,并返回指定的值。
 <script>
        function fhFunction() {
            var x = 5;
            return x;
        }
        var myVar = fhFunction();
        console.log(myVar, "myVar"); //5
 </script>
 <button onclick="fhFunction()">带有返回值的函数</button>
//计算两个数字的乘积,并返回结果
<script>
        function myFunction(a, b) {
            return a * b;
        }
        console.log(myFunction(4, 3));//12
</script>

JavaScript:改变 HTML 内容:

 <script>
        function btn() {
            document.getElementById("dome").innerHTML = "我是改变之后的内容"
        }
 </script>
<h5 id="dome">我是原内容</h5>
<button type="button" onclick="btn()">改变 HTML 内容</button>

JavaScript:改变 HTML 图像:

 function changeImage() {
            imgs = document.getElementById("myimage")
            if (imgs.src.match("216286277")) {//match() 方法可在字符串内检索指定的值
                imgs.src =
"https://img1.baidu.com/it/u=1571271284,1009852393&fm=253&app=138&size=w931&n=0&f=JPEG&fmt=auto?sec=1676739600&t=933cc411cb534b9134ceb27d9a473b4d"
            } else {
                imgs.src =
"https://img0.baidu.com/it/u=216286277,1414740285&fm=253&app=138&size=w931&n=0&f=JPEG&fmt=auto?sec=1676739600&t=330574da6fc428ca0fe50000b7f4187a"
                   
            }
        }
<img decoding="async" loading="lazy" id="myimage" onclick="changeImage()"
src="https://img1.baidu.com/it/u=1571271284,1009852393&fm=253&app=138&size=w931&n=0&f=JPEG&fmt=auto?sec=1676739600&t=933cc411cb534b9134ceb27d9a473b4d"
width="100" height="180">

JavaScript:改变 HTML 样式

<body>
        <p id="demo">
            JavaScript 能改变 HTML 元素的样式。
        </p>
        <script>
            function myFunction() {
                x = document.getElementById("demo")
                x.style.color = "#ff0000";
            }
        </script>
        <button type="button" onclick="myFunction()">点击这里</button>
  </body>

JavaScript:验证输入

<input id="tydemo" type="text">
    <script>
        function myyanzheng() {
            var x = document.getElementById("tydemo").value;
            if (x == "" || isNaN(x)) {//isNaN() 函数用于检查其参数是否是非数字值
                alert("不是数字");
            }
        }
    </script>
<button type="button" onclick="myyanzheng()">验证输入</button>

JavaScript:获取一个实时的时间:Date()

 <button onclick="displayDate()">点这里</button>
    <script>
        function displayDate() {
            document.getElementById("damo").innerHTML = Date();
        }
    </script>
<p id="damo"></p>

对象:

<script>
       <!-- 对象定义 -->
        var person = {
            firstName: "John",
            lastName: "Doe",
            age: 50,
            eyeColor: "blue",
            fullName: function () {
                return this.firstName + " " + this.lastName;
            }
        };
        //访问对象属性
        console.log(person.lastName);
        console.log(person["eyeColor"]);
        //访问对象方法
        name = person.fullName();
        console.log(name);
 </script>

JavaScript 字符串:

字符串比较是按照字符串的 Unicode 码点(即字符编码)进行比较的,

例var a = "你好">"你不好";  // true

转义字符:

代码输出
\'单引号
\"双引号
\\反斜杠
\n换行
\r回车
\ttab(制表符)
\b退格符
\f换页符
<script>
        var name = "mali";
        var age = 24;
        var zyzf = name + '\'' + age + '\\' + name
        console.log(zyzf); //mali'24\mali
</script>

常用的属性和方法:

length返回字符串的长度
concat()连接两个或多个字符串,返回连接后的字符串
slice()提取字符串的片断,并在新的字符串中返回被提取的部分
split()把字符串分割为子字符串数组
match()

在字符串内检索指定的值

 JavaScript 算术运算符:

y=5

运算符描述例子x 运算结果y 运算结果
+加法x=y+275
-减法x=y-235
*乘法x=y*2105
/除法x=y/22.55
%取模(余数)x=y%215
++自增x=++y66
x=y++56
--自减x=--y44
x=y--54

JavaScript 赋值运算符: 

x=10  y=5

运算符例子等同于运算结果
=x=yx=5
+=x+=yx=x+yx=15
-=x-=yx=x-yx=5
*=x*=yx=x*yx=50
/=x/=yx=x/yx=2
%=x%=yx=x%yx=0

逻辑运算符:&&  ||    !

给定 x=6 以及 y=3,下表解释了逻辑运算符:

运算符描述例子
&&and  两个条件都满足(x < 10 && y > 1) 为 true
||or     只需满足一个(x==5 || y==5) 为 false
!not   !(x==y) 为 true

三元运算符

var num = 16;
var num2 = (num < 18) ? "年龄太小" : "年龄已达到";
console.log(num2)//年龄太小

条件语句:

  • if 语句 - 只有当指定条件为 true 时,使用该语句来执行代码
  • if...else 语句 - 当条件为 true 时执行代码,当条件为 false 时执行其他代码
  • if...else if....else 语句- 使用该语句来选择多个代码块之一来执行
  • switch 语句 - 使用该语句来选择多个代码块之一来执行

JavaScript 循环: 

  • for - 循环代码块一定的次数
  • for/in - 循环遍历对象的属性
  • while - 当指定的条件为 true 时循环指定的代码块
  • do/while - 同样当指定的条件为 true 时循环指定的代码块
//for - 循环代码块一定的次数
    <button onclick="forFunction()">For 循环</button>
    <script>
        function forFunction() {
            var x = "";
            for (var i = 0; i < 5; i++) {
                x = x + "该数字为 " + i + '\n';
            }
            console.log(x);
            //该数字为 0
            //该数字为 1
            //该数字为 2
            //该数字为 3
            //该数字为 4
        }
    </script>
//For/In 循环
<button onclick="fiFunction()">For/In 循环</button>
    <script>
        function fiFunction() {
            var x;
            var txt = "";
            var person = {
                fname: "Bill",
                lname: "Gates",
                age: 56
            };
            for (x in person) {
                txt = txt + person[x];
            }
            console.log(txt);//BillGates56
        }
    </script>

JavaScript 类型转换:

任何数据类型加字符串都等与字符串

String() 将数字、布尔值、日期对象转换为字符串

toString() 将数字、布尔值、日期对象转换为字符串

Number() 将字符串、布尔值、日期转换为数字

将变量转换为数字

正则表达式:

正则表达式是由一个字符序列形成的搜索模式。

当你在文本中搜索数据时,你可以用搜索模式来描述你要查询的内容。

正则表达式可以是一个简单的字符,或一个更复杂的模式。

正则表达式可用于所有文本搜索和文本替换的操作。

//语法
/正则表达式主体/修饰符(可选)
var patt = /runoob/i
runoob 是一个正则表达式主体 (用于检索)。
i  是一个修饰符 (搜索不区分大小写)。

使用字符串方法:

在 JavaScript 中,正则表达式通常用于两个字符串方法 : search() 和 replace()。

search() 方法用于检索字符串中指定的子字符串,或检索与正则表达式相匹配的子字符串,并返回子串的起始位置。

replace() 方法用于在字符串中用一些字符串替换另一些字符串,或替换一个与正则表达式匹配的子串

//search() 方法使用正则表达式
//使用正则表达式搜索 "Runoob" 字符串,且不区分大小写
 <script>
        var str = "Visit Runoob!";
        var n = str.search(/Runoob/i);
        console.log(n);//6
 </script>

//replace() 方法使用正则表达式
//使用正则表达式且不区分大小写将字符串中的 Microsoft 替换为 Runoob 
 <script>
        var str = "Visit Microsoft!";
        var mic = str.replace(/microsoft/i, "Runoob");
        console.log(mic); //Visit Runoob!
 </script>

JavaScript 表单:

document.forms表示获取当前页面的所有表单
document.forms[0]表示获取当前页面的第一个表单
document.forms[‘exportServlet’]表示获取当前页面的name="exportServlet"的表单
document.forms[‘exportServlet’].username.value获取表单为exportServlet,name为exportServlet的值
document.forms[0].submit表示提交第一个form表单
//表单验证:判断字段fname值是否存在,不存在就阻止表单提交
//必填(或必选)
<script>
        function validateForm() {
            var x = document.forms["myForm"]["fname"].value;
            if (x == null || x == "") {
                alert("需要输入名字。");
                return false;
            }
        }
</script>
<form name="myForm" action="demo_form.php" onsubmit="return validateForm()" method="post">
        名字: <input type="text" name="fname">
        <input type="submit" value="提交">
 </form>
//验证输入的是否为1-10之间的数字
    <input id="numb">
    <button type="button" onclick="tjFunction()">验证数字</button>
    <script>
        function tjFunction() {
            var x, text;
            x = document.getElementById("numb").value;
            //isNaN() 函数用于检查是否为数字
            if (isNaN(x) || x < 1 || x > 10) {
                text = "输入错误";
            } else {
                text = "输入正确";
            }
            console.log(text);
        }
    </script>
//HTML 表单自动验证
 <form action="demo_form.php" method="post">
        <input type="text" name="fname" required="required">
        <input type="submit" value="自动验证">
 </form>

HTML 约束验证:

HTML5 新增了 HTML 表单的验证方式:约束验证(constraint validation)。

约束验证是表单被提交时浏览器用来实现验证的一种算法

约束验证 HTML 输入属性:

属性描述
disabled规定输入的元素不可用
max规定输入元素的最大值
min规定输入元素的最小值
pattern规定输入元素值的模式
required规定输入元素字段是必需的
type 规定输入元素的类型

约束验证 CSS 伪类选择器:

选择器描述
:disabled选取属性为 "disabled" 属性的 input 元素
:invalid选取无效的 input 元素
:optional选择没有"optional"属性的 input 元素
:required选择有"required"属性的 input 元素
:valid选取有效值的 input 元素

 对表单内输入数据进行验证:

// E-mail 验证
     <script>
        function emvalidateForm() {
            var x = document.forms["myFormem"]["email"].value;
            var atpos = x.indexOf("@");
            var dotpos = x.lastIndexOf(".");
            if (atpos < 1 || dotpos < atpos + 2 || dotpos + 2 >= x.length) {
                alert("不是一个有效的 e-mail 地址");
                return false;
            }
        }
    </script>
    <form name="myFormem" action="demo-form.php" onsubmit="return emvalidateForm();" method="post">
        <input type="text" name="email">
        <input type="submit" value="E-mail 验证">
    </form>

约束验证 DOM 方法:

PropertyDescription
checkValidity()如果 input 元素中的数据是合法的返回 true,否则返回 false。
setCustomValidity()

设置 input 元素的 validationMessage 属性,用于自定义错误提示信息的方法。

使用 setCustomValidity 设置了自定义提示后,validity.customError 就会变成 true,checkValidity 总是会返回 false。如果要重新判断需要取消自定义提示,方式如下:

setCustomValidity('') 
setCustomValidity(null) 
setCustomValidity(undefined)
  //checkValidity() 方法
  //输入的数字小于 100 或大于300,会提示错误信息
  //required必填
    <input id="id1" type="number" min="100" max="300" required>
    <button onclick="cvFunction()">checkValidity验证</button>
    <script>
        function cvFunction() {
            var inpObj = document.getElementById("id1");
            if (inpObj.checkValidity() == false) {
                console.log(inpObj.validationMessage);
            }
        }
    </script>

 约束验证 DOM 属性:

validity布尔属性值,返回 input 输入值是否合法
validationMessage浏览器错误提示信息
willValidate指定 input 是否需要验证

Validity 属性:

input 元素的 validity 属性包含一系列关于 validity 数据属性:

属性描述
customError设置为 true, 如果设置了自定义的 validity 信息。
patternMismatch设置为 true, 如果元素的值不匹配它的模式属性。
rangeOverflow设置为 true, 如果元素的值大于设置的最大值。
rangeUnderflow设置为 true, 如果元素的值小于它的最小值。
stepMismatch设置为 true, 如果元素的值不是按照规定的 step 属性设置。
tooLong设置为 true, 如果元素的值超过了 maxLength 属性设置的长度。
typeMismatch设置为 true, 如果元素的值不是预期相匹配的类型。
valueMissing设置为 true,如果元素 (required 属性) 没有值。
valid设置为 true,如果元素的值是合法的。
//rangeOverflow 属性
    <input id="id2" type="number" max="100">
    <button onclick="rofFunction()">rangeOverflow验证</button>
    <script>
        function rofFunction() {
            var rantxt = "";
            if (document.getElementById("id2").validity.rangeOverflow) {
                rantxt = "输入的值太大了";
            }
            console.log(rantxt);
        }
    </script>
// rangeUnderflow 属性
    <input id="id3" type="number" min="100" required>
    <button onclick="rufFunction()">rangeUnderflow验证</button>
    <script>
        function rufFunction() {
            var txt = "";
            var inpObj = document.getElementById("id3");
            if (!isNumeric(inpObj.value)) {
                txt = "你输入的不是数字";
            } else if (inpObj.validity.rangeUnderflow) {
                txt = "输入的值太小了";
            } else {
                txt = "输入正确";
            }
            console.log(txt, "txt");
        }
        // 判断输入是否为数字
        function isNumeric(n) {
            return !isNaN(parseFloat(n)) && isFinite(n);
        }
    </script>

JavaScript this 关键字:

面向对象语言中 this 表示当前对象的一个引用。

但在 JavaScript 中 this 不是固定不变的,它会随着执行环境的改变而改变。

  • 在方法中,this 表示该方法所属的对象。
  • 如果单独使用,this 表示全局对象。
  • 在函数中,this 表示全局对象。
  • 在函数中,在严格模式下,this 是未定义的(undefined)。
  • 在事件中,this 表示接收事件的元素。
  • 类似 call() 和 apply() 方法可以将 this 引用到任何对象。
//方法中的 this
<script>
        var person = {
            firstName: "John",
            lastName: "Doe",
            id: 5566,
            //fullName 方法所属的对象就是 person
            fullName: function () {
                return this.firstName + " " + this.lastName;
            }
        };
        console.log(person.fullName());//John Doe
</script>

//单独使用 this,指向全局Global对象,在浏览器中window就是全局对象
var x = this;
console.log(x);

//函数中使用 this(默认)
function myFunction() {
  return this;
//Window {window: Window, self: Window, document: document, name: 'mali', location: Location, …}
}

显式函数绑定:

在 JavaScript 中函数也是对象,对象则有方法,apply 和 call 就是函数对象的方法。这两个方法异常强大,他们允许切换函数执行的上下文环境(context),即 this 绑定的对象。

//call()
<script>
        var person1 = {
            fullName: function () {
                return this.firstName + " " + this.lastName;
            }
        }
        var person2 = {
            firstName: "John person2",
            lastName: "Doe person2",
        }
        console.log(person1.fullName.call(person2)); // 返回John person2 Doe person2
  </script>

JavaScript - JSON:

JSON 是用于存储和传输数据的格式, 通常用于服务端向网页传递数据 。

  • JSON 是一种轻量级的数据交换格式。
  • JSON是独立的语言 
  • JSON 易于理解
//JSON 对象
{"name":"Runoob", "url":"www.runoob.com"}
//JSON 数组
{"sites":[
    {"name":"Runoob", "url":"www.runoob.com"}, 
    {"name":"Google", "url":"www.google.com"},
    {"name":"Taobao", "url":"www.taobao.com"}
]}
函数描述
JSON.parse()用于将一个 JSON 字符串转换为 JavaScript 对象。
JSON.stringify()用于将 JavaScript 值转换为 JSON 字符串。

 案例:JSON 字符串转换为 JavaScript 对象

<script>
        var text = '{ "sites" : [' +
            '{ "name":"Runoob" , "url":"www.runoob.com" },' +
            '{ "name":"Google" , "url":"www.google.com" },' +
            '{ "name":"Taobao" , "url":"www.taobao.com" } ]}';
        var obj = JSON.parse(text);
        console.log(obj.sites[1].url);//www.google.com
</script>

javascript:void(0)

javascript:void(0) 中最关键的是 void 关键字, void 是 JavaScript 中非常重要的关键字,该操作符指定要计算一个表达式但是不返回值

//语法格式
void func()
javascript:void func()
//或者
void(func())
javascript:void(func())
案例: <a href="javascript:void(0)">单击此处什么也不会发生</a>

JavaScript  异步编程:

同步按你的代码顺序执行,异步不按照代码顺序执行,异步的执行效率更高

 JavaScript 中的异步操作函数往往通过回调函数来实现异步任务,回调函数就是一个函数,它是在我们启动一个异步任务的时候就告诉它:等你完成了这个任务之后要干什么。这样一来主线程几乎不用关心异步任务的状态了,他自己会善始善终。

<script>
        function print() {
           alert('RUNOOB');
        }
        setTimeout(print, 3000);//第一个参数print是个回调函数
</script>
        setTimeout(function () {
            console.log("RUNOOB-1!");
        }, 3000);
        console.log("RUNOOB-22!");
        //RUNOOB-22!
        //RUNOOB-1!

异步加载:

例:defer

<script type="text/javascript" src="tools.js" defer="defer"></script>

 例:async

<script type="text/javascript" src="tools.js" async="async"></script>

例:创建scripl,插入到DOM中,加载完毕后callBack 

   <script type="text/javascript">
        var script = document.createElement('script');
        script.type = 'text/javascript';
        script.src = 'tools.js';
        document.body.appendChild(script); //这个时候才会执行tools.js
    </script>

 封装:实现动态加载 JavaScript 脚本异步按需加载脚本,条件加载,兼容性处理,延迟执行

<script type="text/javascript">
        //callback回调函数,等待url加载完成以后执行
        function loadScript(url, callback) {
            var script = document.createElement('script');
            script.type = 'text/javascript';
            script.src = url;

            // 判断demo.js是否加载完成
            if (script.readyState) {
                script.onreadystatechange = function() {
                    if (script.readyState == 'complete' || script.readyState == 'loaded') {
                        callback() // 等待demo.js加载完成后执行--ie
                    }
                }
            } else {
                script.onload = function() {
                    callback() // 等待demo.js加载完成后执行---Safari chrome firefoxopera
                }
            }
            document.body.appendChild(script);

        }
        loadScript('demo.js', function() {
            test()
        })
    </script>

异步 AJAX:

            var xmlhttp = new XMLHttpRequest();
            xmlhttp.onreadystatechange = function() {
                    if (xmlhttp.readyState == 4 && xmlhttp.status == 200) {
                        console.log(xmlhttp.responseText, "请求过来的数据")
                    }
             }
            //open(method,url,async)规定请求的类型、URL 以及是否异步处理请求
            xmlhttp.open("GET", "https://xxx.xxxxxx.cn/api/user/info", true);
            //setRequestHeader(header,value)向请求添加 HTTP 头
            xmlhttp.setRequestHeader(
                "token", "xxxxxxxxxxxxxxxx"
            );
            //send()将请求发送到服务器
            xmlhttp.send();

 使用jQuery发送异步 AJAX : 

    <script src="https://cdn.staticfile.org/jquery/1.10.2/jquery.min.js"></script>
    <script>
        $(document).ready(function () {
            $("button").click(function () {
                $.get("https://www.runoob.com/try/ajax/ajax_info.txt", function (data, status) {
                    alert("数据: " + data + "\n状态: " + status);
                });
            });
        });
    </script>
    <button>发送一个 HTTP GET 请求并获取返回结果</button>

js加载时间线-执行顺序

JavaScript --- Promise:

Promise 是一个 ECMAScript 6 提供的类,目的是更加优雅地书写复杂的异步任务。 Promise 是 ES6 新增加的,所以一些旧的浏览器并不支持,苹果的 Safari 10 和 Windows 的 Edge 14 版本以上浏览器才开始支持 ES6 特性。

//新建一个 Promise 对象
new Promise(function (resolve, reject) {
    // 要做的事情...
});

利用Promise 来多次调用异步函数:

<script>
          //调用resolve代表一切正常,reject 是出现异常时所调用的
        new Promise(function (resolve, reject) {
            setTimeout(function () {
                console.log("First");
                resolve();
            }, 1000);
        }).then(function () {
            return new Promise(function (resolve, reject) {
                setTimeout(function () {
                    console.log("Second");
                    resolve();
                }, 4000);
            });
        }).then(function () {
            setTimeout(function () {
                console.log("Third");
            }, 3000);
        });
 </script>

Promise 类有 .then() .catch() 和 .finally() 三个方法,这三个方法的参数都是一个函数,

.then() 可以将参数中的函数添加到当前 Promise 的正常执行序列,有异常会直接跳到 catch 序列

.catch() 则是设定 Promise 的异常处理序列,

.finally() 是在 Promise 执行的最后一定会执行的序列。

   <script>
        new Promise(function (resolve, reject) {
            console.log(1111);
            //resolve() 中可以放置一个参数用于向下一个 then 传递一个值
            resolve(2222);
        }).then(function (value) {
            console.log(value);
            return 3333;
        }).then(function (value) {
            console.log(value);
            throw "An error";
        }).catch(function (err) {
            console.log(err);
        });
    </script>

执行结果:

1111
2222
3333
An error 

Promise 函数: 

print(1000, "First").then(function () {
    return print(4000, "Second");
}).then(function () {
    print(3000, "Third");
});

Promise 关键点:

  •  1、Promise 对象代表一个异步操作,有三种状态:pending(进行中)、fulfilled(已成功)、rejected(已失败)
  •  2、Promise构造函数接收一个函数作为参数,该函数的两个参数分别是 resolve 和 reject
  •  3、一个promise对象只能改变一次状态,成功或者失败后都会返回结果数据。
  •  4、then 方法可以接收两个回调函数作为参数,第一个回调函数是Promise对象的状态改变为 resoved 是调用,第二个回调函数是 Promise 对象的状态变为 rejected 时调用。其中第二个参数可以省略。
  •  5、catch 方法,该方法相当于最近的 then 方法的第二个参数,指向 reject 的回调函数,另一个作用是,在执行resolve回调函数时,如果出错,抛出异常,不会停止陨星,而是进入catch 方法中。
<script>
        var promise = new Promise(function (resolve, reject) {
            //To Do 要异步执行的事情,这个异步执行的事情有可能成功执行完毕,那么Promise将是fulfilled状态,如果执行失败则是rejected;
            //下面测试代码,人为设置为rejected状态;
            reject("将当前构建的Promise对象的状态由pending(进行中)设置为rejected(已拒绝)"); //当然此处也可以设置为fulfilled(已完成)状态
        })
        promise.then( //调用第一个then()
            success => {
                console.log("异步执行成功,状态为:fulfilled,成功后返回的结果是:" + success);
                return (" 当前 success ");
            },
            error => {
                console.log("异步执行失败,状态为rejected,失败后返回的结果是:" + error);
                //error:将当前构建的Promise对象的状态由pending(进行中)设置为rejected(已拒绝)
                return (" 当前 error ");
            }
        ).then(
            //调用第二个then() 因为调用第一个then()方法返回的是一个新的promise对象,此对象的状态由上面的success或者error两个回调函数的执行情况决定的:
            //如果回调函数能正常执行完毕,则新的promise对象的状态为fulfilled,下面执行success2,如果回调函数无法正常执行,则promise状态为rejected;下面执行error2
            success2 => {
                console.log("第一个then的回调函数执行成功 成功返回结果:" + success2);
                throw (" 当前 success2 "); //自定义异常抛出
            },
            error2 => {
                console.log("第一个then的回调函数执行失败 失败返回结果:" + error2); //error2:当前 error 
                return (" 当前 error2 ");
            }
        ).catch(err => {
            //当success2或者error2执行报错时,catch会捕获异常;
            console.log("捕获异常:" + err); //err:当前 success2 
        });
</script>

                
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
JavaScript教程是一种帮助初学者掌握JavaScript编程语言的学习资源。JavaScript是一种常用的脚本语言,用于在网页上添加交互性和动态性。在教程中,学习者将学习如何使用JavaScript语法、变量、操作符、流程控制、函数、对象和事件以及其他相关概念。 教程通常从基础知识开始,引导学习者了解JavaScript的核心概念和基本语法。学习者将学习如何使用变量来存储和操作数据,以及使用操作符对数据进行处理。教程还会介绍流程控制,如条件语句和循环语句,用于根据不同的条件执行不同的代码块。 随着学习的深入,教程会介绍函数的概念和用法。学习者将学习如何定义和调用函数,以及如何传递参数和返回值。函数是JavaScript编程的重要组成部分,有助于组织和重复使用代码。 在教程的后期,学习者将了解对象和事件的使用。他们将学习如何定义和访问对象的属性和方法,以及如何使用事件来响应用户的交互。 此外,教程还可以涵盖其他主题,如数组、字符串、DOM操作、AJAX和错误处理等等。这些都是进一步扩展和加强JavaScript编程能力所必需的知识。 JavaScript教程通常会提供实际的示例和练习,帮助学习者巩固他们所学的知识并提高他们的编程技能。通过实践,学习者可以更好地理解和运用JavaScript。 总之,JavaScript教程是一种以有效的方式介绍JavaScript编程语言的学习资源,通过理论和实践相结合的方式,帮助学习者从基础到高级掌握JavaScript的核心概念和技能。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值