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,前端,开发语言)
Angular与ASP.NET Core:解决表单数据传输问题
t0_54coder
编程问题解决手册 angular.js asp.net 前端 个人开发
在现代Web开发中,Angular和ASP.NETCore是两个非常流行的框架,它们的组合可以构建出高效且易于维护的应用程序。然而,在使用Angular发送表单数据到ASP.NETCoreAPI时,开发者常常会遇到一些数据传输的问题。今天我们就来探讨如何正确地处理这种情况,并通过实际例子来展示解决方案。问题描述假设我们有一个Angular前端应用,需要将一个包含文件和其他数据的表单提交到ASP.N
2021-最新Web前端经典面试试题及答案-史上最全前端面试题(含答案)---React篇
圆白菜和大白菜
前端 react 大前端 react
★★★React事件绑定原理★★★React中的setState缺点是什么呢★★★React组件通信如何实现★★★类组件和函数组件的区别★★★请你说说React的路由是什么?★★★★★React有哪些性能优化的手段?★★★★Reacthooks用过吗,为什么要用?★★★★虚拟DOM的优劣如何?实现原理?★★★★React和Vue的diff时间复杂度从O(n^3)优化到O(n),那么O(n^3)和O
深入浅出:序列化与反序列化的全面解析
进击的小白菜
一些开发常识 开发语言 开发常识
文章目录1.引言2.什么是序列化?2.1为什么需要序列化?3.什么是反序列化?3.1反序列化的重要性4.序列化与反序列化的实现4.1JSON(JavaScriptObjectNotation)4.2XML(eXtensibleMarkupLanguage)4.3ProtocolBuffers(Protobuf)4.4MessagePack5.安全性考虑6.性能优化7.结论附录:常见问题解答Q1:什
Android :实现登录功能的思路
前期后期
android
android的登录功能和前端一样,需要保存登录的用户信息。创建一个工具类//用户工具类,用于管理用户登录状态和用户信息objectAppUserUtil{//常量定义privateconstvalLOGGED_FLAG="logged_flag"//登录状态的键名privateconstvalUSER_INFO="user_info"//用户信息的键名privateconstvalTAG="Ap
Electron打包文件生成.exe文件打开即可使用
糕冷小美n
electron javascript 前端
1、Electron打包,包括需要下载的内容和环境配置步骤注意:Electron是一个使用JavaScript、HTML和CSS构建跨平台桌面应用程序的框架首先需要电脑环境有Node.js和npm我之前的文章有关nvm下载node的说明也可以去官网下载检查是否有node和npm环境命令node-vnpm-v输出版本号,说明安装成功2、创建Electron项目2.1创建项目目录打开命令行工具,创建一
JavaScript基础-事件对象
難釋懷
javascript 开发语言
在现代Web开发中,事件处理是实现动态和交互式网页的核心。当用户与页面进行交互时(如点击按钮、提交表单等),浏览器会生成相应的事件。为了有效地响应这些事件,JavaScript提供了事件对象,它包含了关于事件的详细信息。本文将详细介绍事件对象的概念、重要的属性和方法,并通过实例展示其应用场景。一、什么是事件对象?每当一个事件被触发时,浏览器都会创建一个事件对象,这个对象包含了该事件的所有相关信息,
Three.js世界中的三要素:场景、相机、渲染器
Front_Yue
3D技术实践指南 javascript three.js 3d
一、Three.js简介Three.js是一个基于WebGL的JavaScript库,它允许开发者在网页上创建和显示复杂的3D图形和动画,而无需用户安装任何额外的插件或软件。Three.js在Web开发中的地位非常重要,它通过提供简单直观的API,极大地降低了3D图形开发的门槛,使得开发者可以更专注于实现创意。Three.js广泛应用于游戏开发、虚拟现实、数据可视化、艺术创作等多个领域。二、场景:
PHP框架为基础的购物平台设计思路分步骤说明
星糖曙光
后端语言(node javascript vue等等) 学习 课程设计 vue.js python php
以下是以PHP框架为基础的购物平台设计思路分步骤说明:一、技术选型阶段技术栈={后端框架:Laravel/Yii2(提供ORM、路由、中间件支持)前端框架:Vue.js/React(可选SPA方案)数据库:MySQL8.0+(事务型数据存储)缓存:Redis(会话/商品缓存)队列:RabbitMQ(异步处理订单)\text{技术栈}=\begin{cases}后端框架:Laravel/Yii2(提
致现在的我与未来的我:编程长河中的摆渡手札
星糖曙光
后端语言(node javascript vue等等) 笔记 学习 深度学习 人工智能 网络
致现在的我与未来的我:编程长河中的摆渡手札一、技术积累:从萤火微光到星河初现(约3000字)前端的启蒙:HTML/CSS与"所见即所得"的魔法“代码是诗,但诗未必能成为产品”,初学编程时,我如《禅与摩托车维修艺术》中追寻"良质"的探索者,在W3School的教程中笨拙地敲下第一行。记得仿写京东首页时,一个浮动布局的错位让我通宵调试,最终发现竟是未闭合的标签——这让我想起《代码大全》中的警示:“计算
若依集成knife4j实现swagger文档增强
Roc-xb
knife4j
knife4j的前身是swagger-bootstrap-ui,为了契合微服务的架构发展,由于原来swagger-bootstrap-ui采用的是后端Java代码+前端Ui混合打包的方式,在微服务架构下显的很臃肿,因此项目正式更名为knife4j。目录一、单体版本1、ruoyi-admin\pom.xml模块添加整合依赖2、SwaggerController.java修改跳转访问地址二、前后端分离
C++在线OJ负载均衡项目
平凡的小y
c++ 开发语言
1.演示项目项目源码链接:2.项目所用技术和开发环境所用技术C++STL标准库Boost准标准库(字符串切割)cpp-httplib第三方开源网络库ctemplate第三方开源前端网页渲染库jsoncpp第三方开源序列化、反序列化库负载均衡设计MySQLCconnectAce前端在线编辑器html/css/js/jquery/ajax开发环境Ubuntu云服务器vscodeMysqlWorkben
JavaScript基础-DOM的一些基本常用语法
Southern Wind
JavaScript javascript
总结了一下JS一直到DOM中所用的单词的用法输入方式:window.prompt('请输入数据');输出方式:1、window.alert('HelloJavaScript');2、console.log输出到控制台3、输出数据到页面document.write('hello')JavaScript数据类型1、基本类型string:字符型number:数值型boolean:布尔型2、特殊类型und
JavaScript基础-删除事件(解绑事件)
難釋懷
javascript 前端 开发语言
在现代Web开发中,动态地添加和移除事件处理器是构建交互式网页的关键技能之一。虽然添加事件处理器相对直观,但了解如何有效地移除或“解绑”这些处理器同样重要。这不仅有助于优化性能,还能防止潜在的内存泄漏问题。本文将介绍几种方法来删除JavaScript中的事件处理器,并探讨它们的应用场景及最佳实践。一、为什么需要删除事件?随着页面复杂度的增加,不恰当地管理事件处理器可能会导致性能下降或出现意外行为。
rocketmq-client 4.3.0 在springboot中的使用
Myueye
JAVA java
rocketmq-client4.3.0在springboot中的使用1、导入依赖2、配置文件属性3、编写配置类4、使用测试5、结果5.1RocketMQ后台显示5.2前端页面5.3后端后台1、导入依赖org.apache.rocketmqrocketmq-client4.3.02、配置文件属性mq.nameserverAdd=ip地址:9876mq.topic=top1(topic名称)mq.p
六十天前端强化训练之第二十九天之深入解析:从零构建企业级Vue项目的完整指南
编程星辰海
# 前端 前端 Vue项目
=====欢迎来到编程星辰海的博客讲解======看完可以给一个免费的三连吗,谢谢大佬!目录一、Vite核心原理与开发优势二、项目创建深度解析三、配置体系深度剖析四、企业级项目架构设计五、性能优化实战六、开发提效技巧七、质量保障体系八、扩展阅读推荐一、Vite核心原理与开发优势1.1为什么选择Vite?Vite采用现代浏览器原生ES模块系统(NativeESM)作为开发服务器,颠覆了传统打包工具的
HTTP核心知识
Sean2077
HTTP http
理解HTTP协议是优化Web应用性能、调试问题和实现高效通信的基础。以下是前端开发者需要掌握的核心HTTP知识:1.HTTP基础概念请求与响应模型理解客户端(浏览器)发送HTTP请求,服务器返回HTTP响应的基本流程。HTTP方法(Methods)GET:获取资源(幂等操作)POST:提交数据(非幂等)PUT:更新资源DELETE:删除资源HEAD:仅获取响应头OPTIONS:查看服务器支持的通信
前端性能优化-知识点
甲亿
前端 性能优化
Web性能优化意义1.减少整体加载时间:减小文件体积、减少HTTP请求、使用预加载。2.使网站尽快可用:仅加载首屏内容,其他内容根据需要进行懒加载。3.平滑和交互性:使用CSS替代JS动画、减少UI重绘。4.加载表现形式:使用加载动画、进度条、骨架屏等过渡信息,让用户感觉到页面加载更快。5.性能监测:性能指标、性能测试、性能监控持续优化等Web性能指标RAIL性能模型Response(响应):快速
JavaScript 性能优化实战:优化循环结构提升效率
deying0865423
javascript 开发语言
目录一、理解循环的性能损耗二、减少循环迭代次数(一)缓存数组长度(二)提前终止循环三、优化循环内部操作(一)避免在循环内执行复杂计算(二)减少DOM操作四、选择合适的循环类型(一)for循环与while循环的选择(二)for...in与for...of的使用场景在JavaScript编程中,循环结构是实现重复执行任务的基础工具。然而,不当的循环使用常常会导致性能瓶颈,特别是在处理大量数据时,循环的
【网络安全 | 漏洞挖掘】通过控制台调试实现登录
秋说
web安全 漏洞挖掘
未经许可,不得转载。文章目录正文在安全测试过程中,我留意到一个特殊现象:当登录出现错误时,相关请求包并不经过BurpSuite。那么此时账号密码是储存在前端的,我通过调试即可实现登录管理员账户。正文由于系统设定,输入错误的账号和密码会弹出“账号密码错误”的提示。基于此,我在代码中“账号密码错误”提示的相关位置设置了断点,截图如下:随后,我刷新浏览器页面,输入错误的账号和密码,然后点击登录按钮,操作
开发语言漫谈-脚本语言
大道不孤,众行致远
技术杂谈 开发语言
前面讲的都称之为编程语言,就是做系统用的。还有一大类称之为脚本语言的语言,这类语言数量极多,大部分程序员用不上,也不关心,这是系统维护人员专用的邻域。这个定义其实也很不准确,不必较真。更准确的来讲,能直接运行的文本都可以称之为脚本语言,按这个标准,python也是。但是python同样用于做系统。我们今天讲的脚本语言纯粹用于系统维护邻域。我们重点将编程语言,对这些脚本语言就打包一起介绍了bash:
vant官网-vant ui 首页-移动端Vue组件库
embelfe_segge
面试 学习路线 阿里巴巴 android 前端 后端
Vant是有赞前端团队开源的移动端vue组件库,适用于手机端h5页面。鉴于百度搜索不到vant官方网址,分享一下vant组件库官网地址,方便新手使用vant官网地址https://vant-contrib.gitee.io/vant/#/zh-CN/通过npm安装在现有项目中使用Vant时,可以通过npm或yarn进行安装:#Vue2项目,安装Vant2:npmivant-S#Vue3项目,安装V
可视化埋点在React Native中的实践
Shopee技术团队
前端 react native 前端 react.js
本文首发于微信公众号“Shopee技术团队”。1.背景笔者所在团队为Shopee的本地生活前端团队,用户可以在我们的平台购买优惠券,然后去线下门店使用。随着用户规模不断增加,研究用户行为数据可以更好地指导产品功能设计,提供更加优秀的用户体验。用户行为数据的研究首先涉及到如何采集,即我们常说的“埋点”。一直以来,我们项目中的埋点都采用代码埋点,每次新增埋点往往是一些重复性的工作,且需要重新发布代码才
去哪儿网 ReactNative 跨小程序多端方案介绍
去哪儿网技术沙龙
大前端 前端 react native 小程序
1前言qrn-remax-unir是由去哪儿网前端技术团队实现的一套将RN适配到小程序端的跨端组件,通过该组件库可快速方便的将RN源代码直接运行到小程序端。方案参考了react-native-web的适配方案,使用remax框架来实现适配组件库并达到适配多小程序的目的。和react-native-web一样,它对RN源代码侵入度低,并且调试和替换组件相当方便。方案来自于社区,我们只是合理的应用用来
.net 4.0 webServices 的使用,从前端到后端,代码超全。
静静香甜
.net 前端 后端 c#
1、创建webServices:创建之后会生成两个文件,分别是:SecurityWebService.asmx,SecurityWebService.asmx.csSecurityWebService.asmx代码:SecurityWebService.asmx.cs代码:usingNewtonsoft.Json;usingNewtonsoft.Json.Linq;usingSystem;usin
HTML+CSS案例展示(CSS3D效果旋转相册)
hacalili
html css 前端 css3
参考来源:黑马程序员pink老师前端入门教程,零基础必看的h5(html5)+css3+移动端前端视频教程_哔哩哔哩_bilibili效果展示:总结:transform:translate(x,y)rotate(180deg)scale()...顺序对最后的效果有影响,需要根据需求安排位移和其他属性的顺序;实现暂停动画效果:animation-play-state:paused;经常和鼠标经过等其
COMP 315: Cloud Computing for E-Commerce
W_X_99515681
开发语言
Assignment1:JavascriptCOMP315:CloudComputingforE-CommerceFebruary20251IntroductionAcommontaskwhenbackendprogrammingisdatacleaning,whichistheprocessoftakinganinitialdatasetthatmaycontainerroneousorinco
前端请求全面解析:AJAX、Axios 与 Fetch 的使用详解与代码示例
jiajia651304
前端 ajax javascript
前端请求全面解析:AJAX、Axios与Fetch的使用详解与代码示例前端请求全面解析:AJAX、Axios与Fetch的使用详解与代码示例1.AJAX——传统的异步请求1.1基本用法示例1.2AJAX特点2.FetchAPI——现代化请求方案2.1基本用法示例2.2Fetch特点3.Axios——第三方HTTP请求库3.1安装Axios3.2基本用法示例3.3Axios特点4.总结前端请求全面解
编程内容简述!
恶霸不委屈
开发语言 青少年编程 汇编 java python
编程是指通过计算机语言来开发软件、程序和应用的过程,通常通过编写一系列的指令,来让计算机完成特定的任务。编程可以涉及多个领域和技术,以下是一些主要的编程内容:1.编程语言编程语言是程序员与计算机进行沟通的桥梁,不同的编程语言适用于不同的任务。常见的编程语言有:Python:简单易学,适用于数据分析、人工智能、网页开发等。JavaScript:网页开发中不可或缺的语言,用于动态网页和前端开发。Jav
Axios 和 跨域 这两个概念
PLJJ685
前后端分离的仓库管理系统 前端
1.Axios是什么?Axios是一个用于发送网络请求的工具,类似于浏览器自带的fetch,但更强大、更易用。在前端(Vue)中,我们通常用Axios来向后端(SpringBoot)请求数据。举个例子:假设你在一个仓储系统中,前端需要从后端获取商品库存信息。这时,前端就可以用Axios发送一个请求,比如:axios.get('/api/inventory').then(response=>{con
麦谷科技-前端面经
dancehole
科技 前端
base:车联网,uniapp小程序。面试时间:2025-03月(应届)投递岗位:前端(转正实习)面试流程比较短,可能是因为经历不匹配或者第一题答的不好Tvt时间:上午约一面,下午约二面,隔一天(第三天)约hr面。整体流程还是很快的。HR面去公司线下参观了,整体地理环境也很nice。最后因为个人原因没有入职,也是相当可惜一面自我介绍&BG:两端实习,介绍了一下自己的工作。面试官表示不太感兴趣(问了
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