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/

相关文章
layUI数据表格可编辑表格单元格值修改之后获取修改前的值
layUI数据表格可编辑表格单元格值修改之后获取修改前的值
906 0
|
JavaScript Java 数据格式
Layui数据表格(table)前后台交互
Layui数据表格(table)前后台交互
987 0
|
前端开发 网络安全 数据库
使用layui弹框实现添加时,当添加成功之后如何进行关闭当前窗口刷新父页面的数据
使用layui弹框实现添加时,当添加成功之后如何进行关闭当前窗口刷新父页面的数据
|
3月前
|
存储 程序员 Linux
初级程序员必备的十大技能之 Git 版本控制(一)
教程来源 http://xcfsr.cn Git是程序员的“后悔药”与“时光机”:可随时回退错误修改、隔离并行开发、一键恢复稳定版本。作为分布式版本控制系统,它本地全量存储、离线可用、安全可靠,支撑全球90%以上团队高效协作。
|
4月前
|
前端开发 JavaScript API
前端组件库Layui知识点大全(一)
教程来源 https://hllft.cn/category/artificial-intelligence.html Layui是由国内开发者“贤心”于2016年推出的开源前端UI框架,秉持“返璞归真”理念,不依赖Webpack等工程化工具,基于原生HTML/CSS/JS与轻量模块化规范,专为后端开发者、初学者及追求高效开发的群体设计,低门槛、拿来即用。
|
4月前
|
人工智能 API 网络安全
新手零基础|阿里云计算巢部署OpenClaw+WhatsApp集成+千问Qwen3.6-Plus保姆级全攻略
2026年,开源AI智能体框架OpenClaw(曾用名Clawdbot,因形象被称为“小龙虾”)凭借“本地优先、主动执行、多渠道接入”的核心特性,成为个人与中小企业搭建专属AI助手的首选方案。它不局限于传统对话交互,而是能通过自然语言理解完成任务规划、工具调用、自动化执行,覆盖办公提效、客户服务、内容创作等全场景。
720 2
|
4月前
|
数据采集 监控 API
1688按图搜款神器!Open Claw 拍立淘API,图片一键找同款货源(附Python源码)
电商人找1688同款货源太难?关键词不准、翻页耗时、比价繁琐、爆款跟不上!Open Claw 1688按图搜索API(拍立淘)一键解决:上传图片,秒出同款列表,支持销量/价格排序、一件代发筛选、自动返回价格销量等关键数据,效率提升100倍,新手5分钟上手!
|
4月前
|
开发工具 C++ git
Visual Studio Code 2025 代码编辑器安装教程:详细步骤+自定义路径+中文汉化(64位)
VS Code是轻量强大的开源代码编辑器,支持调试、语法高亮、Git集成、智能补全等。本文详解2025版64位安装流程(含解压、管理员运行、路径设置、快捷方式创建)及官方简体中文汉化步骤,助你快速上手开发。
1026 2
|
存储 数据处理 索引
MATLAB中的基本数据类型与变量操作
【10月更文挑战第1天】 MATLAB 是一种广泛应用于数学计算和科学研究的编程语言,其核心是矩阵运算。本文详细介绍了 MATLAB 中的基本数据类型,包括数值类型(如 `double` 和 `int`)、字符数组、逻辑类型、结构体、单元数组和函数句柄,并通过代码示例展示了变量操作方法。

热门文章

最新文章