JavaScript 的 Generator 函数是 ES6 新增的重要特性之一,它允许开发人员编写像迭代器一样的函数,控制函数的执行流程并可以暂停和继续执行函数,这使得开发人员可以非常方便地写出复杂且高效的异步代码。
Generator 函数的定义
Generator 函数使用 function*
语法定义,函数体中包含使用 yield
语句定义的“中断点”,这些中断点会让函数在执行过程中暂停,以等待下一次被调用继续执行。
以下是一个简单的 Generator 函数的示例:
function* generator() {
yield 1;
yield 2;
yield 3;
}
const gen = generator();
console.log(gen.next().value); // 输出 1
console.log(gen.next().value); // 输出 2
console.log(gen.next().value); // 输出 3
在上面的示例中,Generator 函数 generator()
定义了 3 个中断点,分别是 yield 1
、yield 2
和 yield 3
。在调用 generator()
函数时,函数体并不会立即执行,而是返回一个迭代器对象 gen
。调用 gen.next()
方法后,迭代器会一步步执行到下一个中断点,运行并返回中断点后的值,以此类推。
Generator 函数的特点
可以暂停函数、恢复函数的运行;
每次 yield
关键字可以返回一个可选的值,这个值会被返回给 next()
方法;
可以返回无穷的值,并不需要将所有的值都计算出来;
可以通过 throw()
方法抛出异常;
可以通过 return()
方法结束函数执行。
Generator 函数的应用
Generator 函数可以用于实现协程、异步编程、事件循环等,在实际开发中有着广泛的应用。特别是在异步编程中,通过使用 Generator 函数和基于 Promise 的异步编程方式结合使用,可以避免回调地狱、提高代码的可读性和可维护性。
例如,以下是一个使用 Generator 函数和 Promise 实现异步编程的示例:
function* generator() {
try {
const result1 = yield fetch('https://api.example.com/data1');
const result2 = yield fetch('https://api.example.com/data2');
const result3 = yield fetch('https://api.example.com/data3');
console.log(result1, result2, result3);
} catch (err) {
console.error(err);
}
}
function run(gen) {
const itr = gen();
function next(value) {
const result = itr.next(value);
if (result.done) return result.value;
result.value.then(next).catch(itr.throw);
}
next();
}
run(generator);
在上面的示例中,generator()
函数定义了 3 个异步操作,通过 yield
暂停函数的执行。在 run()
函数中,通过 itr.next()
方法逐步执行 generator()
中的异步操作。
在每个异步操作的 Promise
对象执行成功后,next()
方法会将异步操作的结果通过 itr.next()
方法返回给 generator()
函数,并将结果传递给 yield
语句,并触发继续执行 generator()
函数的操作。如果异步操作执行失败,则通过 catch
捕获错误并停止执行。
通过使用 Generator 函数和 run()
函数,可以使异步操作按照预期的顺序执行,并保持代码的清晰和简洁。
Async/await 是 ES8/ES2017 引入的一项 JavaScript 语言特性,作为 Promise 的语法糖,它使得异步代码看起来更像同步代码,更加易于编写和理解。
2.async/await 的基本用法
使用 async/await 来处理异步操作时,我们需要使用 async
关键字来声明一个异步函数。在异步函数内部,我们可以使用 await
关键字等待 Promise 对象的结果,而不需要像 Promise 那样使用 then() 回调函数处理异步操作。
以下是一个简单的使用 async/await 的示例:
async function getData() {
const response = await fetch('https://api.example.com/data');
const data = await response.json();
return data;
}
getData().then(data => {
console.log(data);
}).catch(error => {
console.error(error);
});
在上面的代码中,getData()
函数使用 async 关键字声明为一个异步函数,函数内部使用 await 关键字等待 fetch()
和 response.json()
异步操作的结果,等待 Promise 对象 resolved 后,将结果赋给变量 data
并返回。在调用 getData()
函数时,使用 then() 和 catch() 处理 Promise 的 resolved 和 rejected 状态。
async/await 的特点
使异步操作变得更加易于编写和理解,使异步代码看起来更像同步代码;
采用函数和变量的方式来管理 Promise 对象的状态和值,避免了 Promise 嵌套带来的可读性问题;
可以被 try/catch 来处理异常;
可以同时等待多个异步操作的完成。
3。AJAX:
AJAX(Asynchronous JavaScript and XML)是用于创建异步 Web 应用程序的一种技术。它使用 XMLHttpRequest 对象来与服务器交换数据。通过 AJAX,可以在不重载整个页面的情况下更新部分页面内容。使用 AJAX,可以使 Web 应用程序更加快速、动态和用户友好。
通常,用于与服务器进行通信的数据格式是 JSON,但也可以使用其他格式如 XML、HTML 或纯文本。
let xhr = new XMLHttpRequest();
xhr.open(method, URL, [async, user, password])
method —— HTTP 方法。通常是 "GET" 或 "POST"。 URL —— 要请求的 URL,通常是一个字符串,也可以是 URL 对象。 async —— 如果显式地设置为 false,那么请求将会以同步的方式处理,我们稍后会讲到它。 user,password —— HTTP 基本身份验证(如果需要的话)的登录名和密码。
xhr.onload = function() {
alert(`Loaded: ${xhr.status} ${xhr.response}`);
};
xhr.onerror = function() { // 仅在根本无法发出请求时触发
alert(`Network Error`);
};
xhr.onprogress = function(event) { // 定期触发
// event.loaded —— 已经下载了多少字节
// event.lengthComputable = true,当服务器发送了 Content-Length header 时
// event.total —— 总字节数(如果 lengthComputable 为 true)
alert(`Received ${event.loaded} of ${event.total}`);
};
上面这段代码是一个 XMLHttpRequest 对象的事件处理函数,包括 onload
、onerror
和 onprogress
三个事件。解释如下:
xhr.onload
事件处理函数:在 XMLHttpRequest 请求完成后( readyState = 4)触发,表示服务端已经响应了请求。在该函数中,我们可以获取响应的状态码 xhr.status
以及响应体 xhr.response
,通常使用这些数据来更新页面的内容。
xhr.onerror
事件处理函数:表示无法满足请求,通常是网络连接方面的错误。在该函数中,我们可以处理无法发出请求的错误,例如网络连接问题等。
xhr.onprogress
事件处理函数:在请求过程中,定期触发,表示接收到了一部分响应数据。在该函数中,我们可以定期获取请求数据的下载进度,包括 event.loaded
已经下载的字节数和 event.total
总共需要下载的字节数,以此来实现一些高级的数据请求和进度显示效果。
需要注意的是,XHR 对象的事件处理函数需要在发送请求之前设置,以便在请求过程中自动调用。在这种情况下,我们可以使用 XMLHttpRequest.prototype
实例中的方法来添加事件处理程序。例如:
var xhr = new XMLHttpRequest();
xhr.open('GET', '/api/data.json');
xhr.addEventListener('load', function() {
alert(`Loaded: ${xhr.status} ${xhr.response}`);
});
xhr.addEventListener('error', function()
4.DOM 操作:
DOM(Document Object Model)是指将 HTML 或 XML 文档作为一个树形结构表示的模型。文档的每个部分都可以被视为一个节点,节点的关系构成了整个文档的层次结构。
在 JavaScript 中,可以使用 DOM API 对页面中的元素进行访问、修改、添加或删除。例如,可以使用 document.createElement()
创建新元素,使用 element.appendChild()
向父元素添加子元素,使用 element.removeChild()
删除子元素等。
5.BOM 操作:
BOM(Browser Object Model)是指浏览器对象模型,它提供了访问浏览器窗口和框架的对象,也提供了一些用于查询、操作浏览器功能的方法和属性。
在 JavaScript 中,可以使用 BOM API 访问浏览器窗口和框架,例如 window
对象和 location
对象等。可以使用这些对象的方法和属性,例如 window.open()
打开新窗口,使用 location.href
修改 URL 等。BOM API 还提供了一些事件供开发人员监听,例如窗口大小改变、鼠标单击等。
需要注意的是,由于浏览器的不同实现可能存在差异,因此在编写跨浏览器代码时,应该尽量避免直接使用 BOM 和 DOM API,而应该使用 JavaScript 库或框架,这些库和框架已经解决了大部分的浏览器兼容性问题。
1.类(Class) :
类是 JavaScript 中实现面向对象编程的机制之一,使用 class 关键字定义一个类,通过定义类中的属性和方法,可以通过创建实例来使用类。类提供了一种抽象的概念,可以帮助我们更好地组织和管理代码。
例如,在下面的示例中,我们可以定义一个名为 Person
的类,它有一个构造函数和一个 greet()
方法:
class Person {
constructor(name) {
this.name = name;
}
greet() {
console.log(`Hello, my name is ${this.name}`);
}
}
const tom = new Person('Tom');
tom.greet(); // 输出 "Hello, my name is Tom"
2.函数(Function) :
函数是 JavaScript 中可执行代码的基本单位之一,我们可以定义有参数和没有参数的函数,有返回值和没有返回值的函数。函数可以存储在变量、数组和对象中,并作为另一个函数的参数来使用。JavaScript 函数也支持闭包的特性,可以保留外部函数作用域中的变量和状态。
例如,以下是一个简单的 JavaScript 函数示例:
function add(a, b) {
return a + b;
}
const sum = add(1, 2); // sum = 3
3.对象(Object):
在 JavaScript 中,对象是一种数据类型,代表一个实体或物体,并存储有关该实体的相关信息。对象由一组键值对来表示,每个键值对称为对象的属性。属性的值可以是基本类型、函数、其他对象等。
例如:
const person = {
name: 'Tom',
age: 20,
greet: function() {
console.log(`Hello, my name is ${this.name}`);
}
};
person.greet(); // 输出 "Hello, my name is Tom"
4.实例(Instance):
实例是一个类被创建后,通过该类构造函数创建的对象。实例化过程涉及到为对象分配内存并调用构造函数。每个实例都具有与类定义中指定的属性和方法相同的属性和方法。可以创建任意数量的实例,并且每个实例都是相互独立的。
例如,以下是创建 Person
类的实例 tom
:
class Person {
constructor(name) {
this.name = name;
}
greet() {
console.log(`Hello, my name is ${this.name}`);
}
}
const tom = new Person('Tom');
tom.greet(); // 输出 "Hello, my name is Tom"
5.泛型(Generics):
泛型是在编程语言中实现算法和数据结构时广泛使用的一项技术。泛型允许开发人员编写、使用可重用的代码,从而支持类型不必紧密绑定到特定类型上的编程。在 JavaScript 中,泛型通常会使用变量来定义类型并抽象算法或数据结构。
例如,以下是一个使用泛型来创建一个可重用的数组工具类 ArrayUtilities
的示例:
class ArrayUtilities {
static reverse(array: T[]): T[] {
return array.reverse();
}
static shuffle(array: T[]): T[] {
for (let i = array.length - 1; i > 0; i--) {
const j = Math.floor(Math.random() * (i + 1));
[array[i], array[j]] = [array[j], array[i]];
}
return array;
}
}
const numbers = [1, 2, 3, 4, 5];
const reversedNumbers = ArrayUtilities.reverse(numbers); // [5, 4, 3, 2, 1]
const shuffledNumbers = ArrayUtilities.shuffle(numbers); // e.g [2, 5, 4, 1, 3]
6.继承(Inheritance):
继承是一种面向对象编程的概念,它允许派生一个类,该类继承基类的属性和方法,并且可以添加新的属性和方法。在 JavaScript 中,可以使用继承来重用代码和避免重复编写已有的代码。
例如,以下是一个使用继承创建 Person
类的子类 Student
的示例:
class Person {
constructor(name) {
this.name = name;
}
greet() {
console.log(`Hello, my name is ${this.name}`);
}
}
class Student extends Person {
constructor(name, grade) {
super(name);
this.grade = grade;
}
study() {
console.log(`${this.name} is studying in ${this.grade} grade`);
}
}
const tom = new Student('Tom', 5);
tom.greet(); // 输出 "Hello, my name is Tom"
tom.study(); // 输出 "Tom is studying in 5 grade"
在上面的代码中,我们使用 extends
关键字来创建 Student
类,它继承了 Person
类的属性和方法,并添加了新的 study()
方法。在 Student
类中,我们调用 super()
方法来调用 Person
类的构造函数,并为 grade
属性设置一个新的值。然后我们使用 new
关键字创建 Student
类的实例,使用 greet()
和 study()
方法,以此来测试继承效果。
DOM (D ocument O bject M odel)(文档对象模型)
声明为 HTML5 文档
元素是 HTML 页面的根元素
元素包含了文档的元(meta)数据,如 定义网页编码格式为 utf-8 。
元素描述了文档的标题
元素包含了可见的页面内容
元素定义一个大标题
元素定义一个段落
HTML 标题(Heading)是通过
- 标签来定义的。
HTML 段落是通过标签
来定义的。
这是一个链接
HTML 图像是通过标签 来定义的.
标签在 HTML 页面中创建水平线。
标签
描述
定义粗体文本
定义着重文字
定义斜体字
定义小号字
定义加重语气
定义下标字
定义上标字
定义插入字
定义删除字
HTML 元素
标签描述了基本的链接地址/链接目标,该标签作为HTML文档中所有的链接标签的默认链接:
实例
HTML 元素
标签定义了文档与外部资源之间的关系。
标签通常用于链接到样式表:
实例
HTML
HTML 元素
meta标签描述了一些基本的元数据。
标签提供了元数据.元数据也不显示在页面上,但会被浏览器解析。
META 元素通常用于指定网页的描述,关键词,文件的最后修改时间,作者,和其他元数据。
元数据可以使用于浏览器(如何显示内容或重新加载页面),搜索引擎(关键词),或其他Web服务。
一般放置于
区域
标签- 使用实例
为搜索引擎定义关键词:
为网页定义描述内容:
定义网页作者:
每30秒钟刷新当前页面:
使用 text-align(文字对齐)属性指定文本的水平与垂直对齐方式:
实例
居中对齐的标题 这是一个段落。
HTML 表格
表格由
标签来定义。每个表格均有若干行(由 标签定义),每行被分割为若干单元格(由 标签定义)。字母 td 指表格数据(table data),即数据单元格的内容。
数据单元格可以包含文本、图片、列表、段落、表单、水平线、表格等等。
HTML 表格表头
表格的表头使用
标签进行定义。
大多数浏览器会把表头显示为粗体居中的文本:
Header 1
Header 2
row 1, cell 1
row 1, cell 2
row 2, cell 1
row 2, cell 2
在浏览器显示如下:
HTML中的元素根据其在文档流中的表现方式可以分为块级元素和行内元素,具体如下:
块级元素: 块级元素通常用于表示页面上的结构和内容,它会占据一行或多行,并且会在其前后产生一个换行符。常见的块级元素有:
~
行内元素: 行内元素通常用于表示文本内容,它不会单独占据一行,而是在一行之内进行排列。常见的行内元素有:
另外还有一类元素叫做行内块级元素,它们具有行内元素的特性,但是可以设置宽高等属性,常见的行内块级元素有:
需要注意的是,HTML5中新增的一些元素例如 、 等也是块级元素。此外,元素的默认表现方式可以通过CSS进行修改,比如将一个块级元素设置为行内元素,或者将一个行内元素设置为块级元素。
对象是 JavaScript 中最重要的数据类型之一,它通常用于描述和操作现实世界中的事物。对象是一组相关属性和方法的集合,可以像一个独立的实体一样进行操作和处理。
例如,如果要描述一个人,可以使用对象来存储和操作与这个人相关的信息。这个人的信息包括姓名、年龄、性别、电话号码、地址等等。将这些信息存储在一个对象中,可以很方便地进行访问和操作。例如,可以使用属性名来访问一个人的姓名或年龄:
let person = {
name: 'Tom',
age: 30,
gender: 'Male',
phone: '1234567890',
address: '123 Main Street',
};
// 访问姓名和年龄
console.log(person.name); // 输出 'Tom'
console.log(person.age); // 输出 30
在这个例子中,person
是一个对象,它包含了一些属性,如name
、age
、gender
等;每个属性都有一个关联的值。使用点运算符和属性名可以访问这些属性的值。
除了属性,对象还可以包含方法。例如,一个人可以有一个 getInfo()
方法,用于返回他的姓名、年龄、性别和地址。定义方法的方式是在对象中添加一个函数,比如:
let person = {
name: 'Tom',
age: 30,
gender: 'Male',
phone: '1234567890',
address: '123 Main Street',
getInfo() {
return `${this.name} is a ${this.gender} of age ${this.age} and lives at ${this.address}`;
},
};
console.log(person.getInfo()); // 输出 "Tom is a Male of age 30 and lives at 123 Main Street"
在这个例子中,getInfo()
是一个方法,用于返回人的信息。每个方法都可以在对象中定义,并且可以通过对象来调用。
实现 (Implementation):实现是指使用代码将抽象概念转换为具体的程序功能。它通常涉及到编写类、方法、函数等具体的代码实现,以达到预期目标。例如,实现一个存储数据的接口,可以使用 JavaScript 中的类和对象实现。
抽象 (Abstraction):抽象是指将复杂的程序实现细节隐藏起来,只让用户看到简单易懂的概念和接口。在 JavaScript 中,抽象可以通过类、函数、接口、模块等实现。例如,在类中声明一个方法而无需暴露其内部实现细节,这是抽象的一个示例。
混入 (Mixin):混入是一种编程技巧,允许将多个对象的功能组合在一起,并创建一个新的对象。在 JavaScript 中,混入通常是通过将对象的属性和方法复制到另一个对象中来实现的。这些属性和方法可以来自类、原型或其他对象。Mixin 可以用来实现代码重用和模块化的目标。
切面 (Aspect):切面编程是一种编程范式,可以将特定的代码逻辑跨越多个不同的对象和方法。它的核心思想是将一些横切关注点(cross-cutting concerns)抽象出来,并注入到应用程序的多个部分中,从而实现模块化和可维护性。在 JavaScript 中,可以使用 AOP(面向切面编程)库或框架来实现切面编程。
JavaScript 数据类型
值类型(基本类型) :字符串(String)、数字(Number)、布尔(Boolean)、空(Null)、未定义(Undefined)、Symbol。
引用数据类型(对象类型) :对象(Object)、数组(Array)、函数(Function) ,还有两个特殊的对象:正则(RegExp)和日期(Date)。
HTML 表单 是 Web 应用程序中非常基础的功能之一,它允许 Web 用户提交数据给服务器。以下是 HTML 表单中最基本的元素:
form 元素 :form 元素是 HTML 表单的容器,它包含一组输入元素,这些元素用于收集用户输入数据。该元素包含 action、method、enctype、name、target 等属性,例如:
action:表单提交时将数据发送到的 URL
method:表单提交时使用的 HTTP 方法(GET、POST)
enctype:编码类型,用于支持文件上传功能
name:表单的名称
target:表单提交后数据的显示位
2.input 元素 :input 元素是表单中最常见的元素类型。它包含 type、value、name、placeholder、readonly、disabled、maxlength 和 required 等属性,例如:
type:输入元素的类型(text、password、email、number、date、url、file 等)
value:输入元素的默认值
name:用于识别输入元素的名称
placeholder:用于在输入元素为空时提供提示性的文本
readonly:输入元素只读
disabled:输入元素禁用
maxlength:输入元素允许输入的最大字符串长度
required:该输入元素为必填
3.textarea 元素 :textarea 元素用于多行的文本输入,例:
cols:指定文本框的列数
rows:指定文本框的行数
4.select 元素 :select 元素是下拉列表框,它允许用户从预定义的选项列表中选择一个或多个选项,例如:
男
女
option 元素:定义下拉列表的每个选项,它包含 value 和 selected 属性
selected:设置下拉列表的默认选项
5.button 元素 :button 元素用作提交表单,或者充当复选框、单选框、拖动按钮等,它包含 type、name、value、disabled 和 form 等属性,例:
提交
type:button 元素的类型(submit、reset、button)
name:设置按钮名称
value:设置提交表单所要发送的值
disabled:设置按钮是否禁用
checkbox 元素:checkbox 元素表示一组选项中的多个选项,使用 checked 属性来设置选项是否被选中,例如:
Apple
Orange
Banana
name:设置选项组的名称
value:设置每个选项的值
checked:设置选项是否默认选中
radio 元素:radio 元素表示一组选项中的单个选项,使用 checked 属性来设置选项是否被选中,例如:
Male
Female
name:设置选项组的名称
value:设置每个选项的值
checked:设置选项是否默认选中
file 元素:file 元素用于表单中的文件上传功能,它允许用户选择本地磁盘上的文件进行上传,例如:
submit 元素:submit 元素用于提交表单数据到服务器,例如:
reset 元素:reset 元素用于重置表单中的所有输入字段,例如:
hidden 元素:hidden 元素用于存储表单数据,但不显示在用户界面上,例如:
name:用于识别隐藏输入元素的名称
value:设置隐藏输入元素的值
伪类:
1.:hover 伪类 :hover 伪类用于选中鼠标悬停在其上的元素。可以使用:hover伪类为元素添加一些动画和样式,以改善用户体验。
举个例子:假设有如下的CSS规则,它会让鼠标悬停在链接元素上时,改变链接的文本颜色和下划线:
a:hover {
color: red;
text-decoration: underline;
}
2:nth-child() 伪类 :nth-child() 伪类用于选择特定位置的子元素。可以使用:nth-child()伪类为某些元素添加特殊的样式或影响元素的表现方式。
举个例子:如果要选择某个列表中的第二个列表项并将其背景颜色更改为红色,可以使用如下CSS规则:
li:nth-child(2) {
background-color: red;
}
3.:active 伪类 :active 伪类用于选中当前正在被操作的元素。可以使用:active伪类在用户点击元素时为其添加一些样式效果。
举个例子:假设有如下的CSS规则,它会在用户点击按钮元素时,将按钮的文本背景颜色更改为灰色:
button:active {
background-color: gray;
}
4.:focus 伪类 :focus 伪类用于选中当前获取焦点的元素。可以使用:focus伪类为用户在表单元素上输入数据时改变元素的样式。
举个例子:假设有如下的CSS规则,它会在文本框获得焦点时,使文本框的边框变为蓝色:
input:focus {
border-color: blue;
}
5.:first-child 伪类 :first-child 伪类用于选择作为其父元素下的第一个子元素的元素。可以使用:first-child伪类为页面中的元素添加特殊的样式或排版。
举个例子:假设有如下的CSS规则,它会将列表中的第一个列表项的颜色更改为红色:
li:first-child {
color: red;
}
伪元素:
CSS中的伪元素(Pseudo-elements)是一种用于在元素的内容前面或后面添加特殊样式的CSS选择器。它们通常表示元素的特定部分,而不是被选中元素的整个内容。在CSS中,伪元素以双冒号(::)开头。下面是一些常见的伪元素:
1.::before ::before伪元素在选中元素的开始处插入内容。通常用于添加一些装饰或图像,或者用于创建某些视觉效果,例如下划线、引号或图标等。
举个例子,以下 CSS 规则使用 ::before 内容和实心圆点作为列表标记:
li::before {
content: "•";
margin-right: 8px;
}
2.::after 1.::after伪元素在选中元素的结束处插入内容。与::before伪元素类似,通常用于添加一些装饰或图像,或者用于创建某些视觉效果。
举个例子,以下 CSS 规则使用 ::after 内容添加一个引号:
blockquote::after {
content: '"';
}
3.::first-line ::first-line伪元素用于选择某些元素中的第一行文本,并对其应用特殊样式。可以使用它来更改文本的颜色、字体或间距等属性。
举个例子,以下 CSS 规则将选中段落的第一行文本颜色更改为红色:
p::first-line {
color: red;
}
4.::first-letter ::first-letter伪元素用于选择某些元素中的第一个字母,并对其应用特殊样式。它可以用于创建大写字母开头的首字母效果或其他视觉效果。
举个例子,以下 CSS 规则将选中段落的第一个字母颜色更改为蓝色:
p::first-letter {
color: blue;
}
5.::selection ::selection伪元素用于选择用户选中的文本,例如文本框或页面的任何文本区域。可以使用它来更改选中文本的背景颜色或文本颜色等属性。
举个例子,以下 CSS 规则更改选中文本的背景颜色:
::selection {
background-color: yellow;
}
JS事件:
鼠标事件:
click
:元素被单击时触发
contextmenu
:元素上发生鼠标右键单击事件时触发
dblclick
:元素被双击时触发
mouseout
:鼠标移开元素时触发
mouseover
:鼠标移到元素上时触发
mousedown
:鼠标在元素上按下时触发
mouseup
:鼠标在元素上释放时触发
表单事件:
submit
:表单提交时触发
reset
:表单重置时触发
change
:表单内容改变时触发
focus
:元素获得焦点时触发
blur
:元素失去焦点时触发
键盘事件:
keydown
:按下键盘上的键时触发
keyup
:释放键盘上的键时触发
keypress
:按下并释放键盘上的键时触发
窗口事件:
resize
:调整窗口大小时触发
load
:文档或图像完成加载时触发
unload
:文档被卸载或关闭窗口时触发
现在的时间是?
现在的时间是?
:这是一个按钮元素,当用户单击该按钮时,会执行 onclick
事件处理程序。onclick
属性中的 JavaScript 代码是一个表达式,它调用了 getElementById()
方法来获取一个拥有 id
为 demo
的元素,并使用 innerHTML
属性将其中的内容设置为当前时间。
:这是一个段落元素,它拥有一个 id
为 demo
。这个元素将用于显示当前时间。
当用户单击该按钮时,JavaScript 代码将获取元素 demo
并将其 innerHTML
属性设置为当前的时间。其中,Date()
是 JavaScript 中的一个内置对象,它返回当前时间并且包含了年、月、日、小时、分钟、秒数等信息。通过这种方式,开发者可以使用 JavaScript 动态显示网页中的内容,让用户感知到网页的实时性。
AJAX
AJAX 不是新的编程语言,而是一种使用现有标准的新方法。
AJAX 最大的优点是在不重新加载整个页面的情况下,可以与服务器交换数据并更新部分网页内容。
AJAX 不需要任何浏览器插件,但需要用户允许 JavaScript 在浏览器上执行。
XMLHttpRequest 只是实现 Ajax 的一种方式。
function loadXMLDoc()
{
var xmlhttp;
if (window.XMLHttpRequest)
{
// IE7+, Firefox, Chrome, Opera, Safari 浏览器执行代码
xmlhttp=new XMLHttpRequest();
}
else
{
// IE6, IE5 浏览器执行代码
xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
}
xmlhttp.onreadystatechange=function()
{
if (xmlhttp.readyState==4 && xmlhttp.status==200)
{
document.getElementById("myDiv").innerHTML=xmlhttp.responseText;
}
}
xmlhttp.open("GET","/try/ajax/ajax_info.txt",true);
xmlhttp.send();
}
首先定义了一个函数 loadXMLDoc()
,用于向服务器发送 HTTP 请求,并响应服务器端的响应。
创建 xmlhttp
对象。根据当前使用的浏览器不同,xmlhttp
对象使用的创建方法也有所不同。如果浏览器支持 XMLHttpRequest 对象,则可以使用 new XMLHttpRequest()
创建,如果不支持,则需要使用 ActiveXObject 对象。
在 onreadystatechange
方法中,定义事件发生时的处理函数。当 readyState
的值改变时,此事件就会被触发,表示从服务器接收到响应的某一部分数据。
open()
方法用于初始化请求,配置 xhr 对象。第一个参数为请求方式,第二个参数为请求 URL,第三个参数为是否异步执行。
send()
方法用于向服务器发送请求,如果是 GET 方法的请求,则 send() 方法接收 null 参数。如果是 POST 方法的请求,则需要将实际传递的数据作为参数传递给 send() 方法。
在响应到达时,检查接收到的 response 状态。如果状态码是 200
,表示请求成功,根据 XML 响应文档的格式,解析响应对象并将响应的内容插入到 HTML 页面上对应的 DOM 元素中。
总结:该段代码通过 XML HTTP 请求对象在不刷新页面的情况下向服务器发送即时的请求数据,并在响应到达时更新页面的相关元素,使网页操作更加流畅和快速。
xmlhttp.onreadystatechange=function()
{
if (xmlhttp.readyState==4 && xmlhttp.status==200)
{
document.getElementById("myDiv").innerHTML=xmlhttp.responseText;
}
}
这段代码是一个回调函数,通过 XMLHttpRequest 对象的 readyState 和 status 属性来判断异步请求的状态,当请求已完成且服务器返回状态码为200时,该函数会被调用。具体解释如下:
xmlhttp.onreadystatechange=function()
:定义了一个名为 onreadystatechange
的回调函数,该函数会在 readyState 属性发生改变时调用。
if (xmlhttp.readyState==4 && xmlhttp.status==200)
:判断 readyState 属性是否为 4,status 属性是否为 200。只有在 readyState 等于 4 且 status 等于 200 的情况下,才说明请求已经完成并响应成功。
document.getElementById("myDiv").innerHTML=xmlhttp.responseText
:如果请求已完成并响应成功,将请求返回的文本内容设置为具有 ID 为 “myDiv” 的元素的 innerHTML 属性,从而将响应内容更新到页面上。
上述过程用于将服务器返回的响应数据显示在页面上,实现 AJAX 数据交换的核心部分。这段代码在开发 AJAX 应用时是非常常见的代码段,其中 readyState 属性表示请求状态,status 属性表示请求返回的 HTTP 状态码。具体状态码和解释可以参考 HTTP 协议。
var xhr = new XMLHttpRequest();
xhr.onload = function () {
// 输出接收到的文字数据
document.getElementById("demo").innerHTML=xhr.responseText;
}
xhr.onerror = function () {
document.getElementById("demo").innerHTML="请求出错";
}
// 发送异步 GET 请求
xhr.open("GET", "https://www.runoob.com/try/ajax/ajax_info.txt", true);
xhr.send();
这段代码实现了通过 JavaScript 发送异步 GET 请求,并在请求完成后将接收到的数据渲染到 HTML 页面上。
代码分解如下:
首先创建一个 XMLHttpRequest 对象,通过 new XMLHttpRequest()
创建。
为 xhr
对象的 onload
事件绑定一个回调函数,在请求成功时被调用。回调函数中使用 document.getElementById("demo").innerHTML
将接收到的内容渲染到网页上指定的元素中,从而显示在用户的页面中。
在 xhr
对象的 onerror
事件中绑定一个错误处理函数,当请求出现错误时会触发该事件。
使用 xhr.open()
方法打开一个 URL,并配置请求的方法、URL 和是否异步等参数。参数 “GET” 表示使用 HTTP 的 GET 方法发起请求,第二个参数为请求 URL,最后一个参数表示是否使用异步方式发送请求。
使用 xhr.send()
方法发起异步请求,将返回的数据交由 onload
事件的回调函数处理。
将请求响应数据渲染到页面上的核心代码也已经被封装在回调函数中,可根据需要进行修改。这段代码片段通过 XMLHttpRequest 对象实现了通过 JavaScript 发送和接收异步 HTTP 请求的功能,从而实现了实时的数据交互和网页呈现,是现代 Web 开发中不可或缺的技术手段之一。
JS事件循环机制:
JavaScript 的事件循环(Event Loop)是一种用于处理异步操作的机制,通过不断地监听和处理消息队列中的事件,实现异步编程。JavaScript 引擎中存在一个消息队列,当什么事件(比如一个定时器超时或者一个 I/O 完成)出现后,引擎就会将事件加入消息队列中,然后继续执行其他代码,直到所有的同步任务执行完毕。当同步任务执行完毕后,引擎就不断地从消息队列中取出事件,并且执行对应的事件处理函数,从而实现了异步操作。整个过程被称为事件循环。
具体来说,事件循环的过程可以分为以下几个步骤:
执行所有的主线程同步代码,包括全局代码和函数体内的代码。
将所有产生的异步操作加入消息队列,异步操作包括定时器超时、网络请求、事件监听等。
当主线程空闲时,从消息队列取出一条消息(异步操作的回调函数)并执行,一次循环就是这样的过程。
重复上述步骤,直到消息队列为空。
需要注意的是,事件循环遵循一个非常重要的原则,即 “先进先出”(First In First Out,FIFO)原则,每次从消息队列中取出的事件都是最先加入队列的。另外,任何时刻,主线程中只会执行一个任务,也就说同步任务和异步任务不会同时执行,而只会根据事件循环的规则依次执行。
如果有连续的异步操作,它们都会被加入消息队列,然后一次性执行对应的回调函数。当这些异步操作被处理完毕后,主线程才会处理其他任务,这样可以避免过多的异步操作对主线程的影响,提高程序的响应速度和效率。
JavaScript 的事件循环机制因为实现简单、高效而得到了广泛的应用,特别是在 Node.js 等服务器端应用程序中,事实上 Node.js 就是建立在事件循环基础之上的一个异步 I/O 框架。
BOM:
BOM(Browser Object Model)是浏览器对象模型,用于描述浏览器窗口和窗口内容的对象结构。它提供了一组 API,允许开发者操作浏览器窗口、浏览器历史记录、屏幕、浏览器和用户之间的通信以及其他浏览器相关的信息和功能。
以下是一些基本的 BOM 操作:
window 对象:它是 BOM 中的顶层对象,表示整个浏览器窗口及其内容。通过 window 对象可以访问和控制浏览器窗口的大小、位置、标题等属性,还可以管理浏览器的历史记录、创建和关闭浏览器窗口等。
location 对象:它表示当前页面的 URL,是 window 对象的一个属性。通过 location 对象可以获取和设置页面的 URL,也可以进行页面跳转和刷新等操作。
navigator 对象:它包含了关于浏览器的信息,比如浏览器名称、版本、对应的操作系统信息等。通过 navigator 对象可以判断浏览器类型和版本,以便在代码中根据具体情况进行特定的处理。
screen 对象:它表示屏幕的信息和特性,比如屏幕的宽度和高度、颜色深度等。通过 screen 对象可以获取屏幕信息,从而调整页面布局和设计,以适应不同的设备和分辨率。
history 对象:它允许访问浏览器的历史记录,可以前进、后退等操作。history 对象保存了用户在浏览器中访问页面的所有 URL,开发者可以进行浏览器历史的管理,实现前端路由功能等。
上述操作只是 BOM API 的一部分,BOM 还提供了其他许多有用的 API,比如弹出框、定时器、拖拽和会话存储等等。使用这些 API 可以实现更加丰富和复杂的 BOM 操作,使开发者能准确地控制和管理浏览器的行为,提供更好的用户体验。
你可能感兴趣的:(javascript,前端,开发语言)
现代前端开发框架对比:React、Vue 和 Svelte 的选择指南
zhyoobo
vue.js react.js 前端
引言在当今快速发展的Web开发领域,前端框架的选择往往直接影响项目的开发效率、维护成本和用户体验。React、Vue和Svelte作为当前最受关注的三大框架,各自拥有独特的设计哲学与技术实现。本文将通过5000字的深度解析,从架构设计、开发体验、性能特征到生态系统四个维度进行全方位对比,并针对不同场景提供选型决策框架。无论您是初创团队的技术负责人,还是正在构建企业级应用的架构师,都能在此找到面向2
`fetch` 和 `axios`的前端使用区别
Studying_swz
blog 前端
欢迎访问的个人博客:https://swzbk.site/,加好友,拉你入福利群fetch和axios`是前端常用的两种HTTP客户端,以下是它们的核心区别及适用场景:一、本质区别特性fetchaxios类型浏览器原生API(部分环境需polyfill)第三方库(需通过npm/yarn安装)底层实现基于Promise基于Promise,封装了XMLHttpRequest二、核心功能对比1.请求与响
JavaScript typeof 运算符详解
wjs2024
开发语言
JavaScripttypeof运算符详解概述在JavaScript中,typeof是一个一元运算符,用于检测给定变量的数据类型。它是JavaScript中最常用的类型检查方法之一。本文将详细解释typeof运算符的用法、返回值以及其局限性。typeof运算符的用法typeof运算符后面跟一个要检查类型的变量或表达式。它不区分大小写,以下是其基本用法:leta=10;console.log(typ
如何实现一个apply函数?
风茫
Javascript javascript apply
在JavaScript中,apply是一个非常有用的方法,它允许你调用一个函数,并显式地指定该函数内部的this值。与call方法不同,apply方法接受参数的方式是一个数组或类数组对象。我们将手动实现一个类似apply的函数,以深入理解其工作原理。实现步骤1.定义myApply方法首先,我们需要在Function.prototype上定义一个新的方法myApply,这样所有的函数都可以调用它。F
LORA的魔法棒:在Stable Diffusion中挥洒注意力机制的优化咒语 ??
DTcode7
AI生产力 AI AIGC stable diffusion AI生产力 前沿
LORA的魔法棒:在StableDiffusion中挥洒注意力机制的优化咒语??欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。推荐:DTcode7的博客首页。一个做过前端开发的产品经理,经历过睿智产品的折磨导致脱发之后,励志要翻身农奴把歌唱,一边打入敌人内部一边持续提升自己,为我们广大开发同胞
policy_does_not_allow_file_overwrite
前端uniapp云存储
uniapp云开发阿里云上传文件uniapp的出现,让前端人员和后端人员实现了“全栈”的小梦想,当然,真正跨端开发的时候,还是会遇到不少的问题,比如今天我们的主角,uniCloud.uploadFile,一般来说,这个api文件名动态生成,云端返回文件存储的链接即可,但是,假如我们的产品是针对用户存储的,即用户的头像、私有文件、图片等具有唯一性,要单独开个目录存放的时候,同样的文件名上传会存在无法
JavaScript基础-事件基础
難釋懷
javascript 开发语言
在现代Web开发中,交互性是网站用户体验的重要组成部分。通过使用JavaScript,我们可以捕获用户的操作并作出响应,实现动态网页效果。这一切都离不开事件(Events)的概念。本文将介绍JavaScript中事件的基础知识,包括事件类型、如何绑定事件处理器以及一些常见的实践技巧。一、什么是事件?在浏览器环境中,事件是由浏览器生成的通知,表明某种情况已经发生。这些情况可能是用户交互(如点击按钮)
Python,C++开发餐饮后厨环境远程管理APP
Geeker-2025
python c++
开发一款用于**餐饮后厨环境远程管理**的App,结合Python和C++的优势,可以实现高效的后端数据处理、实时的环境监控以及用户友好的前端界面。以下是一个详细的开发方案,涵盖技术选型、功能模块、开发步骤等内容。##技术选型###后端(Python)-**编程语言**:Python-**Web框架**:Django或Flask-**数据库**:PostgreSQL或MySQL-**实时通信**:
在Ubuntu上安装MEAN Stack的4个步骤
ubuntu
在Ubuntu上安装MEANStack的4个步骤为:1.安装MEAN;2.安装MongoDB;3.安装NodeJS,Git和NPM;4.安装剩余的依赖项。什么是MEANStack?平均堆栈一直在很大程度上升高为基于稳健的基于JavaScript的开发堆栈。名称的意思是指其组件;MongoDB,ExpressJS,Angularjs和NodeJS。第1步:安装MEAN对于此安装,我们将在本指南中使用
深入解析:React中的信号组件与细粒度更新
引言在主流的前端开发框架中,无论是React、Vue还是Svelte,核心都是围绕着更高效地进行UI渲染展开的。为了实现高性能,基于DOM总是比较慢这个假设前提,其最核心的要解决的问题有两个:响应式更新细粒度更新为了将响应式更新、细粒度更新优化到极致,各种框架是八仙过海,各显神通。以最流行的React和Vue为例,首先两者均引入了VirtualDOM的概念。Vue的静态模板编译,通过编译时的静态分
SvelteKit 最新中文文档教程(6)—— 状态管理
前言Svelte,一个语法简洁、入门容易,面向未来的前端框架。从Svelte诞生之初,就备受开发者的喜爱,根据统计,从2019年到2024年,连续6年一直是开发者最感兴趣的前端框架No.1:Svelte以其独特的编译时优化机制著称,具有轻量级、高性能、易上手等特性,非常适合构建轻量级Web项目。为了帮助大家学习Svelte,我同时搭建了Svelte最新的中文文档站点。如果需要进阶学习,也可以入手我
初探 Threejs 物理引擎CANNON,解锁 3D 动态魅力
伶俜Monster
Threejs webgl 前端 3d threejs cannon.js
简介Cannon.js是一个基于JavaScript的物理引擎,它可以在浏览器中模拟物理效果。它支持碰撞检测、刚体动力学、约束等物理效果,可以用于创建逼真的物理场景和交互。参考文档官方示例原理Cannon.js使用了欧拉角来表示物体的旋转,而不是四元数。这使得它在处理旋转时更加直观和易于理解。Cannon.js还支持多种碰撞检测算法,包括离散碰撞检测和连续碰撞检测。Cannon.js还支持多种约束
【前端】面试八股文——输入URL到页面展示的过程
帅比九日
面试八股文 前端 面试 javascript
【前端】面试八股文——输入URL到页面展示的过程1.DNS解析当用户在浏览器中输入URL并按下回车时,首先需要将域名转换为IP地址,这个过程称为DNS(域名系统)解析。具体步骤如下:浏览器缓存:浏览器首先检查自身缓存中是否有该域名的IP地址。操作系统缓存:如果浏览器缓存中没有找到,浏览器会向操作系统请求DNS信息。路由器缓存:如果操作系统缓存也没有找到,操作系统会向本地网络中的路由器请求DNS信息
vue3+springboot电影院售票选座管理系统
qq_3166678367
spring boot 后端 java
目录本系统(已开发完成)->成品实现截图开发技术本系统支持的技术栈源码获取详细视频演示:文章底部获取博主联系方式!!!!本课题重点核心代码部分展示论文提纲来自指导老师帅的肯定视频演示/源码获取本系统(已开发完成)->成品实现截图开发技术关键技术实现:在Java的开发过程中,可以使用HTML、CSS、JavaScript等前端技术来实现系统的用户界面设计和交互功能。后端可以使用Java语言编写业务逻
深入理解 TypeScript 中的迭代器(Iterators)与生成器(Generators)
念九_ysl
typescript 前端 typescript
一、为什么需要迭代协议?在现代JavaScript/TypeScript开发中,我们经常需要处理各种集合型数据:数组、Map、Set甚至是自定义数据结构。ES6引入的迭代协议(IterationProtocols)正是为了解决统一遍历机制的问题。通过迭代器模式,我们可以:为不同的数据结构提供统一的访问接口实现惰性计算(LazyEvaluation)支持现代语言特性(for...of,扩展运算符等)
OpenTiny技术直播讲师招募:与开源同行,点亮技术影响力!
前端组件化低代码开源
OpenTiny企业级前端开发解决方案,正在寻找热爱分享的技术达人!加入我们的直播讲师团,与众多开发者一起分享你的经验,推动技术普惠,同时打造个人技术影响力!报名链接:https://www.wjx.cn/vm/tw7FOgC.aspx#
前端架构 —— 脚手架的本地调试方法
mask-li
前端
脚手架本地link标准流程链接本地脚手架:cdyour-cli-dirnpmlink在当前node全局依赖中创建一个脚手架并且指向文件目录,而且会创建一个可执行文件链接本地库文件:cdyour-lib-dirnpmlinkcdyour-cli-dirnpmlinkyour-lib取消链接本地库文件:cdyour-lib-dirnpmunlinkcdyour-cli-dirnpmunlinkyour
数据库 + Spring Boot + Vue 全栈交互逻辑详解
代码CC
Java项目-开发 spring boot vue.js mysql 数据库 开发语言
目录整体架构概述技术栈说明数据库设计规范SpringBoot后端架构Vue前端架构完整交互流程关键技术实现细节安全与性能优化异常处理机制整体架构概述graphTDA[Vue前端]-->|HTTP请求|B(SpringBoot后端)B-->|JDBC/ORM|C[(数据库)]C-->|返回数据|BB-->|JSON响应|AA-->|状态管理|D[VuexStore]B-->|缓存|E[Redis]B
使用 Vue 2.x + Element UI 搭建后台管理系统详解
不知名靓仔
vue.js ui 前端
引言Vue.js是一个非常流行的前端框架,而ElementUI是基于Vue2.x的一套完整的UI组件库,非常适合用来构建企业级的后台管理系统。本文将详细介绍如何使用Vue2.x和ElementUI来搭建一个后台管理系统,包括项目初始化、路由配置、状态管理、权限验证等关键步骤。vue2后台管理项目源码合集下载地址见最下方1.环境准备确保你的开发环境中已安装Node.js和npm。接下来,我们将使用V
Vue.js + Element UI 实战:手把手教你实现评论关键词过滤功能,新手必学!》 《前端开发必备技能:Vue 2 + Element UI 实现评论敏感词过滤,完整代码分享》 《新手友
南北极之间
vue.js ui 前端 敏感词 关键词 敏感词过滤
效果图【定制化开发服务,让您的项目领先一步】如有需求,直接私信留下您的联系方式。谢谢。我的邮箱:2351598671@qq.com以下是基于Vue2和ElementUI的评论关键词过滤功能实现,使用CDN引入Vue和ElementUI,方便在浏览器中直接预览。在线预览:Vue2+ElementUI实现评论关键词过滤功能目录需求场景技术选型实现步骤引入Vue2和ElementUI创建评论界面实现关键
deepseek 对于 Web 前端过去,现在,未来的看法!称未来可能不叫前端工程师...
CoderBin_
与deepseek的对话 前端
一、你对于过去的web前端有什么看法?对早期的Web前端开发(大致在2000年代至2010年代初),可以总结出以下几个关键看法:1.技术原始,但充满探索精神基础技术简单:主要依赖HTML、CSS和原生JavaScript,缺乏现代框架和工具链的支持。兼容性噩梦:不同浏览器(尤其是IE6/7)的渲染差异极大,开发者需要大量Hack代码(如条件注释、CSS滤镜)来适配。创新萌芽:AJAX(2005年)
【一起学Rust | Tauri2.0框架】基于 Rust 与 Tauri 2.0 框架实现跨平台二维码扫描应用
金枝玉叶9
程序员知识储备1 程序员知识储备2 程序员知识储备3 rust 开发语言 后端
《一起学Rust|Tauri2.0框架》是一个结合Rust语言与Tauri框架开发跨平台应用的教程。Tauri2.0是一个非常适合构建跨平台桌面应用的框架,它让开发者可以使用Web技术(如HTML、CSS、JavaScript)来创建前端,同时利用Rust编写后端逻辑,确保应用运行高效且轻量。在这个教程中,开发者可以学习如何使用Rust与Tauri2.0框架实现一个跨平台二维码扫描应用。具体步骤可
【含文档+PPT+源码】基于微信小程序农家乐美食餐厅预约推广系统
编程毕设
微信小程序 美食 小程序
项目介绍本课程演示的是一款基于微信小程序农家乐美食餐厅预约推广系统,主要针对计算机相关专业的正在做毕设的学生与需要项目实战练习的Java学习者。1.包含:项目源码、项目文档、数据库脚本、软件工具等所有资料2.带你从零开始部署运行本套系统3.该项目附带的源码资料可作为毕设使用该系统功能架构图如下:技术栈说明技术栈:后端:SpringBoot+Vue+ElementUI(后端是前后端分离的)前端:Un
【H2O2 | 软件开发】前端深拷贝的实现
过期的H2O2
【H2O2】全栈面试题 javascript 开发语言 ecmascript 前端
目录前言开篇语准备工作正文概述JSON方法递归其他结束语前言开篇语本系列为短篇,每次讲述少量知识点,无需一次性灌输太多的新知识点。该主题文章主要是围绕前端、全栈开发相关面试常见问题撰写的,希望对诸位有所帮助。如果您需要为面试八股文做准备,笔者建议重点关注加粗强调部分,它们是概念中的关键词。准备工作软件:【参考版本】VisualStudioCode系统版本:Win10/11正文概述概括地来说,前端实
能否在编辑器中一键导入Word文档?
2501_90646763
umeditor粘贴word ueditor粘贴word ueditor复制word ueditor上传word图片 ueditor导入word ueditor导入pdf ueditor导入ppt
要求:开源,免费,技术支持编辑器:百度ueditor前端:vue2,vue3,vue-cli,react,html5用户体验:Ctrl+V快捷键操作功能:导入Word,导入Excel,导入PPT(PowerPoint),导入PDF,复制粘贴word,导入微信公众号内容,web截屏平台:Windows,macOS,Linux,RedHat,CentOS,Ubuntu,中标麒麟,银河麒麟,统信UOS,
【一起学Rust | Tauri2.0框架】基于 Rust 与 Tauri 2.0 框架实现生物识别(指纹识别)应用
广龙宇
Tauri2应用开发 一起学Rust rust 开发语言 后端
前言Tauri,作为一个新兴的跨平台应用开发框架,允许开发者使用Web前端技术构建界面,并利用Rust的高性能和安全性编写后端逻辑。这种架构巧妙地结合了Web的灵活性和原生应用的性能,为开发者提供了一种构建高效、跨平台应用的全新选择。而生物识别技术,如指纹识别、面部识别等,则为应用安全提供了更高级别的保障。将生物识别技术集成到Tauri应用中,可以提升用户体验,增强应用安全性。试想一下,用户只需轻
前端 Blob 详解
yqcoder
前端 javascript 开发语言
前端Blob详解1.什么是Blob?Blob(BinaryLargeObject)表示二进制大对象,用于存储二进制数据。在前端开发中,Blob常用于处理文件、图像、视频等二进制数据。2.创建Blob可以通过Blob构造函数创建Blob对象。constblob=newBlob(array,options);array:数组,包含要放入Blob的数据。可以是字符串、ArrayBuffer、ArrayB
使用AI python实现将前端angularjs工程转换成vue工程案例
银行金融科技
前端 人工智能 python
以下是一个结合Python和AI技术实现AngularJS到Vue工程迁移的完整案例,包含关键转换策略和代码实现:案例背景目标:将使用AngularJS1.x的电商后台管理系统转换为Vue3工程,主要转换以下部分:模板语法控制器逻辑服务依赖路由配置状态管理原始AngularJS代码片段:javascript//app.jsangular.module('app',['ui.router']).co
【从零开始:如何用Vue3打造响应式个人博客网站】
小怪兽9699
vue.js javascript ecmascript
前言在前端开发领域,Vue.js是一个非常流行且强大的框架。本文将详细介绍如何使用Vue3构建一个完整的响应式个人博客网站。无论你是初学者还是有一定经验的开发者,本文都将为你提供详细的步骤和代码示例。1.环境搭建首先,确保你已经安装了Node.js和npm。然后,全局安装VueCLI:npminstall-g@vue/cli2.项目初始化使用VueCLI创建一个新的Vue项目:vuecreatem
python爬虫 Selenium库安装与使用
范哥来了
python 爬虫 selenium
Selenium是一个强大的自动化测试工具,它也可以用来进行网页抓取。与传统的请求库(如requests)不同,Selenium可以模拟真实用户的行为,比如点击按钮、填写表单等,这对于那些依赖于JavaScript动态加载内容的网站来说非常有用。安装Selenium首先确保你的环境中已经安装了Python和pip。然后通过pip安装Selenium:pipinstallselenium如果你使用的
Dom
周华华
JavaScript html
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml&q
【Spark九十六】RDD API之combineByKey
bit1129
spark
1. combineByKey函数的运行机制
RDD提供了很多针对元素类型为(K,V)的API,这些API封装在PairRDDFunctions类中,通过Scala隐式转换使用。这些API实现上是借助于combineByKey实现的。combineByKey函数本身也是RDD开放给Spark开发人员使用的API之一
首先看一下combineByKey的方法说明:
msyql设置密码报错:ERROR 1372 (HY000): 解决方法详解
daizj
mysql 设置密码
MySql给用户设置权限同时指定访问密码时,会提示如下错误:
ERROR 1372 (HY000): Password hash should be a 41-digit hexadecimal number;
问题原因:你输入的密码是明文。不允许这么输入。
解决办法:用select password('你想输入的密码');查询出你的密码对应的字符串,
然后
路漫漫其修远兮 吾将上下而求索
周凡杨
学习 思索
王国维在他的《人间词话》中曾经概括了为学的三种境界古今之成大事业、大学问者,罔不经过三种之境界。“昨夜西风凋碧树。独上高楼,望尽天涯路。”此第一境界也。“衣带渐宽终不悔,为伊消得人憔悴。”此第二境界也。“众里寻他千百度,蓦然回首,那人却在灯火阑珊处。”此第三境界也。学习技术,这也是你必须经历的三种境界。第一层境界是说,学习的路是漫漫的,你必须做好充分的思想准备,如果半途而废还不如不要开始。这里,注
Hadoop(二)对话单的操作
朱辉辉33
hadoop
Debug:
1、
A = LOAD '/user/hue/task.txt' USING PigStorage(' ')
AS (col1,col2,col3);
DUMP A;
//输出结果前几行示例:
(>ggsnPDPRecord(21),,)
(-->recordType(0),,)
(-->networkInitiation(1),,)
web报表工具FineReport常用函数的用法总结(日期和时间函数)
老A不折腾
finereport 报表工具 web开发
web报表工具FineReport常用函数的用法总结(日期和时间函数)
说明:凡函数中以日期作为参数因子的,其中日期的形式都必须是yy/mm/dd。而且必须用英文环境下双引号(" ")引用。
DATE
DATE(year,month,day):返回一个表示某一特定日期的系列数。
Year:代表年,可为一到四位数。
Month:代表月份。
c++ 宏定义中的##操作符
墙头上一根草
C++
#与##在宏定义中的--宏展开 #include <stdio.h> #define f(a,b) a##b #define g(a) #a #define h(a) g(a) int main() { &nbs
分析Spring源代码之,DI的实现
aijuans
spring DI 现 源代码
(转)
分析Spring源代码之,DI的实现
2012/1/3 by tony
接着上次的讲,以下这个sample
[java]
view plain
copy
print
for循环的进化
alxw4616
JavaScript
// for循环的进化
// 菜鸟
for (var i = 0; i < Things.length ; i++) {
// Things[i]
}
// 老鸟
for (var i = 0, len = Things.length; i < len; i++) {
// Things[i]
}
// 大师
for (var i = Things.le
网络编程Socket和ServerSocket简单的使用
百合不是茶
网络编程基础 IP地址端口
网络编程;TCP/IP协议
网络:实现计算机之间的信息共享,数据资源的交换
协议:数据交换需要遵守的一种协议,按照约定的数据格式等写出去
端口:用于计算机之间的通信
每运行一个程序,系统会分配一个编号给该程序,作为和外界交换数据的唯一标识
0~65535
查看被使用的
JDK1.5 生产消费者
bijian1013
java thread 生产消费者 java多线程
ArrayBlockingQueue:
一个由数组支持的有界阻塞队列。此队列按 FIFO(先进先出)原则对元素进行排序。队列的头部 是在队列中存在时间最长的元素。队列的尾部 是在队列中存在时间最短的元素。新元素插入到队列的尾部,队列检索操作则是从队列头部开始获得元素。
ArrayBlockingQueue的常用方法:
JAVA版身份证获取性别、出生日期及年龄
bijian1013
java 性别 出生日期 年龄
工作中需要根据身份证获取性别、出生日期及年龄,且要还要支持15位长度的身份证号码,网上搜索了一下,经过测试好像多少存在点问题,干脆自已写一个。
CertificateNo.java
package com.bijian.study;
import java.util.Calendar;
import
【Java范型六】范型与枚举
bit1129
java
首先,枚举类型的定义不能带有类型参数,所以,不能把枚举类型定义为范型枚举类,例如下面的枚举类定义是有编译错的
public enum EnumGenerics<T> { //编译错,提示枚举不能带有范型参数
OK, ERROR;
public <T> T get(T type) {
return null;
【Nginx五】Nginx常用日志格式含义
bit1129
nginx
1. log_format
1.1 log_format指令用于指定日志的格式,格式:
log_format name(格式名称) type(格式样式)
1.2 如下是一个常用的Nginx日志格式:
log_format main '[$time_local]|$request_time|$status|$body_bytes
Lua 语言 15 分钟快速入门
ronin47
lua 基础
-
-
单行注释
-
-
[[
[多行注释]
-
-
]]
-
-
-
-
-
-
-
-
-
-
-
1.
变量 & 控制流
-
-
-
-
-
-
-
-
-
-
num
=
23
-
-
数字都是双精度
str
=
'aspythonstring'
java-35.求一个矩阵中最大的二维矩阵 ( 元素和最大 )
bylijinnan
java
the idea is from:
http://blog.csdn.net/zhanxinhang/article/details/6731134
public class MaxSubMatrix {
/**see http://blog.csdn.net/zhanxinhang/article/details/6731134
* Q35
求一个矩阵中最大的二维
mongoDB文档型数据库特点
开窍的石头
mongoDB文档型数据库特点
MongoDD: 文档型数据库存储的是Bson文档-->json的二进制
特点:内部是执行引擎是js解释器,把文档转成Bson结构,在查询时转换成js对象。
mongoDB传统型数据库对比
传统类型数据库:结构化数据,定好了表结构后每一个内容符合表结构的。也就是说每一行每一列的数据都是一样的
文档型数据库:不用定好数据结构,
[毕业季节]欢迎广大毕业生加入JAVA程序员的行列
comsci
java
一年一度的毕业季来临了。。。。。。。。
正在投简历的学弟学妹们。。。如果觉得学校推荐的单位和公司不适合自己的兴趣和专业,可以考虑来我们软件行业,做一名职业程序员。。。
软件行业的开发工具中,对初学者最友好的就是JAVA语言了,网络上不仅仅有大量的
PHP操作Excel – PHPExcel 基本用法详解
cuiyadll
PHP Excel
导出excel属性设置//Include classrequire_once('Classes/PHPExcel.php');require_once('Classes/PHPExcel/Writer/Excel2007.php');$objPHPExcel = new PHPExcel();//Set properties 设置文件属性$objPHPExcel->getProperties
IBM Webshpere MQ Client User Issue (MCAUSER)
darrenzhu
IBM jms user MQ MCAUSER
IBM MQ JMS Client去连接远端MQ Server的时候,需要提供User和Password吗?
答案是根据情况而定,取决于所定义的Channel里面的属性Message channel agent user identifier (MCAUSER)的设置。
http://stackoverflow.com/questions/20209429/how-mca-user-i
网线的接法
dcj3sjt126com
一、PC连HUB (直连线)A端:(标准568B):白橙,橙,白绿,蓝,白蓝,绿,白棕,棕。 B端:(标准568B):白橙,橙,白绿,蓝,白蓝,绿,白棕,棕。 二、PC连PC (交叉线)A端:(568A): 白绿,绿,白橙,蓝,白蓝,橙,白棕,棕; B端:(标准568B):白橙,橙,白绿,蓝,白蓝,绿,白棕,棕。 三、HUB连HUB&nb
Vimium插件让键盘党像操作Vim一样操作Chrome
dcj3sjt126com
chrome vim
什么是键盘党?
键盘党是指尽可能将所有电脑操作用键盘来完成,而不去动鼠标的人。鼠标应该说是新手们的最爱,很直观,指哪点哪,很听话!不过常常使用电脑的人,如果一直使用鼠标的话,手会发酸,因为操作鼠标的时候,手臂不是在一个自然的状态,臂肌会处于绷紧状态。而使用键盘则双手是放松状态,只有手指在动。而且尽量少的从鼠标移动到键盘来回操作,也省不少事。
在chrome里安装 vimium 插件
MongoDB查询(2)——数组查询[六]
eksliang
mongodb MongoDB查询数组
MongoDB查询数组
转载请出自出处:http://eksliang.iteye.com/blog/2177292 一、概述
MongoDB查询数组与查询标量值是一样的,例如,有一个水果列表,如下所示:
> db.food.find()
{ "_id" : "001", "fruits" : [ "苹
cordova读写文件(1)
gundumw100
JavaScript Cordova
使用cordova可以很方便的在手机sdcard中读写文件。
首先需要安装cordova插件:file
命令为:
cordova plugin add org.apache.cordova.file
然后就可以读写文件了,这里我先是写入一个文件,具体的JS代码为:
var datas=null;//datas need write
var directory=&
HTML5 FormData 进行文件jquery ajax 上传 到又拍云
ileson
jquery Ajax html5 FormData
html5 新东西:FormData 可以提交二进制数据。
页面test.html
<!DOCTYPE>
<html>
<head>
<title> formdata file jquery ajax upload</title>
</head>
<body>
<
swift appearanceWhenContainedIn:(version1.2 xcode6.4)
啸笑天
version
swift1.2中没有oc中对应的方法:
+ (instancetype)appearanceWhenContainedIn:(Class <UIAppearanceContainer>)ContainerClass, ... NS_REQUIRES_NIL_TERMINATION;
解决方法:
在swift项目中新建oc类如下:
#import &
java实现SMTP邮件服务器
macroli
java 编程
电子邮件传递可以由多种协议来实现。目前,在Internet 网上最流行的三种电子邮件协议是SMTP、POP3 和 IMAP,下面分别简单介绍。
◆ SMTP 协议
简单邮件传输协议(Simple Mail Transfer Protocol,SMTP)是一个运行在TCP/IP之上的协议,用它发送和接收电子邮件。SMTP 服务器在默认端口25上监听。SMTP客户使用一组简单的、基于文本的
mongodb group by having where 查询sql
qiaolevip
每天进步一点点 学习永无止境 mongo 纵观千象
SELECT cust_id,
SUM(price) as total
FROM orders
WHERE status = 'A'
GROUP BY cust_id
HAVING total > 250
db.orders.aggregate( [
{ $match: { status: 'A' } },
{
$group: {
Struts2 Pojo(六)
Luob.
POJO strust2
注意:附件中有完整案例
1.采用POJO对象的方法进行赋值和传值
2.web配置
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5"
xmlns="http://java.sun.com/xml/ns/javaee&q
struts2步骤
wuai
struts
1、添加jar包
2、在web.xml中配置过滤器
<filter>
<filter-name>struts2</filter-name>
<filter-class>org.apache.st