JavaScript 教程---菜鸟教程

这篇具有很好参考价值的文章主要介绍了JavaScript 教程---菜鸟教程。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、JavaScript 教程

JavaScript 输出

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

  1. 使用window.alert()弹出警告框。
<script>
window.alert(5 + 6);
</script>

JavaScript 教程---菜鸟教程,javascript,前端,html

  1. 使用document.write()方法将内容写到 HTML 文档中。
<h1>我的第一个 Web 页面</h1>

<p>我的第一个段落。</p>

<script>
document.write(Date());
</script>

JavaScript 教程---菜鸟教程,javascript,前端,html

  1. 使用innerHTML写入到 HTML 元素。

如需从 JavaScript 访问某个 HTML 元素,您可以使用 document.getElementById(id)方法。

请使用 “id” 属性来标识 HTML 元素,并innerHTML来获取或插入元素内容:

<p id="demo">我的第一个段落</p>

<script>
document.getElementById("demo").innerHTML = "段落已修改。";
</script>

JavaScript 教程---菜鸟教程,javascript,前端,html

document.getElementById("demo")是使用 id 属性来查找 HTML 元素的 JavaScript 代码 。

innerHTML = "段落已修改。"是用于修改元素的 HTML 内容的 JavaScript 代码。

  1. 使用console.log()写入到浏览器的控制台。
<script>
a = 5;
b = 6;
c = a + b;
console.log(c);
</script>

JavaScript 教程---菜鸟教程,javascript,前端,html

JavaScript 对象

  • 对象定义
    var person = {firstName:"John", lastName:"Doe", age:50, eyeColor:"blue"};
  • 访问对象属性
    你可以通过两种方式访问对象属性:person.lastName;person["lastName"];
  • 对象方法

对象的方法定义了一个函数,并作为对象的属性存储。

对象方法通过添加 () 调用 (作为一个函数)。

该实例访问了 person 对象的 fullName() 方法: name = person.fullName();

  • 访问对象的方法

你可以使用以下语法创建对象方法:

methodName : function() {
    // 代码 
}

你可以使用以下语法访问对象方法:objectName.methodName()

JavaScript 函数

函数是由事件驱动的或者当它被调用时执行的可重复使用的代码块。

<script>
function myFunction()
{
    alert("Hello World!");
}
</script>
 
<body>
<button onclick="myFunction()">点我</button>
</body>

JavaScript 教程---菜鸟教程,javascript,前端,html

  • 函数语法
    函数就是包裹在花括号中的代码块,前面使用了关键词 function:
function functionname()
{
    // 执行代码
}
  • 调用带参数的函数
<p>点击这个按钮,来调用带参数的函数。</p>
<button onclick="myFunction('Harry Potter','Wizard')">点击这里</button>
<script>
function myFunction(name,job){
    alert("Welcome " + name + ", the " + job);
}
</script>

JavaScript 教程---菜鸟教程,javascript,前端,html

  • 带有返回值的函数
    计算两个数字的乘积,并返回结果:
<p>本例调用的函数会执行一个计算,然后返回结果:</p>
<p id="demo"></p>
<script>
function myFunction(a,b){
	return a*b;
}
document.getElementById("demo").innerHTML=myFunction(4,3);
</script>

“demo” 元素的 innerHTML 将是:12
JavaScript 教程---菜鸟教程,javascript,前端,html

JavaScript 事件

HTML 事件是发生在 HTML 元素上的事情。

当在 HTML 页面中使用 JavaScript 时, JavaScript 可以触发这些事件。

  • HTML事件

HTML 事件可以是浏览器行为,也可以是用户行为。

以下是 HTML 事件的实例:

- HTML 页面完成加载
- HTML input 字段改变时
- HTML 按钮被点击

通常,当事件发生时,你可以做些事情。

在事件触发时 JavaScript 可以执行一些代码。

在以下实例中,按钮元素中添加了 onclick 属性:

<button onclick="getElementById('demo').innerHTML=Date()">现在的时间是?</button>
<p id="demo"></p>

JavaScript 教程---菜鸟教程,javascript,前端,html
以上实例中,JavaScript 代码将修改 id=“demo” 元素的内容。

在下一个实例中,代码将修改自身元素的内容 (使用this.innerHTML):

<button onclick="this.innerHTML=Date()">现在的时间是?</button>

JavaScript 教程---菜鸟教程,javascript,前端,html
JavaScript代码通常是几行代码。比较常见的是通过事件属性来调用:

<p>点击按钮执行 <em>displayDate()</em> 函数.</p>
<button onclick="displayDate()">点这里</button>
<script>
function displayDate(){
	document.getElementById("demo").innerHTML=Date();
}
</script>
<p id="demo"></p>

JavaScript 教程---菜鸟教程,javascript,前端,html

JavaScript let 和 const

ES2015(ES6) 新增加了两个重要的 JavaScript 关键字: let 和 const。

let 声明的变量只在 let 命令所在的代码块内有效。

const 声明一个只读的常量,一旦声明,常量的值就不能改变。

重新定义变量
let 声明的变量只在 let 命令所在的代码块 {} 内有效,在 {} 之外不能访问。

var x = 10;
// 这里输出 x 为 10
{ 
    let x = 2;
    // 这里输出 x 为 2
}
// 这里输出 x 为 10

循环作用域

var i = 5;
for (let i = 0; i < 10; i++) {
    // 一些代码...
}
// 这里输出 i 为 5

使用 let 关键字, 它声明的变量作用域只在循环体内,循环体外的变量不受影响。

const 关键字

const 用于声明一个或多个常量,声明时必须进行初始化,且初始化后值不可再修改:

const PI = 3.141592653589793;
PI = 3.14;      // 报错
PI = PI + 10;   // 报错

并非真正的常量

const 的本质: const 定义的变量并非常量,并非不可变,它定义了一个常量引用一个值。使用 const 定义的对象或者数组,其实是可变的。下面的代码并不会报错:

// 创建常量对象
const car = {type:"Fiat", model:"500", color:"white"};
 
// 修改属性:
car.color = "red";
 
// 添加属性
car.owner = "Johnson";

但是我们不能对常量对象重新赋值:

const car = {type:"Fiat", model:"500", color:"white"};
car = {type:"Volvo", model:"EX60", color:"red"};    // 错误

以下实例修改常量数组:

// 创建常量数组
const cars = ["Saab", "Volvo", "BMW"];
 
// 修改元素
cars[0] = "Toyota";
 
// 添加元素
cars.push("Audi");

但是我们不能对常量数组重新赋值:

const cars = ["Saab", "Volvo", "BMW"];
cars = ["Toyota", "Volvo", "Audi"];    // 错误

重置变量
const 关键字在不同作用域,或不同块级作用域中是可以重新声明赋值的:

const x = 2;       // 合法

{
    const x = 3;   // 合法
}

{
    const x = 4;   // 合法
}

JavaScript JSON

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

什么是 JSON?

  • JSON 英文全称 JavaScript Object Notation
  • JSON 是一种轻量级的数据交换格式。
  • JSON是独立的语言 *
  • JSON 易于理解。

JSON 实例
以下 JSON 语法定义了 sites 对象: 3 条网站信息(对象)的数组:

{"sites":[
    {"name":"Runoob", "url":"www.runoob.com"}, 
    {"name":"Google", "url":"www.google.com"},
    {"name":"Taobao", "url":"www.taobao.com"}
]}

JSON 语法规则

  • 数据为 键/值 对。
  • 数据由逗号分隔。
  • 大括号保存对象
  • 方括号保存数组

JSON 数据 - 一个名称对应一个值
JSON 数据格式为 键/值 对,就像 JavaScript 对象属性。

键/值对包括字段名称(在双引号中),后面一个冒号,然后是值:

"name":"Runoob"

JSON 对象
JSON 对象保存在大括号内。

就像在 JavaScript 中, 对象可以保存多个 键/值 对:

{"name":"Runoob", "url":"www.runoob.com"}

JSON 数组
JSON 数组保存在中括号内。

就像在 JavaScript 中, 数组可以包含对象:

"sites":[
    {"name":"Runoob", "url":"www.runoob.com"}, 
    {"name":"Google", "url":"www.google.com"},
    {"name":"Taobao", "url":"www.taobao.com"}
]

在以上实例中,对象 “sites” 是一个数组,包含了三个对象。

每个对象为站点的信息(网站名和网站地址)。

JSON 字符串转换为 JavaScript 对象
通常我们从服务器中读取 JSON 数据,并在网页中显示数据。

简单起见,我们网页中直接设置 JSON 字符串:

首先,创建 JavaScript 字符串,字符串为 JSON 格式的数据:

var text = '{ "sites" : [' +
'{ "name":"Runoob" , "url":"www.runoob.com" },' +
'{ "name":"Google" , "url":"www.google.com" },' +
'{ "name":"Taobao" , "url":"www.taobao.com" } ]}';

然后,使用 JavaScript 内置函数 JSON.parse() 将字符串转换为 JavaScript 对象:

var obj = JSON.parse(text);

最后,在你的页面中使用新的 JavaScript 对象:

<h2>JSON 字符串创建对象</h2>
<p id="demo"></p>
<script>
var text = '{ "sites" : [' +
	'{ "name":"Runoob" , "url":"www.runoob.com" },' +
	'{ "name":"Google" , "url":"www.google.com" },' +
	'{ "name":"Taobao" , "url":"www.taobao.com" } ]}';
	
obj = JSON.parse(text);
document.getElementById("demo").innerHTML = obj.sites[1].name + " " + obj.sites[1].url;
</script>

JavaScript 教程---菜鸟教程,javascript,前端,html

JavaScript void

下面的代码创建了一个超级链接,当用户点击以后不会发生任何事。

<a href="javascript:void(0)">单击此处什么也不会发生</a>

当用户链接时,void(0) 计算为 0,但 Javascript 上没有任何效果。

以下实例中,在用户点击链接后显示警告信息:

<p>点击以下链接查看结果:</p>
<a href="javascript:void(alert('Warning!!!'))">点我!</a>

href="#"与href="javascript:void(0)"的区别
包含了一个位置信息,默认的锚是#top也就是网页的上端,#pos是网页的下端。

javascript:void(0), 仅仅表示一个死链接。

在页面很长的时候会使用 # 来定位页面的具体位置,格式为:# + id

JavaScript 异步编程

异步的概念

异步(Asynchronous, async)是与同步(Synchronous, sync)相对的概念。

在我们学习的传统单线程编程中,程序的运行是同步的(同步不意味着所有步骤同时运行,而是指步骤在一个控制流序列中按顺序执行)。而异步的概念则是不保证同步的概念,也就是说,一个异步过程的执行将不再与原有的序列有顺序关系。

简单来理解就是:同步按你的代码顺序执行,异步不按照代码顺序执行,异步的执行效率更高。

以上是关于异步的概念的解释,接下来我们通俗地解释一下异步:异步就是从主线程发射一个子线程来完成任务。
JavaScript 教程---菜鸟教程,javascript,前端,html
什么时候用异步编程

现在有一个按钮,如果我们设置它的 onclick 事件为一个死循环,那么当这个按钮按下,整个网页将失去响应。

为了避免这种情况的发生,我们常常用子线程来完成一些可能消耗时间足够长以至于被用户察觉的事情,比如读取一个大文件或者发出一个网络请求。因为子线程独立于主线程,所以即使出现阻塞也不会影响主线程的运行。但是子线程有一个局限:一旦发射了以后就会与主线程失去同步,我们无法确定它的结束,如果结束之后需要处理一些事情,比如处理来自服务器的信息,我们是无法将它合并到主线程中去的。

为了解决这个问题,JavaScript 中的异步操作函数往往通过回调函数来实现异步任务的结果处理。

回调函数

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

<p>回调函数等待 3 秒后执行。</p>
<p id="demo"></p>
<script>
function print() {
    document.getElementById("demo").innerHTML="RUNOOB!";
}
setTimeout(print, 3000);
</script>

主线程先执行
JavaScript 教程---菜鸟教程,javascript,前端,html
三秒后子线程执行
JavaScript 教程---菜鸟教程,javascript,前端,html

这段程序中的 setTimeout 就是一个消耗时间较长(3 秒)的过程,它的第一个参数是个回调函数,第二个参数是毫秒数,这个函数执行之后会产生一个子线程,子线程会等待 3 秒,然后执行回调函数 “print”,在命令行输出 “RUNOOB!”。

当然,JavaScript 语法十分友好,我们不必单独定义一个函数 print ,我们常常将上面的程序写成:

<p>回调函数等待 3 秒后执行。</p>
<p id="demo"></p>
<script>
setTimeout(function () {
    document.getElementById("demo").innerHTML="RUNOOB!";
}, 3000);
</script>

JavaScript 教程---菜鸟教程,javascript,前端,html
3 秒后:
JavaScript 教程---菜鸟教程,javascript,前端,html
注意:既然 setTimeout 会在子线程中等待 3 秒,在 setTimeout 函数执行之后主线程并没有停止,所以:

setTimeout(function () {
    document.getElementById("demo1").innerHTML="RUNOOB-1!";  // 三秒后子线程执行
}, 3000);
document.getElementById("demo2").innerHTML="RUNOOB-2!";      // 主线程先执行

JavaScript 教程---菜鸟教程,javascript,前端,html

JavaScript 教程---菜鸟教程,javascript,前端,html

异步 AJAX
除了 setTimeout 函数以外,异步回调广泛应用于 AJAX 编程。有关于 AJAX 详细请参见:https://www.runoob.com/ajax/ajax-tutorial.html

JavaScript Promise

Promise 是一个 ECMAScript 6 提供的类,目的是更加优雅地书写复杂的异步任务。

构造 Promise

现在我们新建一个 Promise 对象:

new Promise(function (resolve, reject) {
    // 要做的事情...
});

Promise 的构造函数

Promise 构造函数接受一个函数作为参数,该函数是同步的并且会被立即执行,所以我们称之为起始函数。起始函数包含两个参数 resolve 和 reject,分别表示 Promise 成功和失败的状态。

起始函数执行成功时,它应该调用 resolve 函数并传递成功的结果。当起始函数执行失败时,它应该调用 reject 函数并传递失败的原因。

Promise 构造函数返回一个 Promise 对象,该对象具有以下几个方法:

  • then:用于处理 Promise 成功状态的回调函数。
  • catch:用于处理 Promise 失败状态的回调函数。
  • finally:无论 Promise 是成功还是失败,都会执行的回调函数。

下面是一个使用 Promise 构造函数创建 Promise 对象的例子:
当 Promise 被构造时,起始函数会被同步执行:

const promise = new Promise((resolve, reject) => {
  // 异步操作
  setTimeout(() => {
    if (Math.random() < 0.5) {
      resolve('success');
    } else {
      reject('error');
    }
  }, 1000);
});
 
promise.then(result => {
  console.log(result);
}).catch(error => {
  console.log(error);
});

在上面的例子中,我们使用 Promise 构造函数创建了一个 Promise 对象,并使用 setTimeout 模拟了一个异步操作。如果异步操作成功,则调用 resolve 函数并传递成功的结果;如果异步操作失败,则调用 reject 函数并传递失败的原因。然后我们使用 then 方法处理 Promise 成功状态的回调函数,使用 catch 方法处理 Promise 失败状态的回调函数。

这段程序会直接输出 error 或 success。

resolve 和 reject 都是函数,其中调用 resolve 代表一切正常,reject 是出现异常时所调用的:

new Promise(function (resolve, reject) {
    var a = 0;
    var b = 1;
    if (b == 0) reject("Divide zero");
    else resolve(a / b);
}).then(function (value) {
    console.log("a / b = " + value);
}).catch(function (err) {
    console.log(err);
}).finally(function () {
    console.log("End");
});

这段程序执行结果是:

a / b = 0
End

Promise 类有 .then() .catch() 和 .finally() 三个方法,这三个方法的参数都是一个函数,.then() 可以将参数中的函数添加到当前 Promise 的正常执行序列,.catch() 则是设定 Promise 的异常处理序列,.finally() 是在 Promise 执行的最后一定会执行的序列。 .then() 传入的函数会按顺序依次执行,有任何异常都会直接跳到 catch 序列:

new Promise(function (resolve, reject) {
    console.log(1111);
    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);
});

执行结果:

1111
2222
3333
An error

Promise 函数

上述的 “计时器” 程序看上去比函数瀑布还要长,所以我们可以将它的核心部分写成一个 Promise 函数:

function print(delay, message) {
    return new Promise(function (resolve, reject) {
        setTimeout(function () {
            console.log(message);
            resolve();
        }, delay);
    });
}

然后我们就可以放心大胆的实现程序功能了:

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

这种返回值为一个 Promise 对象的函数称作 Promise 函数,它常常用于开发基于异步操作的库。

异步函数

异步函数(async function)是 ECMAScript 2017 (ECMA-262) 标准的规范,几乎被所有浏览器所支持,除了 Internet Explorer。
在 Promise 中我们编写过一个 Promise 函数:

function print(delay, message) {
    return new Promise(function (resolve, reject) {
        setTimeout(function () {
            console.log(message);
            resolve();
        }, delay);
    });
}

然后用不同的时间间隔输出了三行文本:

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

我们可以将这段代码变得更好看:

async function asyncFunc() {
    await print(1000, "First");
    await print(4000, "Second");
    await print(3000, "Third");
}
asyncFunc();

异步函数 async function 中可以使用 await 指令,await 指令后必须跟着一个 Promise,异步函数会在这个 Promise 运行中暂停,直到其运行结束再继续运行。

处理异常的机制将用 try-catch 块实现:

async function asyncFunc() {
    try {
        await new Promise(function (resolve, reject) {
            throw "Some error"; // 或者 reject("Some error")
        });
    } catch (err) {
        console.log(err);
        // 会输出 Some error
    }
}
asyncFunc();

如果 Promise 有一个正常的返回值,await 语句也会返回它:

async function asyncFunc() {
    let value = await new Promise(
        function (resolve, reject) {
            resolve("Return value");
        }
    );
    console.log(value);
}
asyncFunc();

程序会输出:Return value文章来源地址https://www.toymoban.com/news/detail-714203.html

到了这里,关于JavaScript 教程---菜鸟教程的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 菜鸟教程《Python 3 教程》笔记(8):字典

    笔记带有个人侧重点,不追求面面俱到。 出处: 菜鸟教程 - Python3 字典 8.1.1 fromkeys() 描述: fromkeys() 函数用于创建一个新字典,以序列 seq 中元素做字典的键,value 为字典所有键对应的初始值。 语法: 参数: seq – 字典键值列表; value – 可选参数, 设置键序列(seq)对应的

    2024年02月11日
    浏览(40)
  • 菜鸟教程《Python 3 教程》笔记(16):模块

    笔记带有个人侧重点,不追求面面俱到。 出处: 菜鸟教程 - Python3 模块 模块 是一个包含所有你定义的函数和变量的文件,其后缀名是.py。模块可以被别的程序引入,以使用该模块中的函数等功能。 不管执行了多少次 import,一个模块只会被导入一次。 使用 import 语句的时候

    2024年02月09日
    浏览(40)
  • 菜鸟教程 《Python 3 教程》笔记(4):数字

    笔记带有个人侧重点,不追求面面俱到。 出处: 菜鸟教程 - Python3 数字(Number) 数据类型是不允许改变的,这就意味着如果改变数字数据类型的值,将重新分配内存空间。 注意: // 得到的并不一定是整数类型的数,它与分母分子的数据类型有关系。 实例: 4.2.1 abs() 函数 描述:

    2024年02月11日
    浏览(40)
  • BackboneJS教程_编程入门自学教程_菜鸟教程-免费教程分享

    BackboneJS教程 BackboneJS - 概述 BackboneJS - 环境设置 BackboneJS - 应用程序 BackboneJS -Events BackboneJS - 模型 BackboneJS - Collection BackboneJS - Router BackboneJS -History BackboneJS - 同步 BackboneJS - 查看 BackboneJS - 实用程序 BackboneJS - 有用的资源

    2024年02月11日
    浏览(41)
  • Hadoop教程_编程入门自学教程_菜鸟教程-免费教程分享

    Hadoop是一个由Apache基金会所开发的分布式系统基础架构。用户可以在不了解分布式底层细节的情况下,开发分布式程序。充分利用集群的威力进行高速运算和存储。Hadoop实现了一个分布式文件系统( Distributed File System),其中一个组件是HDFS(Hadoop Distributed File System)。HDFS有

    2024年02月15日
    浏览(46)
  • Mahout教程_编程入门自学教程_菜鸟教程-免费教程分享

    Mahout 是 Apache Software Foundation(ASF) 旗下的一个开源项目,提供一些可扩展的机器学习领域经典算法的实现,旨在帮助开发人员更加方便快捷地创建智能应用程序。Mahout包含许多实现,包括聚类、分类、推荐过滤、频繁子项挖掘。此外,通过使用 Apache Hadoop 库,Mahout 可以有效

    2024年02月13日
    浏览(40)
  • Ruby教程_编程入门自学教程_菜鸟教程-免费教程分享

    Ruby教程 Ruby - 概述 Ruby - 环境设置 Ruby - 语法 Ruby - 类和对象 Ruby - 变量,常量和文字 Ruby - 运算符 Ruby - 注释 Ruby - if ... else,case,unless Ruby - 循环 Ruby - 方法 Ruby - 块 Ruby - 模块和混合 Ruby - 字符串 Ruby - 数组 Ruby - 哈希 Ruby - 日期和时间 Ruby - Ranges Ruby - 迭代器 Ruby - 文件I/O. Ruby

    2024年02月06日
    浏览(45)
  • Aurelia教程_编程入门自学教程_菜鸟教程-免费教程分享

    Aurelia教程 Aurelia - 概述 Aurelia - 环境设置 Aurelia - 第一次申请 Aurelia - 组件 Aurelia - 组件生命周期 Aurelia - 自定义元素 Aurelia - Dependency Injections Aurelia - 配置 Aurelia - 插件 Aurelia - 数据绑定 Aurelia - Binding Behavior Aurelia - 转换器 Aurelia - Events Aurelia - 事件聚合器 Aurelia - 表格 Aurelia - HT

    2024年02月08日
    浏览(43)
  • Lucene教程_编程入门自学教程_菜鸟教程-免费教程分享

    Lucene是apache软件基金会 jakarta项目组的一个子项目,是一个开放源代码的全文检索引擎工具包,但它不是一个完整的全文检索引擎,而是一个全文检索引擎的架构,提供了完整的查询引擎和索引引擎,部分文本分析引擎(英文与德文两种西方语言)。Lucene的目的是为软件开发

    2024年02月12日
    浏览(54)
  • Unix教程_编程入门自学教程_菜鸟教程-免费教程分享

    UNIX / LINUX教程 Unix / Linux - 入门 Unix / Linux - 文件管理 Unix / Linux - 目录管理 Unix / Linux - 文件权限/访问模式 Unix / Linux - 环境 Unix / Linux基本实用程序 - 打印,电子邮件 Unix / Linux - 管道和过滤器 Unix / Linux - 进程管理 Unix / Linux - 网络通信实用程序 Unix / Linux - vi编辑器教程 Shell Scri

    2024年02月03日
    浏览(58)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包