一个适合前端入门轻松上手的JavaScript教学

《代码小白自救指南:轻松上手JavaScript》 通过本文,我们一起探索了 JavaScript 的基础语法,包括变量、数据类型、运算符、流程控制语句,深入了解了函数的定义、调用、参数与返回值,以及匿名函数和箭头函数的特性;还学习了如何操作 DOM,实现对网页元素的获取、修改、添加和删除,掌握了事件处理的相关知识,能够捕获用户操作并做出响应。JavaScript 的应用场景十分广泛,从前端交互到后端服务,从桌面应用到移动开发,从游戏制作到物联网,它无处不在。 阅读详情

JavaScript 是一门编程语言,可为网站添加交互功能(例如:游戏、动态样式、动画以及在按下按钮或收到表单数据时做出的响应等)。本文介绍了 JavaScript 的精彩之处和主要用途。

JavaScript 到底是什么?

JavaScript(缩写:JS)是一门完备的 动态编程语言)。当应用于HTML文档时,可为网站提供动态交互特性。由布兰登·艾克( Brendan Eich,Mozilla 项目、Mozilla 基金会和 Mozilla 公司的联合创始人)发明。

JavaScript 的应用场合极其广泛,简单到幻灯片、照片库、浮动布局和响应按钮点击,复杂到游戏、2D/3D 动画、大型数据库驱动程序等等。

JavaScript 相当简洁,却非常灵活。开发者们基于 JavaScript 核心编写了大量实用工具,可以使 开发工作事半功倍。其中包括:

1、浏览器应用程序接口(API)—— 浏览器内置的 API 提供了丰富的功能,比如:动态创建 HTML 和设置 CSS 样式、从用户的摄像头采集处理视频流、生成3D 图像与音频样本等等。

2、第三方 API —— 让开发者可以在自己的站点中整合其它内容提供者(Twitter、Facebook 等)提供的功能。

3、第三方框架和库 —— 用来快速构建网站和应用。

本节是一篇 JavaScript 简介,因此这个阶段不会对 JavaScript 语言和上述工具做过多的介绍。之后可以到 JavaScript 学习区 和 MDN 的其它地方学习更多细节。

下面对语言核心做一个不完整介绍,期间还可以接触到一些浏览器 API 特性。

“Hello World!”示例

读到这里你一定很激动,诚然 —— JavaScript 是最振奋人心的 Web 技术之一,而且在娴熟驾驭之后,你的网站在功能和创新力上将达到一个新的维度。

然而,JavaScript 比 HTML 和 CSS 学习起来更加复杂一点,所以必须一步一个脚印地学习。首先,来看看如何在页面中添加一些基本的信息 JavaScript 脚本来建造一个 “Hello world!” 示例

重要的是:如果你没有完成之前的课程实践,可联系我获取资料包继续跟着练习哦,如果你要实践,前两篇笔记就是html和css阶段的内容哦。

  1. 首先,打开你的测试站点,创建一个名为 scripts 的文件夹。然后在其中创建一个名为 main.js 的文件。
  2. 下一步,在index.html文件</body>标签前的新行添加以下代码。
<script src="scripts/main.js" defer></script>
  1. 与 CSS <link>的元素类似,它将** JavaScript**引入页面以作用于 HTML(以及 CSS 等页面上所有内容);
  2. 现在将以下代码添加到main.js文件中:
let myHeading = document.querySelector('h1');
myHeading.textContent = 'Hello world!';
  1. 最后,保存HTML和JavaScript 文件,用浏览器打开 index.html。可以看到如下内容:

注:我们将 <script> 放在HTML文件的底部附近的原因是浏览器会按照代码在文件中的顺序加载 HTML。如果先加载的 JavaScript 期望修改其下方的 HTML,那么它可能由于 HTML 尚未被加载而失效。因此,将 JavaScript 代码放在 HTML页面的底部附近通常是最好的策略。

发生了什么?

JavaScript 把页面的标题改成了 “Hello world!” 。首先用 querySelector() 函数获取标题的引用,并把它储存在 myHeading 变量中。这与 CSS 选择器的用法非常相像:若要对某个元素进行操作,首先得选择它。

之后,把 myHeading 变量的属性 textContent (标题内容)修改为 “Hello world!” 。

注:上面用到的两个函数都来自文档对象模型 (DOM) API, 均用于控制文档。

JavaScript 快速入门

我们来学习一些 JavaScript 的核心特性,从而更好地理解它的运行机制。学习这些知识很有意义,因为这些原理普遍适用于所有编程语言,掌握好它们,可以做到融会贯通。

重要:学习本节时,请尝试将示例代码输入到 JavaScript 控制台里看看会发生什么。 JavaScript 控制台的更多信息请查看 浏览器开发者工具。

变量(Variable)

变量 (en-US) 是存储能量的容器。要声明一个变量,先输入关键字 let 或 var,然后输入合适的名称:

let myVariable;

注:行末的分号表示当前语句结束,不过只有在单行内需要分割多条语句时,这个分号才是必须的。然而,一些人认为每条语句末尾加分号是一种好的风格。

注:几乎任何内容都可以作为变量名,但还是有一些限制(请参阅 变量命名规则)。如果你不确定,还可以 验证变量名 是否有效。

注:JavaScript 对大小写敏感,myVariable 和 myvariable 是不同的。如果代码出现问题了,先检查一下大小写!

注:想要了解更多关于 var 和 let 的不同点,可以参阅 var 与 let 的区别。

变量定义后可以进行赋值:

myVariable = '李雷';

也可以将定义、赋值操作写在同一行:

let myVariable = '李雷';

可以直接通过变量名取得变量的值:

myVariable;

变量在赋值后是可以更改的:

let myVariable = '李雷';
myVariable = '韩梅梅';

注意变量可以有不同的 数据类型 :

变量

解释

示例

String

字符串(一串文本):字符串的值必须用引号(单双均可,必须成对)扩起来。

let myVariable = '李雷';

Number

数字:无需引号。

let myVariable = 10;

Boolean

布尔值(真 / 假): true/false 是 JS 里面的特殊关键字,无需引号。

let myVariable = true;

Array

数组:用于在单一引用中存储多个值的结构。

let myVariable = [1, '李雷', '韩梅梅', 10]; 元素引用方法:myVariable[0], myVariable[1] ……

Object

对象:JavaScript 里一切皆可对象,一切皆可储存在变量里。这一点要牢记于心。

let myVariable = document.querySelector('h1'); 以及上面所有示例都是对象。

那么变量有什么用呢?我们说,编程时它们无所不在。如果知道无法改变,那么就无法做任何动态的工作,比如发送个性化的问候,或是改变在图片库当前展示的图片。

注释

类似于 CSS,JavaScript 中间可以添加注释。

/*
这里的所有内容
都是注释。
*/

如果注释只有一行,可以更简单地将注释放在两个斜杠之后,就像这样:

// 这是一条注释。

运算符

运算符 (en-US)是一类数学符号,可以根据两个值(或变量)产生结果。以下表格中介绍了一些最简单的运算符,可以在浏览器控制台里尝试一下后面的示例。

译注:这里说“根据两个值(或变量)产生结果”是不严谨的,计算两个变量的运算符称为“二元运算符”,还有一元运算符和三元运算符,下表中的“取非”就是一元运算符。

运算符

解释

符号

示例

加

将两个数字相加,或拼接成两个字符串。

+

6 + 9;"Hello " + "world!";

减、乘、除

这些运算符操作与基础算术一致。只是乘法写作星号,除法写作斜杠。

-, *, /

9 - 3;8 * 2; //乘法在JS中是一个星号9 / 3;

赋值运算符

为变量赋值(你之前已经见过这个符号了)

=

let myVariable = '李雷';

等于

测试两个值是否相等,并返回一个 true/false (布尔)值。

===

let myVariable = 3;myVariable === 4; // false

不等于

和等于运算符相反,测试两个值是否不相等,并返回一个 true/false (布尔)值。

!==

let myVariable = 3;myVariable !== 3; // false

取非

返回逻辑相反的值,比如当前值为真,则返回 false。

!

原式为真,但经取非后值为 false: let myVariable = 3;!(myVariable === 3); // false

运算符种类远不止这些,不过目前上表已经够用了。完整列表请参阅 表达式和运算符。

注:不同类型数据之间的计算可能出现奇怪的结果,因此必须正确引用变量,才能得出预期结果。比如在控制台输入 "35" + "25",为什么不能得到 60?因为引号将数字转换成了字符串,所以结果是连接两个字符串而不是把两个数字相加。输入 35 + 25 才能得到正确结果。

条件语句

条件语句是一种代码结构,用来测试表达式的真假,并根据测试结果运行不同的代码。一个常用的条件语句是 if ... else。下面是一个示例:

let iceCream = 'chocolate';
if (iceCream === 'chocolate') {
  alert('我最喜欢巧克力冰激淋了。');
} else {
  alert('但是巧克力才是我的最爱呀……');
}

if ( ... ) 中的表达式进行测试,用(上文所提到的)等于运算符来比较变量 iceCream 与字符串 'chocolate' 是否相等。 如果返回 true,则运行第一个代码块;如果返回 false,则跳过第一块直接运行 else 之后的第二个代码块。

函数(Function)

函数 用来封装可复用的功能。如果没有函数,一段特定的操作过程用几次就要重复写几次,而使用函数则只需写下函数名和一些简短的信息。之前已经涉及过一些函数,比如:

let myVariable = document.querySelector('h1');
alert('hello!');

document.querySelector 和 alert 是浏览器内置的函数,随时可用。

如果代码中有一个类似变量名后加小括号 () 的东西,很可能就是一个函数。函数通常包括参数,参数中保存着一些必要的数据。它们位于括号内部,多个参数之间用逗号分开。

比如, alert() 函数在浏览器窗口内弹出一个警告框,还应为其提供一个字符串参数,以告诉它警告框里要显示的内容。

好消息是:人人都能定义自己的函数。下面的示例是为两个参数进行乘法运算的函数:

function multiply(num1, num2) {
  let result = num1 * num2;
  return result;
}

尝试在控制台运行这个函数,不妨多试几组参数,比如:

multiply(4, 7);
multiply(20, 20);
multiply(0.5, 3);

注:return语句告诉浏览器当前函数返回 result 变量。这是一点很有必要,因为函数内定义的变量只能在函数内使用。这叫做变量的 作用域。(详见 变量作用域。)

事件

事件能为网页添加真实的交互能力。它可以捕捉浏览器操作并运行一些代码做为响应。最简单的事件是 点击事件,鼠标的点击操作会触发该事件。 可尝试将下面的代码输入到控制台,然后点击页面的任意位置:

document.querySelector('html').onclick = function() {
    alert('别戳我,我怕疼。');
}

Copy to Clipboard

将事件与元素绑定有许多方法。在这里选用了<html>元素,把一个匿名函数(就是没有命名的函数,这里的匿名函数包含单击鼠标时要运行的代码)赋值给了html的onclick (en-US) 属性。

请注意:

document.querySelector('html').onclick = function() {};

等价于

let myHTML = document.querySelector('html');
myHTML.onclick = function() {};

只是前者更简洁。

完善示例网页

现在你已经具备了一些 JavaScript 基础,下面来为示例网页添加一些更酷的特性。

添加一个图像切换器

这里将用新的 DOM API 为网页添加另一张图片,并用 JavaScript 使图片在点击时进行切换。

  1. 首先,找到另一张你想要在你的页面上展示的图片,且尺寸与第一张图片尽可能相同。
  2. 将这张图片储存在你的images目录下。
  3. 将图片重命名为'firefox2.png'(去掉引号)。
  4. 打开main.js文件,输入下面的JavaScript 代码 ( 请删除刚才的 "hello world" 脚本):
let myImage = document.querySelector('img');
myImage.onclick = function() {
    let mySrc = myImage.getAttribute('src');
    if(mySrc === 'images/firefox-icon.png') {
      myImage.setAttribute('src', 'images/firefox2.png');
    } else {
      myImage.setAttribute('src', 'images/firefox-icon.png');
    }
}

5、保存所有文件并用浏览器打开 index.html 。点击图片可以发现它能够切换了!

这里首先把<img> 元素的引用存放在myImage变量里。然后将这个变量的onclick事件与一个匿名函数绑定。每次点击图片时:

  1. 获取这张图片的 src 属性值。
  2. 用一个条件句来判断src的值是否等于原始图像的路径:
    1. 如果是,则将 src 的值改为第二张图片的路径,并在 `` 内加载该图片。
    2. 如果不是(意味着它已经修改过), 则把 src 的值重新设置为原始图片的路径,即原始状态。

添加个性化欢迎信息

下面来添加另一段代码,在用户初次进入站点时将网页的标题改成一段个性化欢迎信息(即在标题中添加用户的名字)。名字信息会由 Web Storage API 保存下来,即使用户关闭页面之后再重新打开,仍可得到之前的信息。还会添加一个选项,可以根据需要改变用户名字以更新欢迎信息。

1、打开index.html, 在<script>标签前添加以下代码,将在页面底部显示一个“切换用户”字样的按钮:

<button>切换用户</button>

2、将以下 JavaScript 代码原封不动添加到main.js文件底部,将获取新按钮和标题的引用,并保存至变量中:

let myButton = document.querySelector('button');
let myHeading = document.querySelector('h1');

3、然后添加以下函数来设置个性化欢迎信息。(函数需要在调用后生效,下文中提供了两种对该函数的调用方式)

function setUserName() {
  let myName = prompt('请输入你的名字。');
  localStorage.setItem('name', myName);
  myHeading.textContent = '跟着艾编程学习,太有成就感了,' + myName;
}

该函数首先调用了prompt()函数, 与alert()类似会弹出一个对话框。但是这里需要用户输入数据,并在确定后将数据存储在myName变量里。接下来将调用localStorageAPI ,它可以将数据存储在浏览器中供后续获取。这里用localStorage的setItem()函数来创建一个'name'数据项,并把myName变量复制给它。最后将textContent属性设置为一个欢迎字符串加上这个新设置的名字。

4、接下来,添加以下的if ... else 块。我们可以称之为初始化代码,因为它在页面初次读取时进行构造工作:

if(!localStorage.getItem('name')) {
setUserName();
} else {
let storedName = localStorage.getItem('name');
myHeading.textContent = '跟着艾编程学习,太有成就感了,' + storedName;
}

5、Copy to Clipboard这里首次使用了取非运算符(逻辑非,用!表示)来检测'name'数据是否存在。若不存在,调用setUserName()创建。若存在(即用户上次访问时设置过),调用getItem()获取保存的名字,像上文的setUserName()那样设置textContent。

  1. 最后,为按钮设置 onclick 事件处理器。按钮按下时运行 setUserName() 函数。这样用户就可以通过按这个按钮来自由设置新名字了:
myButton.onclick = function() {
setUserName();
}

第一次访问网页时,页面将询问用户名并发出一段个性化的信息。可随时点击按钮来改变用户名 。告诉你一个额外的福利,因为用户名是保存在 localStorage 里的,网页关闭后也不会丢失,所以重新打开浏览器时所设置的名字信息将依然存在:)

用户名为 null

运行示例代码,弹出输入用户名的对话框,试着按下 取消 按钮。此时标题会显示为 “跟着艾编程学习太有成就感了,null”。这是因为取消提示对话框后值将设置为 null,这是 JavaScript 中的一个特殊值,表示引用不存在。

也可以不输入任何名字直接按 确认,你的标题会显示为“跟着艾编程学习太有成就感了,”,原因么显而易见。要避免这些问题,应该更新 setUserName() 来检查用户是否输入了 null 或者空名字:

function setUserName() {
  let myName = prompt('请输入你的名字。');
  if(!myName || myName === null) {
    setUserName();
  } else {
    localStorage.setItem('name', myName);
    myHeading.innerHTML = '跟着艾编程学习太有成就感了,' + myName;
  }
}

用人话说就是:如果 myName 没有值或值为 null,就再次从头运行setUserName()。如果有值(上面的表达式结果不为真),就把值存储到 localStorage 并且设置标题。

小结

如果你按部就班完成本文的实践,那么最终可以得到以下页面

相关推荐:

  1. 前端新手看过来,手把手带你轻松上手html的实操
  2. 前端新手看过来,教你从零CSS做漂亮网页,这样学习太有成就感了
前端必知:Node.js 基础入门指南 这篇文章的主要目的是帮助前端开发者快速了解和掌握 Node.js 的基础知识。我们会涵盖 Node.js 的基本概念、核心原理、实际操作步骤,还会通过具体的代码案例让大家看到 Node.js 在实际项目中的应用。范围主要集中在 Node.js 的基础内容,不会涉及过于高深的高级特性。接下来,我们会按照以下几个部分来详细介绍 Node.js:首先是核心概念与联系,用有趣的故事和生活实例引出 Node.js,解释它的核心概念以及它们之间的关系;然后是核心算法原理和具体操作步骤,会用代码来详细说明; 阅读详情

相关推荐

艾编程教程资料:nginx安装包和手册.zip

Nginx是一款轻量级的Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,在BSD-like 协议下发行。其特点是占有内存少,并发能力强,事实上nginx的并发能力在同类型的网页服务器中表现较好,中国大陆使用nginx网站用户有:百度、京东、新浪、网易、腾讯、淘宝等。

回归前端学习第一天

回顾前端JS学习回顾一下学过的内容吧推荐学习网站哟制定属于自己的标题信息啦 回顾一下学过的内容吧 推荐学习网站哟 推荐一个非常nice的网站哟,想开始学习前端的小伙伴,或者想重温基础的小伙伴都可以来这里重新学习哈 HTML CSS JS的基础知识这里都覆盖啦 Web入门 开发学习网站 制定属于自己的标题信息啦 通过Web Storage API 保存信息,用户输入后会由Web Storage API 保存下来,关闭页面再打开,仍可得到之前的信息,且该信息可由用户自行输入 运用button标签触发事件 &lt

weixin_44584059的博客 155

艾编程coding老师:JUC 并发编程 + 底层原理.pdf

JUC就是java.util .concurrent工具包的简称。这是一个处理线程的工具包,JDK 1.5开始出现的。下面一起来看看它怎么使用。

JavaScript 基础

JavaScript 是一门编程语言,可为网站添加交互功能(例如:游戏、动态样式、动画以及在按下按钮或收到表单数据时做出的响应等)。

weixin_56805991的博客 578

哨兵1号(Sentinel-1)雷达SAR数据预处理全流程:从下载到精确配准

本文详细介绍了哨兵1号(Sentinel-1)雷达SAR数据从下载到精确配准的全流程预处理方法。内容涵盖SLC与GRD数据选择、ASF平台下载技巧,并重点解析了使用SNAP软件进行几何校正、辐射定标及高精度配准的核心步骤,为InSAR形变监测等应用提供可靠的数据基础。

weixin_29208327的博客 479

生信入门第七课:使用FastQC软件进行测序原始fastq数据质控

从实验到数据:RNA定量、文库片段长度、fastqc质控和fastp去接头

微生信 492

JavaScript基础(.....持续待更)

javascript热身 一、你知道,为什么JavaScript非常值得我们学习吗? 1. 所有主流浏览器都支持JavaScript。 2. 目前,全世界大部分网页都使用JavaScript。 3. 它可以让网页呈现各种动态效果。 4. 做为一个Web开发师,如果你想提供漂亮的网页、令用户满意的上网体验,JavaScript是必不可少的工具。 二、易学性 1.学习环...

ahct58280的博客 662

从接线到组态:手把手教你搞定PROFIBUS-DP与PA的混合网络搭建(基于西门子TIA Portal)

本文详细介绍了PROFIBUS-DP与PA混合网络的搭建方法,基于西门子TIA Portal平台,从硬件选型、网络架构设计到组态配置和现场调试,提供了一套完整的实战指南。重点解析了DP/PA耦合器的使用、地址映射策略及网络诊断技巧,帮助工程师高效构建高可靠性的工业自动化网络。

weixin_32103009的博客 303

爬虫(7) lxml和xpath2020-12-28

文章目录1. Xpath的简介2. 工具安装 1. Xpath的简介 XPath(XML Path Language)是一种XML的查询语言,他能在XML树状结构中寻找节点。XPath 用于在 XML 文档中通过元素和属性进行导航。 xml是一种标记语法的文本格式,xpath可以方便的定位xml中的元素和其中的属性值。lxml是python中的一个第三方模块,它包含了将html文本转成xml对象,和对对象执行xpath的功能。 xml_content = ''' <bookstore> <

m0_46738467的博客 589

LVGL在嵌入式Linux系统上的高效移植与优化实践

本文详细介绍了在嵌入式Linux系统(特别是ARM平台)上移植和优化LVGL图形库的完整实践流程。内容涵盖从开发环境搭建、代码获取、CMake工程配置,到关键配置文件定制、显示与输入设备端口移植,以及内存、渲染等核心性能优化技巧,旨在帮助开发者高效构建流畅的嵌入式UI应用。

weixin_29274969的博客 451

GEE:关于遥感生态指数(RSEI)的若干疑问

本文记录了若干关于在 Google Earth Engine (GEE)平台上,计算基于主成分分析(PCA)的遥感生态指数(RSEI)的问题。并记录了解决这些问题的一些答案。问题包括,主成分分析的特征值的正负,主成分的占比,去云后空值像素的处理方法,异常值处理方法,如何看载荷等。

养乐多的博客 3418

JavaScript简单入门教程学习篇

JavaScript 到底是什么? JavaScript(缩写:JS)是一门完备的 解释型动态编程语言。当应用于HTML文档时,可为网站提供动态交互特性。由布兰登·艾克(Brendan Eich,Mozilla 项目、Mozilla 基金会和 Mozilla 公司的联合创始人)发明。JavaScript 的应用场合极其广泛,简单到幻灯片、照片库、浮动布局和响应按钮点击,复杂到游戏、2D/3D 动画、大型数据库驱动程序等等。 JavaScript 相当简洁,却非常灵活。开发者们基于 JavaScri..

cug-jdc的博客 1446

20、超声多普勒成像技术全解析

本文全面解析了超声多普勒成像技术,涵盖彩色血流成像(CFI)、能量多普勒成像、超快多普勒成像和矢量多普勒成像的原理、流程、优势及临床应用场景。详细探讨了各成像模式的特点,如CFI的血流方向与速度可视化、能量多普勒对小血管的高灵敏度、超快多普勒的高帧率分析能力,以及矢量多普勒消除角度依赖性的创新方法。同时分析了技术面临的挑战及未来发展趋势,包括更高分辨率、人工智能辅助诊断和便携式设备的发展,为医学影像研究和临床诊断提供重要参考。

z2a3b4c5d的博客 279

前端之JavaScript入门篇

JavaScript是一门解释型语言,也是动态语言。所谓解释型值语言是指不需要被编译为机器码在执行,而是直接执行。由于少了编译这一步骤,所以解释型语言开发起来尤为轻松,但是解释型语言运行较慢也是它的劣势。不过解释型语言中使用了JIT技术,使得运行速度得以改善。而所谓的动态语言可以暂时理解为在语言中的一切内容都是不确定的。比如一个变量,这一时刻是个整型,下一时刻可能会变成字符串了。当然这个问题我们以后再谈。不过在补充一句动态语言相比静态语言性能上要差一些,不过由于JavaScript中应用的JIT技术提示。.

Queen_is_king的博客 3425

zynq的vitis工程烧录到Winbond(华邦)型号W25Q256JVEQ的QSPI FLAHS

vitis2023.1直接支持W25Q256JVEQ。

FPGA艺术家的博客 679

AI Agent开发大全第二十课-如何开发一个MCP(从0开发一个MCP Server)

大模型的MCP火了,可是无论是Claude官网本身自带Sample还是全网任何一本教程没有一个可以真正应用在生产环境中的。要么就是只能在本地以文件IO流的方式运行要么干脆连编译都出错,真正的mcp server和client是怎么编写的?如何运行在分布式环境?本教程就带大家真正从0开始以“AI计算食物热量“为例带大家真正学习mcp开发的全过程。

打造全国最全的AI Agent开发知识领域的博客 1803

Vue.js入门教程:轻松掌握前端框架的魔法

通过本文的介绍,你已经对Vue.js有了初步的了解,并掌握了如何安装Vue.js、创建Vue实例和使用Vue组件等基础知识。随着前端技术的飞速发展,Vue.js凭借其简洁、易上手和高效的特点,成为了前端开发者们的新宠。Vue.js的安装非常简单,你可以通过CDN直接引入Vue.js,也可以通过npm或yarn进行安装。Vue组件是Vue.js的核心概念之一,它们可以扩展HTML元素,封装可重用的代码。接下来,我们来创建一个简单的Vue实例,体验其数据驱动视图的能力。在这个例子中,我们定义了一个名为。

zhangwenok的博客 613

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

前端学习路线图及前端工程师适合学习的后端技能

从基础的 HTML、CSS、JavaScript 到 jQuery、AJAX、Bootstrap,再到 Vue、React 这些现代框架,前端开发者的学习路径逐步扩展到小程序开发和服务端技术。通过学习 Node.js、Docker 和 Nginx 等后端技术,前端开发者能够拓展技能,提升项目部署和优化的能力。学习这些技术,将使你不仅仅成为一个优秀的前端开发者,还具备全栈开发和项目部署优化的能力。在开发行业中,理解全栈的能力是非常宝贵的,它让你拥有了更大的灵活性和创新能力。

2202_75337835的博客 2857

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

web前端初学者学习Javascript很吃力怎么办?到底该如何学习Js?

此套前端课程的知识体系包括:html,css,html5,css3,JavaScript,jquery,bootstrap,Ajax,vue.js,node.js等等。从初级到高级框架应有尽有, 另外教程里面除超清视频课件以外,最重要的是还有学习笔记,源码,作业练习等等。一共100个G,非常全面。内容由浅入深,非常适合零基础自学。希望帮助想学习前端的小白节省很多时间和精力!能够以最短的时间进入前端...

weixin_45396666的博客 1596

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

Vue.js 入门教程:快速上手

Vue.js是一个开源的前端框架,它的设计目标是尽量简化开发者的工作,让构建现代化的单页应用(SPA)变得更加直观。它的核心特点是响应式数据绑定和组件化开发。通过这篇教程,你已经掌握了Vue.js的基本概念,包括Vue实例、数据绑定和指令的使用。希望你能继续深入学习Vue.js,构建更复杂的应用。Vue.js是一个非常灵活且强大的工具,不论是小型的动态页面,还是大型的单页应用,它都能帮助你高效地完成开发工作。希望你在学习Vue.js的过程中能享受开发的乐趣!

B5201234的博客 1328

【前端安全】crypto-js - JavaScript 加密标准库

特性支持情况说明多算法支持✅ 强烈支持支持所有常见加密算法易用性✅ 极易使用简单的 API 设计跨平台✅ 完全支持浏览器和 Node.js 都支持文档完善✅ 很完善详细的文档和示例社区支持✅ 很活跃广泛使用和维护。

silverclayz的技术分享 2864

Vue 从 0 到 1:新手也能轻松上手的前端开发指南(附避坑技巧)

Vue 不难,难的是 “光看不学”。我当初也是从 “改一行代码看一次效果” 开始,慢慢能独立做项目的。今天的待办清单案例,你要是能自己改改功能(比如加个 “分类”),就已经超越 80% 的新手了~如果遇到问题,欢迎在评论区留言,咱们一起解决!也可以关注我,后续会更新 Vue 进阶内容~Vue 官方文档(中文)、B 站 “尚硅谷 Vue 教程”(免费,适合新手))

2301_81512868的博客 1366

前端小白也能懂:HLS.JS入门到实战

最近在做一个视频播放相关的项目,接触到了HLS.JS这个强大的流媒体播放库。今天就把我的学习心得整理出来,希望能帮到同样想了解HLS.JS的小伙伴们。简单来说,它能让网页直接播放HLS格式的视频流,而不需要依赖浏览器原生支持。最大的优点是兼容性特别好,连不支持HLS的浏览器也能流畅播放。作为前端新手,我觉得HLS.JS是个很友好的入门选择。不需要配置复杂的环境,打开网页就能直接写代码看效果,调试起来非常方便。特别是它的一键部署功能,让我能快速把demo分享给同事测试,省去了搭建测试服务器的麻烦。

YellowSun24的博客 798

用pdfform.js轻松填充PDF表单:纯JavaScript解决方案

用pdfform.js轻松填充PDF表单:纯JavaScript解决方案 项目介绍 在日常工作和生活中,我们经常需要处理PDF表单,无论是填写个人信息、提交报告还是签署合同。然而,传统的PDF表单填充工具往往依赖于特定的软件或插件,操作繁琐且不够灵活。为了解决这一问题,pdfform.js应运而生。 pdfform.js是一个纯JavaScript库,允许你在浏览器或服务器端轻松填充PDF表单。无...

gitblog_00538的博客 1217

【JavaWeb03】 入门JavaScript:轻松掌握前端开发核心技能

文章目录🌍一. JavaScript1. 基本说明2. JavaScript 特点!3. JavaScript 快速入门🌍二. js变量1. 变量的声明2. 示例3. 变量的命名规则4. 变量的类型5. 变量的作用域6. 变量的提升🌍三. 数据类型1. 基本数据类型(Primitive Types)2. 引用数据类型(Reference Types)3. 类型检测🌍四. 运算符1. 算术运算符2. 赋值运算符3. 关系运算符。

jike007gt的博客 1015

Node.js安装教程Windows环境:一键安装,轻松上手

Node.js安装教程Windows环境:一键安装,轻松上手 【下载地址】Node.js安装教程Windows环境 本开源项目为Windows用户提供了Node.js的详细安装教程,涵盖从下载到安装的完整流程。通过清晰的步骤说明,帮助用户快速获取并配置Node.js环境,特别推荐64-bit版本的“node-v14.18...

gitblog_06736的博客 611
上一篇: 教你用CSS从零做漂亮网页,这样学习前端太有成就感了
下一篇: 掌握这10个JavaScript新的特性,让编写的代码既干净又有趣
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

艾编程前端技术

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值