疯狂讲义系列js,探索JavaScript的奥秘,你准备好了吗?
- 行业动态
- 2024-11-22
- 1
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”的问题,朋友们可以点击主页了解更多内容,希望可以够帮助大家!
本站发布或转载的文章及图片均来自网络,其原创性以及文中表达的观点和判断不代表本站,有问题联系侵删!
本文链接:http://www.xixizhuji.com/fuzhu/339021.html