JavaScript 基础知识点总结

文章目录


前言

JavaScript 作为前端开发的核心编程语言,自 1995 年诞生以来,从最初仅用于页面简单交互的脚本语言,逐步发展为覆盖前端、后端(Node.js)、移动端、桌面端的全栈式语言。它是实现网页动态交互的基础 —— 无论是页面的表单验证、动态内容渲染、样式实时修改,还是复杂的前端框架(React、Vue、Angular)底层逻辑,都离不开 JavaScript 的支撑。如今,JavaScript 已成为 Web 生态中不可或缺的一部分,掌握其核心语法与常用方法,是入门前端开发、实现各类交互需求的必经之路。本文系统梳理 JavaScript 从基础语法到实战应用的核心知识点,结合可复用的代码示例,帮助初学者夯实基础,理解并灵活运用这门语言解决实际开发问题。


提示:以下是本篇文章正文内容,下面案例可供参考

一、基础核心语法(入门级)

1. 变量相关

  1. 变量声明与赋值:涵盖 var、let、const 三种声明方式的区别,var 存在变量提升、函数级作用域,let/const 为块级作用域,const 声明只读常量(引用类型值可修改)。
// 变量定义示例var a =10;// 全局/函数作用域,可重复声明let b =20;// 块级作用域,不可重复声明const c =30;// 块级作用域,不可重新赋值const obj ={name:"js"}; obj.name ="javascript";// 引用类型const变量值可修改
  1. 变量作用域:全局作用域(在函数外声明,整个页面可访问)、局部作用域(函数内声明,仅函数内访问)、块级作用域(let/const 在 {} 内声明,仅块内访问)。
// 变量作用域示例let globalVar ="全局变量";functiontestScope(){let localVar ="局部变量";if(true){let blockVar ="块级变量"; console.log(localVar);// 可访问} console.log(blockVar);// 报错,块级变量外部不可访问} console.log(globalVar);// 可访问 console.log(localVar);// 报错,局部变量外部不可访问

2. 数据类型

  1. 原始类型:字符串(String)、数字(Number)、布尔(Boolean)、undefined、null、Symbol(ES6)、BigInt(ES6),原始类型值不可变。
let str ="hello";let num =123;let bool =true;let und =undefined;let nul =null;
  1. 引用类型:对象(Object)、数组(Array)、函数(Function)等,引用类型值存在堆内存,变量存储的是地址。
// 基本类型vs引用类型示例let num1 =10;let num2 = num1; num2 =20; console.log(num1);// 10,基本类型值独立let arr1 =[1,2];let arr2 = arr1; arr2.push(3); console.log(arr1);// [1,2,3],引用类型共享地址
  1. 类型转换:隐式转换(如 1 + “2” 得到 “12”)、显式转换(Number()、String()、Boolean())。
// 类型转换示例let strNum ="123";let num =Number(strNum);// 显式转换为数字let bool =Boolean(0);// false,0转为布尔为false console.log(1+"2");// "12",隐式转换

3. 运算符与基本运算

  1. 算术运算符:+(加 / 拼接)、-(减)、*(乘)、/(除)、%(取模)、++(自增)、–(自减)。
// 基本数学运算示例let sum =10+20;// 30let mod =7%3;// 1let n =5; n++;// 6let m =8;--m;// 7
  1. 赋值运算符:=、+=、-=、*=、/= 等。
let x =5; x +=3;// 等价于x = x + 3,结果8
  1. 比较运算符:= =(值相等)、= = =(值 + 类型相等)、!=、!==、>、<、>=、<=。
console.log(10=="10");// true,隐式类型转换后相等 console.log(10==="10");// false,类型不同
  1. 逻辑运算符:&&(与)、||(或)、!(非)。
let a =true, b =false; console.log(a && b);// false console.log(a || b);// true console.log(!a);// false

二、流程控制(基础)

1.分支判断

  1. if/else if/else:根据条件执行不同代码块,支持嵌套。
// 分支判断示例let score =85;if(score >=90){ console.log("优秀");}elseif(score >=80){ console.log("良好");}else{ console.log("及格/不及格");}
  1. switch-case:多分支匹配,基于值的全等比较,break 终止分支,default 处理未匹配情况。
// switch示例let day =3;switch(day){case1: console.log("周一");break;case2: console.log("周二");break;default: console.log("其他日期");}

2. 循环结构

  1. for 循环:指定次数循环,适用于已知循环次数的场景(如遍历数组)。
// 循环示例-遍历数组let arr =[10,20,30];for(let i =0; i < arr.length; i++){ console.log(arr[i]);// 依次输出10、20、30}
  1. while 循环:先判断条件,满足则执行循环体,需避免无限循环。
let count =0;while(count <3){ console.log(count);// 0、1、2 count++;// 必须更新条件变量}
  1. do-while 循环:先执行一次循环体,再判断条件,至少执行一次。
let num =5;do{ console.log(num);// 5 num++;}while(num <5);// 条件不满足,循环仅执行一次
  1. 循环控制:break 终止整个循环,continue 跳过当前次循环。
for(let i =0; i <5; i++){if(i ===2)continue;// 跳过i=2的循环if(i ===4)break;// 终止i=4时的循环 console.log(i);// 0、1、3}

三、内置对象与方法

1. Math 对象

  1. 核心方法:Math.random()(生成 0-1 随机数)、Math.floor()(向下取整)、Math.ceil()(向上取整)、Math.round()(四舍五入)、Math.max()/Math.min()(取最大 / 最小值)、Math.pow()(幂运算)等。
// Math对象示例let randomNum = Math.random();// 0-1随机数let random100 = Math.floor(Math.random()*100);// 0-99随机整数let maxNum = Math.max(10,20,30);// 30let powNum = Math.pow(2,3);// 8,2的3次方
  1. 随机数专项:生成指定范围随机数(如 1-100)。
// 随机数示例-生成1-100随机整数functiongetRandom(min, max){return Math.floor(Math.random()*(max - min +1))+ min;} console.log(getRandom(1,100));

2. Date 日期对象

  1. 日期创建:new Date()(当前时间)、new Date(2024, 5, 1)(指定时间,月份从 0 开始)、new Date(“2024-06-01”)。
  2. 核心方法:getFullYear()(年)、getMonth()(月)、getDate()(日)、getHours()(时)、getMinutes()(分)、getSeconds()(秒)、getTime()(时间戳)。
// 日期对象示例let now =newDate();let year = now.getFullYear();// 当前年份let month = now.getMonth()+1;// 当前月份(+1修正0开始)let day = now.getDate();// 当前日期let timestamp = now.getTime();// 时间戳(毫秒)

3. 字符串操作

  1. 基本操作:拼接(+/concat())、长度(length)、索引访问(str[0])。
// 字符串基本操作示例let str1 ="hello";let str2 ="world";let str3 = str1 +" "+ str2;// "hello world"let len = str1.length;// 5let firstChar = str1[0];// "h"
  1. 核心方法:charAt()(取指定索引字符)、indexOf()/lastIndexOf()(查找字符 / 子串位置)、slice()/substring()(截取)、replace()(替换)、split()(分割为数组)、toUpperCase()/toLowerCase()(大小写转换)、trim()(去首尾空格)。
// 字符串方法示例let str =" JavaScript ";let trimStr = str.trim();// "JavaScript"let upperStr = trimStr.toUpperCase();// "JAVASCRIPT"let splitArr = trimStr.split("");// ["J","a","v","a","S","c","r","i","p","t"]let replaceStr = trimStr.replace("Java","Type");// "TypeScript"

4. 数组操作

  1. 基础操作:长度(length)、索引访问 / 修改(arr[0] = 10)。
  2. 增删改查方法:push()(末尾加)、pop()(末尾删)、unshift()(开头加)、shift()(开头删)、splice()(指定位置增删改)。
// 数组增删改示例let arr =[1,2,3]; arr.push(4);// [1,2,3,4] arr.pop();// [1,2,3] arr.unshift(0);// [0,1,2,3] arr.shift();// [1,2,3] arr.splice(1,1,5);// 从索引1删1个,加5,结果[1,5,3]
  1. 遍历 / 处理方法:forEach()(遍历)、map()(映射新数组)、filter()(筛选)、reduce()(聚合)、find()(查找元素)、some()/every()(判断是否存在 / 全部满足条件)。
// 数组内置方法示例let nums =[1,2,3,4];// forEach遍历 nums.forEach((item, index)=>{ console.log(`索引${index}:${item}`);});// map生成新数组(每个数*2)let doubleNums = nums.map(item=> item *2);// [2,4,6,8]// filter筛选偶数let evenNums = nums.filter(item=> item %2===0);// [2,4]// reduce求和let sum = nums.reduce((prev, curr)=> prev + curr,0);// 10

5. 对象

  1. 对象创建:字面量方式({})、构造函数方式(new Object())。
  2. 属性 / 方法操作:访问(obj.name/obj[“name”])、修改(obj.name = “new”)、新增(obj.age = 18)、删除(delete obj.age)。
  3. 对象遍历:for…in 循环遍历可枚举属性。
// 对象示例let person ={name:"张三",age:20,sayHi:function(){ console.log(`你好,我是${this.name}`);}}; console.log(person.name);// 张三 person.age =21;// 修改属性 person.gender ="男";// 新增属性delete person.gender;// 删除属性 person.sayHi();// 调用方法:你好,我是张三// 遍历对象for(let key in person){ console.log(`${key}:${person[key]}`);}

四、函数与页面交互

1. 函数

  1. 函数声明与调用:声明式(function fn() {})、表达式(let fn = function() {})、箭头函数(let fn = () => {})。
// 函数示例// 声明式functionadd(a, b){return a + b;}// 表达式letsub=function(a, b){return a - b;};// 箭头函数letmul=(a, b)=> a * b; console.log(add(1,2));// 3 console.log(sub(5,3));// 2 console.log(mul(2,4));// 8
  1. 参数:形参 / 实参、默认参数(function fn(a=10) {})、剩余参数(function fn(…args) {})。
// 函数参数示例functionfn(a, b =5){// 默认参数 console.log(a + b);}fn(3);// 8(b使用默认值5)functionsumAll(...args){// 剩余参数return args.reduce((prev, curr)=> prev + curr,0);} console.log(sumAll(1,2,3));// 6
  1. 作用域与闭包:函数作用域内变量外部不可访问;闭包(函数嵌套,内层函数访问外层函数变量)。
// 闭包示例functionouter(){let num =10;returnfunctioninner(){ console.log(num);// 访问外层变量,形成闭包};}let fn =outer();fn();// 10

2. 页面交互(DOM )

  1. 元素获取:getElementById()(通过 ID)、getElementsByClassName()(通过类名)、getElementsByTagName()(通过标签名)、querySelector()/querySelectorAll()(通过选择器)。
  2. 样式修改:element.style.属性 = 值(行内样式)、element.className/element.classList(类名操作)。
  3. 事件绑定:addEventListener() 绑定点击、输入、鼠标等事件。
  4. 元素操作:创建(createElement())、插入(appendChild()/insertBefore())、删除(removeChild())。
// 页面交互示例// 获取元素let btn = document.getElementById("btn");let list = document.querySelector(".list");let items = document.querySelectorAll(".list li");// 绑定点击事件 btn.addEventListener("click",function(){// 创建新元素let li = document.createElement("li"); li.textContent ="新列表项";// 修改样式 li.style.color ="red"; li.classList.add("active");// 添加类名// 插入元素 list.appendChild(li);});// 删除元素 list.removeChild(items[0]);// 删除第一个列表项

总结

本文从入门到实战,逐层拆解了 JavaScript 的核心知识点:

  1. 基础核心语法:覆盖变量声明(var/let/const)、数据类型(原始类型与引用类型)、各类运算符的使用规则,这是编写 JavaScript 代码的底层基础,决定了数据的存储、运算与类型处理逻辑;
  2. 流程控制:讲解 if/switch 分支判断、for/while/do-while 循环结构及循环控制关键字,解决了代码 “按需执行” 和 “重复执行” 的核心需求,是实现业务逻辑分支与批量处理的关键;
  3. 内置对象与方法:详细介绍 Math、Date、字符串、数组、对象等常用内置对象的核心方法,这些内置能力是处理数学计算、时间操作、数据格式化与批量处理的高效工具,避免重复造轮子;
  4. 函数与页面交互:涵盖函数的声明、参数处理、闭包特性,以及 DOM 操作的核心方法,函数实现了代码的复用与逻辑封装,DOM 操作则打通了 JavaScript 与 HTML/CSS 的交互通道,是实现页面动态效果的核心手段。

这些知识点构成了 JavaScript 前端开发的基础体系,掌握这些内容不仅能解决日常开发中的基础交互需求,也为后续学习 ES6+ 新特性、前端框架、异步编程等进阶内容奠定了坚实的基础。

Read more

SHA-256 哈希破解工具技术解析

一、程序功能概述 一个针对 SHA-256 哈希值的密码破解工具,其核心功能是通过多种密码攻击技术,将给定的 SHA-256 哈希值反向还原为原始明文密码。该工具集成了字典攻击、模式攻击、暴力破解等多种方法,通过组合不同的攻击策略提高哈希破解的成功率,适用于安全测试、密码审计等场景(需在合法授权范围内使用)。 程序的核心目标是:接收包含多个 SHA-256 哈希值的文件(默认1.txt),通过内置的密码生成与验证逻辑,找到哈希值对应的原始密码,并将结果保存到输出文件(默认2.txt)。其功能覆盖了从数据加载、密码生成、哈希比对到结果保存的完整流程,同时包含进度跟踪与状态提示,提升用户对破解过程的感知。 二、核心数据结构解析 程序通过HashCracker类封装所有功能,类内定义了多个关键数据结构,用于存储状态、配置与结果,这些结构的设计直接影响破解效率与功能完整性。 1. 实例属性设计 属性名类型作用设计逻辑found_passwords字典(dict)存储已破解的哈希值与对应密码,键为哈希值,值为明文密码字典的键值对结构支持 O (1) 时间复杂度的哈希值查找,

By Ne0inhk
数据结构:链表进阶

数据结构:链表进阶

链表进阶 * 1. ArrayList的缺陷 * 2. 链表 * 2.1 链表的概念及结构 * 2.2 链表的实现 * 3.链表面试题 * 4.LinkedList的使用 * 5.1 什么是LinkedList * 4.2 LinkedList的使用 * 5. ArrayList和LinkedList的区别 1. ArrayList的缺陷 通过源码知道,ArrayList底层使用数组来存储元素: publicclassArrayList<E>extendsAbstractList<E>implementsList<E>,RandomAccess,Cloneable,java.io.Serializable{// ...// 默认容量是10privatestaticfinalint DEFAULT_CAPACITY =10;//...// 数组:用来存储元素transientObject[

By Ne0inhk

压缩感知信号重构的块稀疏贝叶斯学习(BSBL)算法:原理、实现与应用

一、引言 压缩感知(Compressive Sensing, CS)理论打破了奈奎斯特采样定理的限制,通过少量线性测量即可高概率恢复稀疏信号。块稀疏贝叶斯学习(Block Sparse Bayesian Learning, BSBL)是CS领域的重要算法,专门针对块稀疏信号(即信号的非零元素集中在少数连续块中)设计,通过贝叶斯框架建模块内相关性与稀疏性,显著提升了重构性能。本文将详细介绍BSBL的理论基础、算法实现、MATLAB仿真及应用场景。 二、BSBL算法理论基础 1. 块稀疏信号模型 块稀疏信号的核心特征是非零元素呈块状分布,例如时间序列中的连续脉冲、图像中的纹理块。数学上,块稀疏信号可表示为: x=[x1T,x2T,…,xBT]Tx=[x_1^T,x_2^T,…,x_B^T]^Tx=[x1T ,x2T ,…,xBT

By Ne0inhk

二分查找实战:LeetCode样题精解

1.lecode例题:https://leetcode.cn/problems/binary-search/solutions/980494/er-fen-cha-zhao-by-leetcode-solution-f0xw 2.解题思路: 找到target并返回target的索引下标,想用bisect二分。首先理解bisect的语法,给定一个单调不减的有序数组a,返回恰好严格大于x的下标位置。但这里有所区别,题目要求是刚好等于target的位置,所以我想用bisect变形。即题目转化为敲好大于等于target的下标位置,输入bisect(a,target-1) 刚开始我还输入了nums n m Q等数据输入板块,第一次做lecode题库,初尝新,知道了lecode不需要数据输入模块,前面两行代码是平台预设的框架,用户只需关注算法本身逻辑 3.过程错误与修正: a.过程错误 (前三行快读模板熟练敲打) b.错误分析解读(two methods) 1.from bisect import * 对应index=bisect_left(nums,

By Ne0inhk