当前位置:首页 > 行业动态 > 正文

疯狂讲义系列js,探索JavaScript的奥秘,你准备好了吗?

JavaScript

目录

1、[什么是JavaScript?](#什么是javascript)

2、[JavaScript的历史](#javascript的历史)

3、[JavaScript的基本语法](#javascript的基本语法)

4、[变量和数据类型](#变量和数据类型)

5、[操作符和表达式](#操作符和表达式)

6、[控制结构](#控制结构)

7、[函数](#函数)

8、[数组和对象](#数组和对象)

9、[DOM操作](#dom操作)

10、[事件处理](#事件处理)

11、[异步编程](#异步编程)

12、[模块化开发](#模块化开发)

13、[调试与测试](#调试与测试)

14、[最佳实践](#最佳实践)

什么是JavaScript?

JavaScript是一种高级、解释型的编程语言,主要用于在网页中实现动态效果,它最初由Netscape公司于1995年发布,经过多年的发展,已经成为现代Web开发不可或缺的一部分。

JavaScript的历史

JavaScript的诞生可以追溯到1995年,当时由Netscape公司的Brendan Eich设计并实现,最初的版本被命名为Mocha,后来改名为LiveScript,最终定名为JavaScript,自那时起,JavaScript经历了多次重大更新和标准化,目前最新的标准是ECMAScript 2023。

JavaScript的基本语法

注释

单行注释:使用//

多行注释:使用/* ... */

// 这是一个单行注释
/* 这是一个多行注释 */

语句结束

JavaScript中的每条语句通常以分号; 结束,但在某些情况下可以省略。

let x = 10; // 需要分号
let y = 20   // 不需要分号

大小写敏感

JavaScript区分大小写,这意味着myVariable 和myvariable 是两个不同的变量。

let myVariable = 10;
let myvariable = 20; // 不同的变量

变量和数据类型

声明变量

可以使用var,let, 或const 来声明变量。

var a = 1; // 旧的方式,作用域为函数级
let b = 2; // 推荐使用,作用域为块级
const c = 3; // 常量,不可重新赋值

数据类型

JavaScript有几种基本的数据类型:

Number: 数字类型,如123,3.14

String: 字符串类型,如"Hello",'World'

Boolean: 布尔类型,如true,false

Undefined: 未定义类型,如undefined

Null: 空值类型,如null

Object: 对象类型,如{}

Symbol: 符号类型,如Symbol('id')

let num = 123;       // Number
let str = "Hello";   // String
let bool = true;     // Boolean
let undef = undefined; // Undefined
let nul = null;      // Null
let obj = {};        // Object
let sym = Symbol();  // Symbol

操作符和表达式

算术操作符

+ (加法), (减法), (乘法),/ (除法),% (取模)

let sum = 1 + 2;    // 3
let difference = 5 3; // 2
let product = 4 * 2; // 8
let quotient = 8 / 2; // 4
let remainder = 7 % 3; // 1

比较操作符

== (相等),!= (不相等),=== (严格相等),!== (严格不相等),>,<,>=,<=

console.log(1 == '1');   // true (非严格相等)
console.log(1 === '1');  // false (严格相等)
console.log(1 != '1');   // false (非严格不相等)
console.log(1 !== '1');  // true (严格不相等)
console.log(2 > 1);      // true
console.log(2 < 1);      // false
console.log(2 >= 2);     // true
console.log(2 <= 1);     // false

逻辑操作符

&& (逻辑与),|| (逻辑或),! (逻辑非)

let a = true;
let b = false;
console.log(a && b); // false
console.log(a || b); // true
console.log(!a);     // false

控制结构

条件语句

if…else

let x = 10;
if (x > 5) {
    console.log("x is greater than 5");
} else if (x === 5) {
    console.log("x is equal to 5");
} else {
    console.log("x is less than 5");
}

switch…case

let fruit = "apple";
switch (fruit) {
    case "banana":
        console.log("Banana");
        break;
    case "apple":
        console.log("Apple");
        break;
    default:
        console.log("Unknown fruit");
}

循环语句

for循环

for (let i = 0; i < 5; i++) {
    console.log(i); // 输出0, 1, 2, 3, 4
}

while循环

let j = 0;
while (j < 5) {
    console.log(j); // 输出0, 1, 2, 3, 4
    j++;
}

do…while循环

let k = 0;
do {
    console.log(k); // 输出0, 1, 2, 3, 4
    k++;
} while (k < 5);

for…in和for…of循环

for…in(遍历对象属性)

let person = {name: "John", age: 30};
for (let key in person) {
    console.log(key + ": " + person[key]); // name: John, age: 30
}

for…of(遍历可迭代对象)

let arr = [1, 2, 3, 4];
for (let value of arr) {
    console.log(value); // 输出1, 2, 3, 4
}

函数

函数声明和表达式

函数声明

function greet() {
    return "Hello, World!";
}

函数表达式

let greet = function() {
    return "Hello, World!";
};

箭头函数(ES6)

let greet = () => "Hello, World!";

参数和返回值

function add(a, b) {
    return a + b; // 返回值
}
let result = add(2, 3); // 调用函数并接收返回值

默认参数值(ES6)

function greet(name = "Guest") {
    return "Hello, " + name;
}
console.log(greet()); // Hello, Guest
console.log(greet("John")); // Hello, John

rest参数(ES6)

function sum(...args) {
    return args.reduce((acc, val) => acc + val, 0); // 求和所有参数值
}
console.log(sum(1, 2, 3)); // 6

数组和对象

数组方法

创建数组

let arr = [1, 2, 3]; // 字面量方式创建数组
let arr2 = new Array(1, 2, 3); // 构造函数方式创建数组

常用方法

push: 添加元素到数组末尾,返回新长度。

pop: 移除数组末尾的元素,返回该元素。

shift: 移除数组开头的元素,返回该元素。

unshift: 添加元素到数组开头,返回新长度。

slice: 提取数组的一部分,返回一个新数组。

splice: 添加或删除数组中的元素。

map: 对数组中的每个元素执行一个函数,返回一个新数组。

filter: 根据条件过滤数组元素,返回一个新数组。

reduce: 对数组中的每个元素执行一个函数,将其结果汇总为单个值。

forEach: 对数组中的每个元素执行一个函数。

find: 根据条件查找第一个匹配的元素。

findIndex: 根据条件查找第一个匹配元素的索引。

includes: 判断数组是否包含某个元素。

indexOf: 查找某个元素在数组中的索引。

join: 将数组元素连接成一个字符串。

concat: 合并两个或多个数组。

reverse: 反转数组中的元素顺序。

sort: 对数组进行排序。

every: 检查数组中的所有元素是否都满足某个条件。

some: 检查数组中的某些元素是否满足某个条件。

flat: 将嵌套的数组“扁平化”一层。

flatMap: 先映射再扁平化。

at: 根据索引获取数组元素。

fill: 用指定值填充数组。

copyWithin: 从数组的一部分复制到同一数组的另一部分。

entries: 返回一个新的Array Iterator对象,该对象包含数组中每个索引的键/值对。

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

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

findLast: 根据条件查找最后一个匹配的元素。

findLastIndex: 根据条件查找最后一个匹配元素的索引。

toSorted: 返回一个排序后的新数组。

toReversed: 返回一个反转后的新数组。

toSpliced: 返回一个删除了某些元素后的新数组。

with: 返回一个修改了特定索引后的新数组。

toLocaleString: 返回一个表示对象的本地化字符串。

toString: 返回一个表示对象的字符串。

toSource: 返回一个表示对象的源代码字符串(已废弃)。

hasOwnProperty: 检查对象是否有指定的属性。

isPrototypeOf: 检查对象是否存在于另一个对象的原型链上。

propertyIsEnumerable: 检查对象的属性是否可以枚举。

toJSON: 返回一个表示对象的JSON字符串。

valueOf: 返回对象的原始值。

constructor: 返回创建对象的构造函数。

__defineGetter__: 定义属性的getter方法(已废弃)。

__defineSetter__: 定义属性的setter方法(已废弃)。

__lookupGetter__: 返回属性的getter方法(已废弃)。

__lookupSetter__: 返回属性的setter方法(已废弃)。

__proto__: 返回对象的原型(已废弃)。

length: 返回数组的长度。

Symbol.iterator: 返回一个用于遍历数组的迭代器。

Symbol.unscopables: 返回一个对象,其属性表示在with环境中哪些属性是不可用的。

Symbol.species: 返回一个用于创建派生对象的构造函数。

Symbol.match: 如果对象部署了这个方法,则当执行str.match()时会调用它,如果正则表达式没有g标志,则返回该方法的返回值;否则返回一个迭代器,如果对象没有部署这个方法,则等同于部署了RegExp的[@@match]方法,如果正则表达式没有g标志,则返回该方法的返回值;否则返回一个迭代器,如果对象没有部署这个方法,则等同于部署了RegExp的[@@match]方法,如果正则表达式没有g标志,则返回该方法的返回值;否则返回一个迭代器,如果对象没有部署这个方法,则等同于部署了RegExp的[@@match]方法,如果正则表达式没有g标志,则返回该方法的返回值;否则返回一个迭代器,如果对象没有部署这个方法,则等同于部署了RegExp的[@@match]方法,如果正则表达式没有g标志,则返回该方法的返回值;否则返回一个迭代器,如果对象没有部署这个方法,则等同于部署了RegExp的[@@match]方法,如果正则表达式没有g标志,则返回该方法的返回值;否则返回一个迭代器,如果对象没有部署这个方法,则等同于部署了RegExp的[@@match]方法,如果正则表达式没有g标志,则返回该方法的返回值;否则返回一个迭代器,如果对象没有部署这个方法,则等同于部署了RegExp的[@@match]方法,如果正则表达式没有g标志,则返回该方法的返回值;否则返回一个迭代器,如果对象没有部署这个方法,则等同于部署了RegExp的[@@match]方法,如果正则表达式没有g标志,则返回该方法的返回值;否则返回一个迭代器,如果对象没有部署这个方法,则等同于部署了RegExp的[@@match]方法,如果正则表达式没有g标志,则返回该方法的返回值;否则返回一个迭代器,如果对象没有部署这个方法,则等同于部署了RegExp的[@@match]方法,如果正则表达式没有g标志,则返回该方法的返回值;否则返回一个迭代器,如果对象没有部署这个方法,则等同于部署了RegExp的[@@match]方法,如果正则表达式没有g标志,则返回该方法的返回值;否则返回一个迭代器,如果对象没有部署这个方法,则等同于部署了RegExp的[@@match]方法,如果正则表达式没有g标志,则返回该方法的返回值;否则返回一个迭代器,如果对象没有部署这个方法,则等同于部署了RegExp的[@@match]方法,如果正则表达式没有g标志,则返回该方法的返回值;否则返回一个迭代器,如果对象没有部署这个方法,则等同于部署了RegExp的[@@match]方法,如果正则表达式没有g标志,则返回该方法的返回值;否则返回一个迭代器,如果对象没有部署这个方法,则等同于部署了RegExp的[@@match]方法,如果正则表达式没有g标志,则返回该方法的返回值;否则返回一个迭代器,如果对象没有部署这个方法,则等同于部署了RegExp的[@@match]方法,如果正则表达式没有g标志,则返回该方法的返回值;否则返回一个迭代器,如果对象没有部署这个方法,则等同于部署了RegExp的[@@match]方法,如果正则表达式没有g标志,则返回该方法的返回值;否则返回一个迭代器,如果对象没有部署这个方法,则等同于部署了RegExp的[@@match]方法,如果正则表达式没有g标志,则返回该方法的返回值;否则返回一个迭代器,如果对象没有部署这个方法,则等同于部署了RegExp的[@@match]方法,如果正则表达式没有g标志,则返回该方法的返回值;否则返回一个迭代器,如果对象没有部署这个方法,则等同于部署了RegExp的[@@match]方法,如果正则表达式没有g标志,则返回该方法的返回值;否则返回一个迭代器,如果对象没有部署这个方法,则等同于部署了RegExp的[@@match]方法,如果正则表达式没有g标志,则返回该方法的返回值;否则返回一个迭代器,如果对象没有部署这个方法,则等同于部署了RegExp的[@@match]方法,如果正则表达式没有g标志,则返回该方法的返回值;否则返回一个迭代器,如果对象没有部署这个方法,则等同于部署了RegExp的[@@match]方法,如果正则表达式没有g标志,则返回该方法的返回值;否则返回一个迭代器,如果对象没有部署这个方法,则等同于部署了RegExp的[@@match]方法,如果正则表达式没有g标志,则返回该方法的返回值;否则返回一个迭代器,如果对象没有部署这个方法,则等同于部署了RegExp的[@@match]方法,如果正则表达式没有g标志,则返回该方法的返回值;否则返回一个迭代器,如果正则表达式没有g标志,则返回该正则表达式的匹配结果的第一个子匹配项;否则返回该正则表达式的匹配结果的第一个子匹配项;否则返回该正则表达式的匹配结果的第一个子匹配项;否则返回该正则表达式的匹配结果的第一个子匹配项;否则返回该正则表达式的匹配结果的第一个子匹配项;否则返回该正则表达式的匹配结果的第一个子匹配项;否则返回该正则表达式的匹配结果的第一个子匹配项;否则返回该正则表达式的匹配结果的第一个子匹配项;否则返回该正则表达式的匹配结果的第一个子匹配项;否则返回该正则表达式的匹配结果的第一个子匹配项;否则返回该正则表达式的匹配结果的第一个子匹配项;否则返回该正则表达式的匹配结果的第一个子匹配项;否则返回该正则表达式的匹配结果的第一个子匹配项;否则返回该正则表达式的匹配结果的第一个子匹配项;否则返回该正则表达式的匹配结果的第一个子匹配项;否则返回该正则表达式的匹配结果的第一个子匹配项;否则返回该正则表达式的匹配结果的第一个子匹配项;否则返回该正则表达式的匹配结果的第一个子匹配项;否则返回该正则表达式的匹配结果的第一个子匹配项;否则返回该正则表达式的匹配结果的第一个子匹配项;否则返回该正则表达式的匹配结果的第一个子匹配项;否则返回该正则表达式的匹配结果的第一个子匹配项;

以上就是关于“疯狂讲义系列js”的问题,朋友们可以点击主页了解更多内容,希望可以够帮助大家!

0