HTML+CSS+JS知识点大全(三)

简介: 教程来源 https://xcfsr.cn/category/software-dev.html 本节系统讲解JavaScript基础:涵盖语言特性(动态/弱类型、原型继承、函数一等公民、异步编程)、引入方式(内联/内部/外部脚本及async/defer/module)、变量声明(var/let/const)、八大数据类型与检测、运算符、流程控制、函数(声明/表达式/箭头/闭包)及常用数组方法,夯实前端开发核心功底。

第三部分:JavaScript

四、JavaScript基础

4.1 什么是JavaScript?
JavaScript是一种轻量级的解释型脚本语言,最初为网页添加交互功能而设计。如今,JavaScript不仅能在浏览器中运行,还可以在服务器端(Node.js)、移动端(React Native)、桌面应用(Electron)等多种环境中使用。

核心特性:
动态类型:变量类型可以在运行时改变
弱类型:支持隐式类型转换
解释执行:逐行解释执行,无需编译
基于原型:使用原型链实现继承
函数是一等公民:函数可以作为参数和返回值
异步编程:支持回调、Promise、async/await
4.2 JavaScript引入方式

<!-- 方式一:内联脚本(不推荐) -->
<button onclick="alert('Hello')">点击</button>

<!-- 方式二:内部脚本 -->
<script>
    console.log('Hello, World!');
    document.write('Hello');
</script>

<!-- 方式三:外部脚本(推荐) -->
<script src="script.js"></script>

<!-- 异步加载(不阻塞HTML解析) -->
<script src="async.js" async></script>

<!-- 延迟加载(HTML解析完成后执行) -->
<script src="defer.js" defer></script>

<!-- 模块化脚本 -->
<script type="module">
    import { myFunction } from './module.js';
    myFunction();
</script>

<!-- 无脚本提示 -->
<noscript>
    您的浏览器不支持JavaScript,请启用JavaScript以获得最佳体验。
</noscript>

4.3 变量与数据类型

// ========== 变量声明 ==========

// var:函数作用域,存在变量提升(不推荐使用)
var oldWay = "旧的声明方式";
console.log(hoisted); // undefined(变量提升)
var hoisted = "被提升的变量";

// let:块级作用域,无变量提升(推荐)
let name = "张三";
let age = 25;
let isActive = true;

// const:块级作用域,常量(声明时必须赋值,不可重新赋值)
const PI = 3.14159;
const config = {
    apiUrl: "https://api.example.com",
    timeout: 5000
};
// config = {}; // 错误:不能重新赋值
config.timeout = 10000; // 可以修改属性

// ========== 数据类型 ==========

// 1. Number(数字):整数和浮点数
let integer = 42;
let float = 3.14;
let negative = -10;
let infinity = Infinity;
let notANumber = NaN;  // 非数字

// 2. String(字符串)
let single = '单引号字符串';
let double = "双引号字符串";
let template = `模板字符串,可以嵌入变量:${name}`;

// 3. Boolean(布尔值)
let isTrue = true;
let isFalse = false;

// 4. Undefined(未定义)
let undefinedVar;
console.log(undefinedVar); // undefined

// 5. Null(空值)
let empty = null;

// 6. Symbol(ES6,唯一值)
let sym1 = Symbol('id');
let sym2 = Symbol('id');
console.log(sym1 === sym2); // false

// 7. BigInt(大整数)
let bigNumber = 9007199254740991n;

// 8. Object(对象)
let person = {
    name: "张三",
    age: 25,
    hobbies: ["阅读", "音乐"]
};

// 9. Array(数组)
let fruits = ["苹果", "香蕉", "橙子"];

// 10. Function(函数)
function greet() {
    console.log("Hello!");
}

// ========== 类型检测 ==========
console.log(typeof 42);           // "number"
console.log(typeof "hello");      // "string"
console.log(typeof true);         // "boolean"
console.log(typeof undefined);    // "undefined"
console.log(typeof null);         // "object"(著名的语言缺陷)
console.log(typeof {});           // "object"
console.log(typeof []);           // "object"
console.log(typeof function(){}); // "function"

// 更准确的类型检测
Array.isArray([]);  // true
Object.prototype.toString.call([]); // "[object Array]"

// ========== 类型转换 ==========

// 显式转换
Number("123");      // 123
String(123);        // "123"
Boolean(0);         // false
Boolean("hello");   // true

// 隐式转换
"5" + 3;   // "53"(字符串拼接)
"5" - 3;   // 2(算术运算)
"5" * "2"; // 10
"hello" - 1; // NaN

4.4 运算符

// 算术运算符
let a = 10, b = 3;
a + b;   // 13
a - b;   // 7
a * b;   // 30
a / b;   // 3.333...
a % b;   // 1(取余)
a ** b;  // 1000(幂运算)

// 赋值运算符
let x = 5;
x += 3;   // x = x + 3 = 8
x -= 2;   // x = x - 2 = 6
x *= 2;   // x = x * 2 = 12
x /= 3;   // x = x / 3 = 4
x %= 2;   // x = x % 2 = 0

// 比较运算符
5 == "5";    // true(宽松相等,会类型转换)
5 === "5";   // false(严格相等,不转换类型)
5 != "5";    // false
5 !== "5";   // true
5 > 3;       // true
5 < 3;       // false
5 >= 5;      // true
5 <= 3;      // false

// 逻辑运算符
true && false;   // false(与)
true || false;   // true(或)
!true;           // false(非)

// 短路运算
let user = null;
let name = user && user.name;  // null(如果左边为假,返回左边)
let port = config.port || 3000; // 默认值

// 三元运算符
let status = age >= 18 ? "成年" : "未成年";

// 空值合并运算符(??)
let value = input ?? "默认值";  // 只有null/undefined时使用默认值

// 可选链操作符(?.)
let userName = user?.profile?.name;  // 安全访问深层属性

4.5 流程控制

// if-else语句
let score = 85;
if (score >= 90) {
    console.log("优秀");
} else if (score >= 80) {
    console.log("良好");
} else if (score >= 60) {
    console.log("及格");
} else {
    console.log("不及格");
}

// switch语句
let day = 3;
switch (day) {
    case 1:
        console.log("星期一");
        break;
    case 2:
        console.log("星期二");
        break;
    case 3:
        console.log("星期三");
        break;
    default:
        console.log("其他");
}

// for循环
for (let i = 0; i < 5; i++) {
    console.log(i);
}

// for...of(遍历可迭代对象)
let arr = [1, 2, 3, 4, 5];
for (let item of arr) {
    console.log(item);
}

// for...in(遍历对象属性)
let person = { name: "张三", age: 25 };
for (let key in person) {
    console.log(key + ": " + person[key]);
}

// while循环
let i = 0;
while (i < 5) {
    console.log(i);
    i++;
}

// do-while循环(至少执行一次)
let j = 0;
do {
    console.log(j);
    j++;
} while (j < 5);

// break和continue
for (let i = 0; i < 10; i++) {
    if (i === 5) break;      // 跳出循环
    if (i % 2 === 0) continue; // 跳过本次迭代
    console.log(i);
}

4.6 函数

// ========== 函数声明 ==========

// 函数声明(存在提升)
function add(a, b) {
    return a + b;
}

// 函数表达式
const subtract = function(a, b) {
    return a - b;
};

// 箭头函数(ES6)
const multiply = (a, b) => a * b;
const divide = (a, b) => {
    if (b === 0) {
        throw new Error("除数不能为零");
    }
    return a / b;
};

// 立即执行函数(IIFE)
(function() {
    console.log("立即执行");
})();

// ========== 参数 ==========

// 默认参数
function greet(name = "匿名") {
    console.log(`你好,${name}`);
}

// 剩余参数
function sum(...numbers) {
    return numbers.reduce((total, num) => total + num, 0);
}
sum(1, 2, 3, 4); // 10

// 解构参数
function setUser({ name, age, email = "默认邮箱" }) {
    console.log(name, age, email);
}
setUser({ name: "张三", age: 25 });

// ========== 闭包 ==========
function createCounter() {
    let count = 0;
    return {
        increment: () => ++count,
        decrement: () => --count,
        getCount: () => count
    };
}
const counter = createCounter();
counter.increment(); // 1
counter.increment(); // 2
counter.getCount();  // 2

4.7 数组方法

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

// 遍历
arr.forEach(item => console.log(item));

// 映射
let doubled = arr.map(x => x * 2);  // [2,4,6,8,10]

// 过滤
let evens = arr.filter(x => x % 2 === 0);  // [2,4]

// 归并
let sum = arr.reduce((acc, cur) => acc + cur, 0);  // 15

// 查找
let firstEven = arr.find(x => x % 2 === 0);  // 2

// 判断
let hasEven = arr.some(x => x % 2 === 0);   // true
let allPositive = arr.every(x => x > 0);    // true

// 数组操作
arr.push(6);        // 尾部添加
arr.pop();          // 尾部删除
arr.unshift(0);     // 头部添加
arr.shift();        // 头部删除
arr.splice(1, 2);   // 删除元素
arr.slice(1, 3);    // 切片

HTML、CSS和JavaScript是Web开发的三大基石。HTML构建页面结构,CSS负责视觉呈现,JavaScript实现交互功能。掌握这三门技术是成为前端开发者的必经之路。本文从基础语法到高级特性,从理论概念到实战技巧,系统性地梳理了三大技术的核心知识点。希望这篇文章能够帮助你建立完整的前端知识体系,在实际开发中游刃有余。
来源:
https://xcfsr.cn/

相关文章
|
13天前
|
人工智能 JSON 机器人
让龙虾成为你的“公众号分身” | 阿里云服务器玩Openclaw
本文带你零成本玩转OpenClaw:学生认证白嫖6个月阿里云服务器,手把手配置飞书机器人、接入免费/高性价比AI模型(NVIDIA/通义),并打造微信公众号“全自动分身”——实时抓热榜、AI选题拆解、一键发布草稿,5分钟完成热点→文章全流程!
11459 124
让龙虾成为你的“公众号分身” | 阿里云服务器玩Openclaw
|
2天前
|
人工智能 JSON 监控
Claude Code 源码泄露:一份价值亿元的 AI 工程公开课
我以为顶级 AI 产品的护城河是模型。读完这 51.2 万行泄露的源码,我发现自己错了。
3483 8
|
1天前
|
人工智能 数据可视化 安全
王炸组合!阿里云 OpenClaw X 飞书 CLI,开启 Agent 基建狂潮!(附带免费使用6个月服务器)
本文详解如何用阿里云Lighthouse一键部署OpenClaw,结合飞书CLI等工具,让AI真正“动手”——自动群发、生成科研日报、整理知识库。核心理念:未来软件应为AI而生,CLI即AI的“手脚”,实现高效、安全、可控的智能自动化。
1336 2
王炸组合!阿里云 OpenClaw X 飞书 CLI,开启 Agent 基建狂潮!(附带免费使用6个月服务器)
|
13天前
|
人工智能 IDE API
2026年国内 Codex 安装教程和使用教程:GPT-5.4 完整指南
Codex已进化为AI编程智能体,不仅能补全代码,更能理解项目、自动重构、执行任务。本文详解国内安装、GPT-5.4接入、cc-switch中转配置及实战开发流程,助你从零掌握“描述需求→AI实现”的新一代工程范式。(239字)
7471 139
|
2天前
|
云安全 供应链 安全
Axios投毒事件:阿里云安全复盘分析与关键防护建议
阿里云云安全中心和云防火墙第一时间响应
1144 0
|
3天前
|
人工智能 自然语言处理 数据挖掘
零基础30分钟搞定 Claude Code,这一步90%的人直接跳过了
本文直击Claude Code使用痛点,提供零基础30分钟上手指南:强调必须配置“工作上下文”(about-me.md+anti-ai-style.md)、采用Cowork/Code模式、建立标准文件结构、用提问式提示词驱动AI理解→规划→执行。附可复制模板与真实项目启动法,助你将Claude从聊天工具升级为高效执行系统。
|
2天前
|
人工智能 定位技术
Claude Code源码泄露:8大隐藏功能曝光
2026年3月,Anthropic因配置失误致Claude Code超51万行源码泄露,意外促成“被动开源”。代码中藏有8大未发布功能,揭示其向“超级智能体”演进的完整蓝图,引发AI编程领域震动。(239字)
2157 9
|
11天前
|
人工智能 并行计算 Linux
本地私有化AI助手搭建指南:Ollama+Qwen3.5-27B+OpenClaw阿里云/本地部署流程
本文提供的全流程方案,从Ollama安装、Qwen3.5-27B部署,到OpenClaw全平台安装与模型对接,再到RTX 4090专属优化,覆盖了搭建过程的每一个关键环节,所有代码命令可直接复制执行。使用过程中,建议优先使用本地模型保障隐私,按需切换云端模型补充功能,同时注重显卡温度与显存占用监控,确保系统稳定运行。
2555 9