【前端知识】es6基础语法介绍

ES6基础语法介绍

    • 概述
      • 1. 变量声明:let 和 const
      • 2. 模板字符串
      • 3. 解构赋值
      • 4. 箭头函数
      • 5. 默认参数值
      • 6. 类(Classes)
      • 7. 模块
      • 8. 扩展运算符(Spread Operator)
      • 9. 对象字面量增强
      • 10. 符号(Symbols)
      • 11. 迭代器(Iterators)和生成器(Generators)
      • 12. 承诺(Promises)
    • 基本数据类型
      • 1. 字符串(String)
      • 2. 数字(Number)
      • 3. 布尔值(Boolean)
      • 4. 未定义(Undefined)
      • 5. 空值(Null)
      • 6. 符号(Symbol)
      • 7. 对象(Object)
      • 8. 数组(Array)
      • 9. 函数(Function)
      • 10. 整数(BigInt)
    • 对象属性迭代
      • 对象属性迭代
        • 1. `for...in` 循环
        • 2. `Object.keys()`
        • 3. `Object.values()`
        • 4. `Object.entries()`
        • 5. `Reflect.ownKeys()`
        • 6. 使用 `Symbol` 属性
        • 7. 使用 `for...of` 循环和 `Map` 迭代器
    • 数组迭代
      • 1. `for` 循环
      • 2. `for...of` 循环
      • 3. `forEach` 方法
      • 4. `map` 方法
      • 5. `filter` 方法
      • 6. `reduce` 方法
      • 7. `some` 方法
      • 8. `every` 方法
      • 9. `find` 方法
      • 10. `findIndex` 方法
      • 11. `keys` 方法
      • 12. `values` 方法
      • 13. `entries` 方法
      • this指代
      • 全局上下文
      • 函数调用
      • 对象方法
      • 构造函数
      • 箭头函数
      • `bind`、`call`、`apply` 方法
      • DOM 事件处理
      • 类方法
    • 箭头函数和常规函数在this上有何不同?
      • 常规函数(函数表达式和函数声明)
      • 箭头函数
      • 总结

概述

ECMAScript 6(简称 ES6)是 JavaScript 语言的一个重要版本,它引入了许多新的语法和特性,使得 JavaScript 更加强大和易于使用。以下是一些基础的 ES6 语法及其详细说明:

1. 变量声明:let 和 const

  • let:用于声明一个块作用域的局部变量,并且可以选择性地进行初始化。

    let message = "Hello, ES6!";
    let count;
    
  • const:用于声明一个块作用域的常量,必须在声明时进行初始化,且声明后不能被重新赋值。

    const pi = 3.14159;
    

2. 模板字符串

模板字符串使用反引号(`)定义,允许嵌入表达式,并且可以进行多行定义。

let name = "Kimi";
let greeting = `Hello, ${name}!`;
console.log(greeting); // 输出:Hello, Kimi!let multiLine = `This is amulti-line string.
`;

3. 解构赋值

解构赋值允许你从数组或对象中提取数据,并赋值给新的变量。

  • 数组解构

    let scores = [80, 90, 70];
    let [score1, score2, score3] = scores;
    
  • 对象解构

    let person = { name: "Alice", age: 25 };
    let { name, age } = person;
    

4. 箭头函数

箭头函数提供了一种更简洁的方式来写函数表达式。

let add = (a, b) => a + b;

如果函数体只有一条语句,可以省略 return 关键字和花括号。

let multiply = (a, b) => a * b;

5. 默认参数值

函数参数可以设置默认值,当函数被调用时没有提供该参数,则使用默认值。

function greet(name = "Guest") {console.log(`Hello, ${name}!`);
}

6. 类(Classes)

ES6 引入了 class 语法,使得定义类和基于类的继承更加直观和简洁。

class Rectangle {constructor(width, height) {this.width = width;this.height = height;}get area() {return this.width * this.height;}set width(value) {if (value > 0) this._width = value;}set height(value) {if (value > 0) this._height = value;}
}

7. 模块

ES6 引入了模块功能,允许你创建可复用的代码块,每个模块都有自己的作用域。

// math.js
export function add(a, b) {return a + b;
}// app.js
import { add } from './math.js';
console.log(add(2, 3)); // 输出:5

8. 扩展运算符(Spread Operator)

扩展运算符 ... 允许一个表达式被展开在需要多个参数(函数调用)或多个元素(数组字面量)或多个键值对(对象字面量)的地方。

  • 函数调用

    function sum(x, y, z) {return x + y + z;
    }
    let numbers = [1, 2, 3];
    console.log(sum(...numbers)); // 输出:6
    
  • 数组字面量

    let parts = ['shoulders', 'knees'];
    let lyrics = ['head', ...parts, 'and', 'toes'];
    
  • 对象字面量

    let obj1 = { foo: 'bar', x: 42 };
    let obj2 = { foo: 'baz', y: 13 };
    let clonedObj = { ...obj1 };
    let mergedObj = { ...obj1, ...obj2 };
    

9. 对象字面量增强

ES6 增强了对象字面量的语法,允许在字面量中直接定义方法、使用属性值简写等。

let obj = {name: "Alice",getName() {return this.name;}
};

10. 符号(Symbols)

符号是一种新的基本数据类型,它是不可变的,可以用作对象的属性。

let mySymbol = Symbol('mySymbol');
let obj = {[mySymbol]: 'Hello'
};
console.log(obj[mySymbol]); // 输出:Hello

11. 迭代器(Iterators)和生成器(Generators)

迭代器允许你定义对象的遍历接口,而生成器则是一种更简洁的迭代器实现方式。

function* idGenerator() {let id = 1;while (true) {yield id;id++;}
}let gen = idGenerator();
console.log(gen.next().value); // 输出:1
console.log(gen.next().value); // 输出:2

12. 承诺(Promises)

承诺是异步编程的一种解决方案,它代表了异步操作的最终完成(或失败)及其结果值。

let promise = new Promise((resolve, reject) => {setTimeout(() => {resolve('Success!');}, 1000);
});promise.then((value) => {console.log(value); // 输出:Success!
}).catch((error) => {console.error(error);
});

这些特性构成了 ES6 的基础,它们极大地丰富了 JavaScript 的功能,并使得代码更加简洁和易于维护。

基本数据类型

在 ES6 中,JavaScript 的数据类型得到了扩展,增加了一种新的基本数据类型——符号(Symbol)。以下是 ES6 中的基础数据类型及其说明:

1. 字符串(String)

字符串类型在 ES6 中没有变化,仍然是由字符组成的文本,可以使用单引号、双引号或反引号(模板字符串)来定义。

let message = "Hello, ES6!";
let greeting = 'Hello, ES6!';
let multiLine = `This is amulti-line string.
`;

2. 数字(Number)

数字类型同样没有变化,可以表示整数或浮点数。

let integer = 42;
let float = 3.14159;

ES6 引入了一些新的数值常量:

let maxInteger = Number.MAX_SAFE_INTEGER; // 9007199254740991
let minInteger = Number.MIN_SAFE_INTEGER; // -9007199254740991
let maxFloat = Number.MAX_VALUE; // 1.7976931348623157e+308
let minFloat = Number.MIN_VALUE; // 5e-324
let epsilon = Number.EPSILON; // 2.220446049250313e-16
let infinity = Number.POSITIVE_INFINITY; // Infinity
let negativeInfinity = Number.NEGATIVE_INFINITY; // -Infinity
let notANumber = Number.NaN; // NaN

3. 布尔值(Boolean)

布尔类型用于表示逻辑值 truefalse

let isDone = false;
let hasError = true;

4. 未定义(Undefined)

未定义类型表示变量已声明但未初始化时的值。

let sample;
console.log(sample); // 输出:undefined

5. 空值(Null)

空值类型表示“无”或“空”的意图。

let nothing = null;

6. 符号(Symbol)

符号是 ES6 引入的一种新的基本数据类型,它用于创建唯一的、不可变的标识符。

let mySymbol = Symbol('mySymbol');

符号可以用作对象的属性键,以确保不会与其他属性键冲突。

7. 对象(Object)

对象类型在 ES6 中仍然是键值对的集合,可以是字典、数组、函数等。

let obj = {name: "Alice",age: 25
};

8. 数组(Array)

数组类型用于表示有序集合,可以包含任意类型的元素。

let numbers = [1, 2, 3, 4, 5];

9. 函数(Function)

函数类型在 ES6 中仍然是可执行的代码块,可以带有参数和返回值。

function add(a, b) {return a + b;
}

10. 整数(BigInt)

ES2020(ES11)引入了一种新的数值类型 BigInt,用于表示大于 Number.MAX_SAFE_INTEGER 的整数。

let bigInt = BigInt(Number.MAX_SAFE_INTEGER) + BigInt(1);

BigInt 类型的值以 n 结尾,例如 123n

这些基础数据类型构成了 ES6 中 JavaScript 的基础,使得 JavaScript 能够更好地处理各种数据,并提供了更多的编程工具。

对象属性迭代

对象属性迭代

在 ES6 中,对象属性迭代可以通过几种不同的方法来实现。这些方法允许你访问对象中的属性,无论是通过传统的 for...in 循环,还是通过新的 Object.keys()Object.values()Object.entries() 方法。

1. for...in 循环

for...in 循环可以遍历一个对象的所有可枚举属性,包括其原型链上的属性。

const obj = { a: 1, b: 2, c: 3 };for (const key in obj) {if (obj.hasOwnProperty(key)) {console.log(key, obj[key]);}
}

在这个例子中,hasOwnProperty 方法用于过滤掉原型链上的属性,只处理对象自身的属性。

2. Object.keys()

Object.keys() 方法返回一个包含对象自身可枚举属性名称的数组。

const obj = { a: 1, b: 2, c: 3 };Object.keys(obj).forEach(key => {console.log(key, obj[key]);
});

这个方法不会遍历原型链上的属性。

3. Object.values()

Object.values() 方法返回一个包含对象自身可枚举属性值的数组。

const obj = { a: 1, b: 2, c: 3 };Object.values(obj).forEach(value => {console.log(value);
});

同样,这个方法也不会遍历原型链上的属性。

4. Object.entries()

Object.entries() 方法返回一个给定对象自身可枚举属性的键值对数组,每个键值对是键和值的数组。

const obj = { a: 1, b: 2, c: 3 };Object.entries(obj).forEach(([key, value]) => {console.log(key, value);
});

这个方法提供了对象属性的键和值的访问方式,也不会遍历原型链上的属性。

5. Reflect.ownKeys()

Reflect.ownKeys() 方法返回一个由目标对象自身的属性键组成的数组。

const obj = { a: 1, b: 2, c: 3 };Reflect.ownKeys(obj).forEach(key => {console.log(key, obj[key]);
});

这个方法会返回所有自有属性键,无论它们是否可枚举,也不论它们是否不可枚举。

6. 使用 Symbol 属性

如果对象属性是 Symbol 类型,那么 Object.keys()Object.values()Object.entries() 默认不会返回这些属性。要迭代包含 Symbol 属性的对象,你需要使用 Object.getOwnPropertySymbols() 方法。

const obj = { a: 1, [Symbol('b')]: 2, c: 3 };Object.getOwnPropertySymbols(obj).forEach(symbol => {console.log(symbol, obj[symbol]);
});
7. 使用 for...of 循环和 Map 迭代器

如果你需要迭代一个 Map 对象,可以使用 for...of 循环和 Map 的迭代器。

const map = new Map([['a', 1], ['b', 2], ['c', 3]]);for (const [key, value] of map) {console.log(key, value);
}

这些方法提供了灵活的方式来迭代对象属性,你可以根据具体需求选择合适的方法。

数组迭代

在 ES6 中,数组迭代可以通过多种方式实现,包括传统的循环、数组方法以及迭代器。以下是一些常用的数组迭代方法:

1. for 循环

传统的 for 循环允许你访问数组的索引和元素。

const array = [1, 2, 3, 4, 5];
for (let i = 0; i < array.length; i++) {console.log(array[i]);
}

2. for...of 循环

for...of 循环提供了一种简洁的方式来迭代可迭代对象,包括数组。

const array = [1, 2, 3, 4, 5];
for (const value of array) {console.log(value);
}

3. forEach 方法

forEach 方法对数组的每个元素执行一次提供的函数。

const array = [1, 2, 3, 4, 5];
array.forEach((value, index) => {console.log(value, index);
});

4. map 方法

map 方法创建一个新数组,其结果是该数组中的每个元素是调用一次提供的函数后的返回值。

const array = [1, 2, 3, 4, 5];
const newArray = array.map(value => value * 2);
console.log(newArray); // [2, 4, 6, 8, 10]

5. filter 方法

filter 方法创建一个新数组,包含通过所提供函数实现的测试的所有元素。

const array = [1, 2, 3, 4, 5];
const filteredArray = array.filter(value => value > 2);
console.log(filteredArray); // [3, 4, 5]

6. reduce 方法

reduce 方法对数组中的每个元素执行一个由你提供的“reducer”函数(升序执行),将其结果汇总为单个返回值。

const array = [1, 2, 3, 4, 5];
const sum = array.reduce((accumulator, currentValue) => accumulator + currentValue, 0);
console.log(sum); // 15

7. some 方法

some 方法测试数组中是不是至少有一个元素通过了被提供的函数测试。它返回的是一个布尔值。

const array = [1, 2, 3, 4, 5];
const hasEven = array.some(value => value % 2 === 0);
console.log(hasEven); // true

8. every 方法

every 方法测试数组的所有元素是否都通过了指定函数的测试。它返回的是一个布尔值。

const array = [1, 2, 3, 4, 5];
const allPositive = array.every(value => value > 0);
console.log(allPositive); // true

9. find 方法

find 方法返回数组中满足提供的测试函数的第一个元素的值。否则返回 undefined

const array = [1, 2, 3, 4, 5];
const firstEven = array.find(value => value % 2 === 0);
console.log(firstEven); // 2

10. findIndex 方法

findIndex 方法返回数组中满足提供的测试函数的第一个元素的索引。若没有满足条件的元素则返回 -1

const array = [1, 2, 3, 4, 5];
const firstEvenIndex = array.findIndex(value => value % 2 === 0);
console.log(firstEvenIndex); // 1

11. keys 方法

keys 方法返回一个包含数组中每个索引键的新 Array Iterator 对象。

const array = [1, 2, 3, 4, 5];
const iterator = array.keys();for (const key of iterator) {console.log(key); // 0, 1, 2, 3, 4
}

12. values 方法

values 方法返回一个包含数组中每个索引值的新 Array Iterator 对象。

const array = [1, 2, 3, 4, 5];
const iterator = array.values();for (const value of iterator) {console.log(value); // 1, 2, 3, 4, 5
}

13. entries 方法

entries 方法返回一个包含数组中每个索引的键值对的新 Array Iterator 对象。

const array = [1, 2, 3, 4, 5];
const iterator = array.entries();for (const [index, value] of iterator) {console.log(index, value); // 0 1, 1 2, 2 3, 3 4, 4 5
}

这些方法提供了灵活且强大的方式来迭代数组,你可以根据具体需求选择合适的方法。

this指代

在 JavaScript 中,this 是一个关键字,它指向当前执行上下文(execution context)中的对象。this 的值在函数调用时确定,它可以是全局对象、调用函数的对象、构造函数、或者由 bindcallapply 方法指定的对象。以下是 this 在不同情况下的详细说明:

全局上下文

在全局执行上下文中(在任何函数体外部),this 指向全局对象。在浏览器中,全局对象是 window;在 Node.js 中,全局对象是 global

console.log(this); // 在浏览器中输出 window 对象,在 Node.js 中输出 global 对象

函数调用

在普通函数调用中,this 指向全局对象(非严格模式)或 undefined(严格模式)。

function normalFunction() {console.log(this); // 非严格模式下输出 window 对象,严格模式下输出 undefined
}normalFunction();

对象方法

在对象的方法中,this 指向调用该方法的对象。

const obj = {myMethod: function() {console.log(this); // 输出 obj 对象}
};obj.myMethod();

构造函数

在构造函数中,this 指向新创建的对象实例。

function MyConstructor() {this.myProperty = 'value';
}const myInstance = new MyConstructor();
console.log(myInstance.myProperty); // 输出 'value'

箭头函数

箭头函数不绑定自己的 this,它们继承所在上下文的 this 值。

const obj = {myMethod: function() {const arrowFunction = () => {console.log(this); // 输出 obj 对象,因为箭头函数继承了这个上下文的 this};arrowFunction();}
};obj.myMethod();

bindcallapply 方法

使用 bindcallapply 方法调用函数时,this 被显式指定为方法的第一个参数。

function myFunction() {console.log(this);
}const myBoundFunction = myFunction.bind({ myProperty: 'value' });
myBoundFunction(); // 输出 { myProperty: 'value' }const myObject = { myProperty: 'value' };
myFunction.call(myObject); // 输出 myObject
myFunction.apply(myObject); // 输出 myObject

DOM 事件处理

在 DOM 事件处理函数中,this 指向触发事件的元素。

document.getElementById('myElement').addEventListener('click', function() {console.log(this); // 输出被点击的 DOM 元素
});

类方法

在类的方法中,this 指向类的实例。

class MyClass {myMethod() {console.log(this); // 输出 MyClass 的实例}
}const myInstance = new MyClass();
myInstance.myMethod(); // 输出 MyClass 的实例

理解 this 的行为对于编写正确的 JavaScript 代码至关重要。在不同的上下文中,this 的值可能会有很大差异,因此在使用时需要格外注意。

箭头函数和常规函数在this上有何不同?

箭头函数和常规函数(即函数表达式和函数声明)在处理 this 关键字时有着本质的不同。这些差异主要源于箭头函数不绑定自己的 this,而是捕获其所在上下文的 this 值作为自己的 this 值。

常规函数(函数表达式和函数声明)

在常规函数中,this 的值是在函数被调用时确定的,这取决于函数的调用方式:

  • 在全局执行上下文中(在任何函数体外部),this 指向全局对象(在浏览器中是 window,在 Node.js 中是 global)。
  • 在普通函数调用中,this 指向全局对象(非严格模式)或 undefined(严格模式)。
  • 在对象方法中,this 指向调用该方法的对象。
  • 在构造函数中,this 指向新创建的对象实例。
  • 使用 bindcallapply 方法调用函数时,this 被显式指定为方法的第一个参数。
function normalFunction() {console.log(this); // 全局对象或 undefined
}normalFunction();const obj = {method: function() {console.log(this); // 指向 obj}
};obj.method();const boundFunction = (function() {console.log(this); // 全局对象或 undefined
}).bind(obj);boundFunction();

箭头函数

箭头函数不绑定自己的 this,它们继承所在上下文的 this 值:

  • 在全局执行上下文中,箭头函数的 this 指向全局对象。
  • 在对象方法中,箭头函数的 this 指向对象。
  • 在构造函数中,箭头函数的 this 指向全局对象,因为箭头函数不能用作构造函数。
  • 使用 bindcallapply 方法调用箭头函数时,this 不会改变,因为这些方法不能改变箭头函数的 this 值。
const arrowFunction = () => {console.log(this); // 全局对象
};arrowFunction();const obj = {arrowMethod: () => {console.log(this); // 全局对象}
};obj.arrowMethod();const arrowFunctionWithThis = (function() {return () => {console.log(this); // 全局对象};
})();arrowFunctionWithThis()();

总结

箭头函数和常规函数的主要区别在于 this 的处理方式。箭头函数不绑定自己的 this,而是捕获其所在上下文的 this 值,这使得箭头函数在需要引用外层 this 值时非常有用。然而,这也意味着箭头函数不能用作构造函数,因为它们没有自己的 this 绑定。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/466156.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

论文阅读:Computational Long Exposure Mobile Photography (二)

这篇文章是谷歌发表在 2023 ACM transaction on Graphic 上的一篇文章&#xff0c;介绍如何在手机摄影中实现长曝光的一些拍摄效果。 Abstract 长曝光摄影能拍出令人惊叹的影像&#xff0c;用运动模糊来呈现场景中的移动元素。它通常有两种模式&#xff0c;分别产生前景模糊或…

大语言模型鼻祖Transformer的模型架构和底层原理

Transformer 模型的出现标志着自然语言处理&#xff08;NLP&#xff09;技术的一次重大进步。这个概念最初是针对机器翻译等任务而提出的&#xff0c;Transformer 后来被拓展成各种形式——每种形式都针对特定的应用&#xff0c;包括原始的编码器-解码器&#xff08;encoder-de…

解决vue3导出.xlsx的blob文件受损问题

1、 首先要设置get或者post请求的类型。这里我用到post请求 eg&#xff1a;在http.ts中添加公共的方法。 export function post1(url: string, params: any): Promise<AxiosResponse> | Promise<AxiosResponse<any>> {return new Promise((resolve, reject…

Jest项目实战(6):搭建文档网站

搭建文档网站 创建 API 文档可以选择如下的 3 种方式&#xff1a; 功能较少&#xff0c;可以直接写在 README.md 文件里面内容较多&#xff0c;可以单独写一个文件API 数量众多&#xff08;Vue、React 这种级别&#xff09;&#xff0c;需要考虑单独拿一个网站来做详细的文档…

STM32项目---水质水位检测

1 项目简介 1.1 项目需求 本项目通过测量水体的TDS来反映水体的质量。并同时可以测量水位&#xff08;水深&#xff09;。 1.2 系统总体设计 2 硬件模块 2.1 硬件选型 水位测量模块 TDS采集模块 外置ADC模块&#xff08;ADS1115&#xff09; 2.2 水位测量模块使用方法 …

从神经元到神经网络:深度学习的进化之旅

神经元、神经网络 神经元 Neuron )&#xff0c;又名感知机( Perceptron )&#xff0c;在模型结构上与 逻辑回归 一致&#xff0c;这里以一个二维输入量的例子对其进行进一步 的解释&#xff1a; 假设模型的输 入向 量是一 维特征向 (x1,x2). 则单神 经元的模型结构 如下…

银行信贷风控专题:Python、R 语言机器学习数据挖掘应用实例合集:xgboost、决策树、随机森林、贝叶斯等

银行信贷风控专题&#xff1a;Python、R 语言机器学习数据挖掘应用实例合集&#xff1a;xgboost、决策树、随机森林、贝叶斯等 原创 拓端研究室 全文链接&#xff1a;https://tecdat.cn/?p38026 在当今金融领域&#xff0c;风险管控至关重要。无论是汽车贷款违约预测、银行挖掘…

某华迪加现场大屏互动系统mobile.do.php任意文件上传

免责声明 本文章仅供学习与交流&#xff0c;请勿用于非法用途&#xff0c;均由使用者本人负责&#xff0c;文章作者不为此承担任何责任 漏洞描述 该系统是实现现场大屏互动&#xff0c;里面功能众多&#xff0c;但在mobile.do.php接口处存在任意文件上传漏洞 搜索语法 fof…

基于Python的学生宿舍管理系统

作者&#xff1a;计算机学姐 开发技术&#xff1a;SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、Python、小程序等&#xff0c;“文末源码”。 专栏推荐&#xff1a;前后端分离项目源码、SpringBoot项目源码、Vue项目源码、SSM项目源码、微信小程序源码 精品专栏&#xff1a;…

【AI视频换脸整合包及教程】AI换脸新星:Rope——让换脸变得如此简单

在数字技术迅猛发展的今天&#xff0c;人工智能&#xff08;AI&#xff09;的应用已经渗透到了我们生活的方方面面&#xff0c;从日常的语音助手到复杂的图像处理&#xff0c;无不体现着AI技术的魅力。特别是在娱乐和创意领域&#xff0c;AI技术更是展现出了惊人的潜力。其中&a…

A012-基于Spring Boot的私房菜定制上门服务系统的设计与实现

摘 要 如今社会上各行各业&#xff0c;都喜欢用自己行业的专属软件工作&#xff0c;互联网发展到这个时候&#xff0c;人们已经发现离不开了互联网。新技术的产生&#xff0c;往往能解决一些老技术的弊端问题。因为传统私房菜定制上门服务系统信息管理难度大&#xff0c;容错率…

EV录屏好用吗?盘点2024年10款专业好用的录屏软件。

EV录屏的方式有很多种&#xff0c;它设置了很多模式&#xff0c;并且录制高清&#xff0c;可以免费使用。但是现在很多的录屏工具都有着与这个软件相似的功能&#xff0c;在这里我可以给大家列举一些。 1、福昕电脑录屏 这个软件为用户提供了多种录制模式&#xff0c;让视频录…

【网易云插件】听首歌放松放松

先看效果&#xff1a; 网易云有两种类似的插件。 第一种 &#xff1a; iframe 优点&#xff1a;可以自己调整插件的高度、宽度 缺点&#xff1a;很多博客网站不支持嵌入iframe&#xff0c;请试一下您的网站是否支持 登录可直接复制代码。 也可以在我这里 <iframe fram…

Java的Object类常用的方法(详述版本)

文章目录 一、什么是Object类二、常用方法&#xff1a;toString&#xff08;&#xff09;三、常用方法&#xff1a;对象比较equals&#xff08;&#xff09;四、常用方法&#xff1a;hashcode&#xff08;&#xff09;五、总结 一、什么是Object类 顾名思义&#xff0c;Object类…

SQL--查询连续三天登录数据详解

问题&#xff1a; 现有用户登录记录表&#xff0c;请查询出用户连续三天登录的所有数据记录 id dt1 2024-04-25 1 2024-04-26 1 2024-04-27 1 2024-04-28 1 2024-04-30 1 2024-05-01 1 2024-05-02 1 2024-05-04 1 2024-05-05 2 20…

docker+mysql配置

拉取mysql docker pull mysqlmysql配置 创建存储文件夹 mkdir -p /home/mysql/{date,conf}在conf文件中配置my.cnf sudo vim my.cnfmy.cnf具体配置 [mysqld] #Mysql服务的唯一编号 每个mysql服务Id需唯一 server-id1#服务端口号 默认3306 port3306#mysql安装根目录&#x…

qt QHeaderView详解

1、概述 QHeaderView 是 Qt 框架中的一个类&#xff0c;它通常作为 QTableView、QTreeView 等视图类的一部分&#xff0c;用于显示和管理列的标题&#xff08;对于水平头&#xff09;或行的标题&#xff08;对于垂直头&#xff09;。QHeaderView 提供了对这些标题的排序、筛选…

删除 需要来自XXXX的权限才能对此文件夹进行更改 文件的解决办法

如果你也是&#xff1a; 如果你也有类似上面的问题&#xff0c;这篇文章算是你看对了&#xff0c;哦哟&#xff01; 我的牙齿现在是怨灵的牙齿&#xff0c;可以啃下一头牛。 翻遍千山万水&#xff0c;咱们也是终于取到真经了家人们。 首先下一个everything好吗 甩一个官网链…

题目练习之二叉树那些事儿(续集)

♥♥♥~~~~~~欢迎光临知星小度博客空间~~~~~~♥♥♥ ♥♥♥零星地变得优秀~也能拼凑出星河~♥♥♥ ♥♥♥我们一起努力成为更好的自己~♥♥♥ ♥♥♥如果这一篇博客对你有帮助~别忘了点赞分享哦~♥♥♥ ♥♥♥如果有什么问题可以评论区留言或者私信我哦~♥♥♥ 这一篇博客我们继…

本地Docker部署ZFile网盘打造个人云存储,告别公共网盘让你数据安全感爆棚

文章目录 前言1.关于ZFile2.本地部署ZFile3.ZFile本地访问测试4.ZFile的配置5.cpolar内网穿透工具安装6.创建远程连接公网地址7.固定ZFile公网地址 前言 本文主要介绍如何在Linux Ubuntu系统使用Docker本地部署ZFile文件管理系统&#xff0c;并结合cpolar内网穿透工具实现远程…