当前位置: 首页 > news >正文

前端零基础入门到上班:【Day8】JavaScript 基础语法入门

前端零基础入门到上班:【Day8】JavaScript 基础语法入门(超全!!!)

    • 一、JavaScript 简介
    • 二、引入 JavaScript 的三种方式
    • 三、变量与常量(var、let、const)
      • 3.1 var (传统方式)
      • 3.2 let (ES6新标准)
      • 3.3 const (常量)
    • 四、数据类型
      • 4.1 基本类型(值类型)
      • 4.2 引用类型(对象类型)
    • 五、运算符
      • 5.1 算术运算符
      • 5.2 赋值运算符
      • 5.3 比较运算符
      • 5.4 逻辑运算符
    • 六、流程控制
      • 6.1 条件语句
        • if-else
        • switch
      • 6.2 循环语句
        • for
        • while
        • do-while
    • 七、函数基础
      • 7.1 函数的定义
      • 7.2 带参数和返回值
      • 7.3 箭头函数(ES6新语法)
    • 八、注释规则
    • 九、小案例练习:判断奇偶数
  • 第一小结
    • 十、变量提升详解
      • 10.1 什么是变量提升?
      • 10.2 let 和 const 不存在变量提升
    • 十一、let 和 const 的细节陷阱
      • 11.1 块级作用域
      • 11.2 const 声明引用类型的“对象”
    • 十二、数据类型更深层
      • 12.1 typeof 返回值总结
      • 12.2 引用类型的比较
    • 十三、运算符更深入
      • 13.1 短路运算
      • 13.2 三元运算符
    • 十四、流程控制更深入
      • 14.1 break 和 continue
      • 14.2 嵌套循环
    • 十五、函数更高级
      • 15.1 函数表达式
      • 15.2 匿名函数
      • 15.3 回调函数
    • 十六、作用域和作用域链
      • 16.1 什么是作用域?
      • 16.2 什么是作用域链?
    • 十七、闭包基础
      • 17.1 什么是闭包?
    • 十八、小实战
      • 18.1 简易登录验证
      • 18.2 简易闹钟程序
    • 十九、常见错误总结
  • 第二小结
    • 二十、switch 语句
    • 二十一、数组遍历方法大全
      • 21.1 forEach 遍历数组
      • 21.2 for...in 遍历对象/数组
      • 21.3 for...of 遍历数组(ES6)
    • 二十二、Math对象常用方法
    • 二十三、Date 时间对象基础
    • 二十四、字符串常用API
    • 二十五、数组常用API
    • 二十六、对象操作 (ES5)
      • 26.1 Object.keys()
      • 26.2 Object.values()
    • 二十七、JSON基础操作
    • 二十八、定时器 setTimeout / setInterval
      • 28.1 延迟执行
      • 28.2 循环执行
    • 二十九、错误处理 try...catch
    • 三十、小案例:猜数字游戏
    • 三十一、小面试题整理(基础)
  • 总结✅
  • 感谢阅读

一、JavaScript 简介

JavaScript 是一门脚本语言,最初为了让网页动起来而诞生。
随着发展,它不仅能操作网页(DOM),还能做服务器开发(Node.js)、小程序开发、桌面应用、移动端应用等等。

特点总结:

  • 解释型语言,无需编译,浏览器直接执行
  • 弱类型语言(变量类型可以变化)
  • 面向对象、函数式编程
  • 主要运行在客户端(也能在服务器端运行)

💬 简单记忆
JavaScript 让网页动起来 + 也能做服务器和 App!


二、引入 JavaScript 的三种方式

  1. 行内式(直接写在 HTML 标签的属性中)
<button onclick="alert('你好,世界!')">点我</button>
  1. 内部式(写在 <script> 标签内部)
<!DOCTYPE html>
<html>
<head><title>内部式示例</title>
</head>
<body><script>console.log('Hello World');</script>
</body>
</html>
  1. 外部式(写在单独的 .js 文件中,再用 <script src=""> 引入)

index.html:

<script src="main.js"></script>

main.js:

console.log('这是外部文件引入的 JS!');

🌟推荐使用外部式,方便管理代码,清晰整洁!


三、变量与常量(var、let、const)

3.1 var (传统方式)

var name = "Tom";
console.log(name);

特点:

  • 可以重复声明
  • 存在变量提升(会提前到作用域顶部)
console.log(a); // undefined
var a = 10;

3.2 let (ES6新标准)

let age = 18;
console.log(age);

特点:

  • 不允许重复声明
  • 块级作用域(花括号内有效)
  • 没有变量提升

3.3 const (常量)

const PI = 3.14;

特点:

  • 声明后不能改变
  • 必须赋初值
const name = "张三";
// name = "李四"; ❌ 错误,不能修改

四、数据类型

JavaScript 有两大类数据类型:

4.1 基本类型(值类型)

  • Number:数字
  • String:字符串
  • Boolean:布尔值
  • Null:空
  • Undefined:未定义
  • Symbol(ES6)
  • BigInt(ES2020)

示例:

let num = 100;
let str = "前端";
let flag = true;
let empty = null;
let notDefined;

4.2 引用类型(对象类型)

  • Object(对象)
  • Array(数组)
  • Function(函数)
  • Date(日期)

示例:

let person = { name: "小明", age: 20 };
let hobbies = ["打球", "看电影"];
let sayHi = function() { alert("Hi!"); }

五、运算符

5.1 算术运算符

运算符说明示例
+1 + 2
-5 - 3
*4 * 6
/8 / 2
%取余9 % 4

5.2 赋值运算符

运算符说明示例
=赋值x = 5
+=加后赋值x += 3 等价于 x = x + 3

其他:-=, *=, /=, %=

5.3 比较运算符

运算符说明
==等于(会进行类型转换)
===全等(值和类型都要相同)✅ 推荐使用
!=不等于
!==不全等
>, <, >=, <=大小比较

示例:

console.log(5 == "5");  // true
console.log(5 === "5"); // false

5.4 逻辑运算符

运算符说明示例
&&与(and)true && false -> false
||或(or)true || false -> true
!非(not)!true -> false

六、流程控制

6.1 条件语句

if-else
let score = 85;
if (score >= 90) {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("未知");
}

6.2 循环语句

for
for (let i = 1; i <= 5; i++) {console.log(i);
}
while
let i = 1;
while (i <= 5) {console.log(i);i++;
}
do-while
let j = 1;
do {console.log(j);j++;
} while (j <= 5);

七、函数基础

7.1 函数的定义

function greet() {console.log("你好!");
}
greet();

7.2 带参数和返回值

function add(x, y) {return x + y;
}
let result = add(3, 5);
console.log(result); // 8

7.3 箭头函数(ES6新语法)

const multiply = (a, b) => a * b;
console.log(multiply(2, 3)); // 6

八、注释规则

  • 单行注释://
  • 多行注释:/* */

示例:

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

九、小案例练习:判断奇偶数

练习题目:输入一个数字,判断是奇数还是偶数。

示例代码:

let num = prompt("请输入一个数字");
if (num % 2 == 0) {alert("这是一个偶数");
} else {alert("这是一个奇数");
}

prompt() 是浏览器弹窗输入框)


第一小结

我们学习了 掌握了变量、数据类型、运算符、条件循环、函数等知识。


十、变量提升详解

10.1 什么是变量提升?

变量声明(var 声明的变量)和函数声明会被提升到作用域顶部。

示例:

console.log(name); // undefined
var name = "小王";

解析:
实际上浏览器会这样理解你的代码:

var name;
console.log(name); // undefined
name = "小王";

注意:只提升声明不会提升赋值


10.2 let 和 const 不存在变量提升

console.log(age); // 报错:ReferenceError
let age = 18;

原因
let 和 const 在声明之前是“暂时性死区”,不能访问。


十一、let 和 const 的细节陷阱

11.1 块级作用域

let/const 声明的变量只在它所在的代码块 {} 内有效。

{let a = 10;
}
console.log(a); // 报错:a is not defined

11.2 const 声明引用类型的“对象”

对象的属性可以改动,但对象的引用地址不能变。

const person = { name: "张三" };
person.name = "李四";  // ✅ 可以改属性
// person = {};  ❌ 错误,不能整体赋值新对象

十二、数据类型更深层

12.1 typeof 返回值总结

数据typeof 返回
number“number”
string“string”
boolean“boolean”
undefined“undefined”
null“object” (注意!
array“object”
object“object”
function“function”

重点注意

  • typeof null 返回 "object" —— 这是历史遗留的设计错误!

如果要判断数组可以用:

Array.isArray(arr); // true

12.2 引用类型的比较

引用类型(如对象、数组、函数)比较的是地址而不是内容!

let obj1 = { a: 1 };
let obj2 = { a: 1 };
console.log(obj1 == obj2); // false
console.log(obj1 === obj2); // false

即使内容一模一样,它们也是两个不同的对象!


十三、运算符更深入

13.1 短路运算

  • &&(与运算):第一个为 false,返回第一个;否则返回第二个。
  • ||(或运算):第一个为 true,返回第一个;否则返回第二个。

示例:

console.log(0 && 5);   // 0
console.log(3 && 5);   // 5
console.log(0 || 5);   // 5
console.log(3 || 5);   // 3

常用于设置默认值:

let name = userInput || "默认值";

13.2 三元运算符

条件表达式 ? 表达式1 : 表达式2;

示例:

let age = 20;
let result = age >= 18 ? "成年人" : "未成年人";
console.log(result); // 成年人

十四、流程控制更深入

14.1 break 和 continue

  • break:立即跳出整个循环
  • continue:跳过本次循环,进入下一次

示例:

for (let i = 1; i <= 5; i++) {if (i === 3) {continue; // 跳过 i==3}console.log(i);
}

输出:

1
2
4
5

14.2 嵌套循环

for (let i = 1; i <= 3; i++) {for (let j = 1; j <= 3; j++) {console.log(`i=${i}, j=${j}`);}
}

十五、函数更高级

15.1 函数表达式

const add = function(x, y) {return x + y;
};
console.log(add(2, 3));

特点:函数可以赋值给变量


15.2 匿名函数

没有名字的函数:

setTimeout(function() {console.log('延迟2秒输出');
}, 2000);

15.3 回调函数

把一个函数作为参数传给另一个函数。

function greeting(name) {alert('Hello ' + name);
}function processUserInput(callback) {let name = prompt('请输入你的名字');callback(name);
}processUserInput(greeting);

十六、作用域和作用域链

16.1 什么是作用域?

作用域就是变量生效的范围

  • 全局作用域
  • 函数作用域
  • 块级作用域(let、const)

16.2 什么是作用域链?

如果当前作用域找不到变量,就会向外层作用域查找,直到全局。

示例:

let a = 10;
function outer() {let b = 20;function inner() {console.log(a); // 10 (向外找到了)console.log(b); // 20}inner();
}
outer();

十七、闭包基础

17.1 什么是闭包?

闭包是:函数内部返回一个函数,并且这个返回的函数仍然可以访问外部函数的变量。

示例:

function outer() {let count = 0;return function() {count++;console.log(count);}
}
let counter = outer();
counter(); // 1
counter(); // 2

闭包应用场景

  • 延长局部变量的生命周期
  • 封装私有变量

十八、小实战

18.1 简易登录验证

let username = prompt("请输入用户名");
let password = prompt("请输入密码");if (username === "admin" && password === "123456") {alert("登录成功!");
} else {alert("用户名或密码错误!");
}

18.2 简易闹钟程序

setTimeout(function() {alert("时间到啦!");
}, 5000); // 5秒后弹出

十九、常见错误总结

错误情况原因
使用未声明变量使用变量前必须声明
忘记加分号JS 会自动补全,但可能出错
if/for 后忘记加 {}建议始终加上花括号
区分 == 和 ===推荐永远用 ===
忘记 break 导致 switch 穿透每个 case 后加 break

第二小结

✅ 本篇巨细无遗地讲完了 JavaScript 基础语法(加强版)
✅ 帮你打下了扎实的地基
✅ 还穿插了小案例帮助理解


二十、switch 语句

switch 语句用来基于不同的值执行不同的代码块,适合多条件判断。

let color = "green";switch (color) {case "red":console.log("红色");break;case "green":console.log("绿色");break;case "blue":console.log("蓝色");break;default:console.log("未知颜色");
}

注意

  • 每个 case 后面通常需要 break
  • 没有 break 会继续往下执行(case 穿透)。

二十一、数组遍历方法大全

21.1 forEach 遍历数组

let arr = [1, 2, 3];
arr.forEach(function(item, index) {console.log(index, item);
});

特点:

  • 遍历数组每一项
  • 无法中途跳出循环(break 不起作用)

21.2 for…in 遍历对象/数组

let person = {name: "小明", age: 18};
for (let key in person) {console.log(key, person[key]);
}

注意

  • for...in 是遍历对象的属性名
  • 遍历数组时可能顺带遍历原型链上的属性(一般不用它遍历数组)

21.3 for…of 遍历数组(ES6)

let arr = ["a", "b", "c"];
for (let item of arr) {console.log(item);
}

特点:

  • 直接拿到数组的每一项
  • 不适合对象遍历

二十二、Math对象常用方法

JavaScript 提供了 Math 对象,封装了数学运算常用方法。

console.log(Math.PI); // 圆周率
console.log(Math.round(4.5)); // 四舍五入 5
console.log(Math.floor(4.9)); // 向下取整 4
console.log(Math.ceil(4.1));  // 向上取整 5
console.log(Math.random());   // 0~1随机小数
console.log(Math.max(1, 99, 88)); // 最大值
console.log(Math.min(1, 99, 88)); // 最小值

👉 常见应用:生成随机整数

let rand = Math.floor(Math.random() * 100); // 0-99随机整数
console.log(rand);

二十三、Date 时间对象基础

获取当前时间:

let now = new Date();
console.log(now);

常用方法:

console.log(now.getFullYear()); // 年
console.log(now.getMonth() + 1); // 月(注意:0~11)
console.log(now.getDate());     // 日
console.log(now.getHours());    // 小时
console.log(now.getMinutes());  // 分钟
console.log(now.getSeconds());  // 秒

格式化输出(自己拼接):

let dateStr = now.getFullYear() + "-" + (now.getMonth() + 1) + "-" + now.getDate();
console.log(dateStr);

二十四、字符串常用API

let str = "hello world";console.log(str.length);     // 长度
console.log(str.toUpperCase()); // 转大写
console.log(str.toLowerCase()); // 转小写
console.log(str.indexOf("world")); // 查找子串位置
console.log(str.slice(0, 5));     // 截取字符串
console.log(str.replace("world", "JavaScript")); // 替换内容
console.log(str.split(" "));  // 按空格分割成数组

二十五、数组常用API

let arr = [1, 2, 3];// 添加/删除
arr.push(4);  // 尾部添加
arr.pop();    // 尾部删除
arr.unshift(0); // 头部添加
arr.shift();   // 头部删除// 拼接新数组
let arr2 = arr.concat([5,6]);// 截取部分
let part = arr.slice(1,3);// 遍历映射
let newArr = arr.map(function(item){return item * 2;
});

二十六、对象操作 (ES5)

26.1 Object.keys()

返回对象所有可枚举属性名数组:

let obj = {a:1, b:2};
console.log(Object.keys(obj)); // ["a", "b"]

26.2 Object.values()

返回对象所有属性值数组:

console.log(Object.values(obj)); // [1, 2]

二十七、JSON基础操作

JavaScript 原生支持 JSON:

  • 对象转字符串:JSON.stringify
  • 字符串转对象:JSON.parse
let person = {name: "Tom", age: 20};let str = JSON.stringify(person);
console.log(str); // '{"name":"Tom","age":20}'let obj = JSON.parse(str);
console.log(obj.name); // Tom

二十八、定时器 setTimeout / setInterval

28.1 延迟执行

setTimeout(function(){console.log("3秒后执行");
}, 3000);

28.2 循环执行

let timer = setInterval(function(){console.log("每隔2秒执行一次");
}, 2000);// 停止循环
clearInterval(timer);

二十九、错误处理 try…catch

异常捕获机制,防止程序直接崩溃。

try {let x = y + 1; // y未定义,报错
} catch(error) {console.log("出错啦:" + error.message);
}

三十、小案例:猜数字游戏

let answer = Math.floor(Math.random() * 100) + 1;
let guess;while (true) {guess = parseInt(prompt("猜一个1到100的数字:"));if (guess > answer) {alert("太大了!");} else if (guess < answer) {alert("太小了!");} else {alert("恭喜你,猜对了!");break;}
}

三十一、小面试题整理(基础)

题目简答
typeof null 是什么?“object”(历史Bug)
var、let、const 区别?var 有提升,let/const 有块级作用域
== 和 === 区别?== 会类型转换,=== 不会
什么是闭包?函数内部返回函数并引用外部变量
怎么判断数组?Array.isArray(arr)

总结✅

经过今天【Day8】的系统学习,我们已经完成了 JavaScript 入门阶段最关键的一步:

✅ 理解了 JavaScript 的基本数据类型与变量声明。
✅ 掌握了流程控制(条件判断、循环)与函数定义调用。
✅ 理解了数组、对象的基础操作和遍历方式。
✅ 学习了内置对象(Math、Date、JSON)和常用API。
✅ 初步掌握了定时器、异常处理、基础案例练习。
✅ 同时,还补充了常见面试题,夯实基础。

这一套内容,既覆盖了理论知识,又贯穿了实战技巧,可以说打下了非常扎实的基础。
JavaScript入门,已经可以小试牛刀了!

真正优秀的开发者,从来都是在基础阶段用力扎根。
你认真学的每一行代码,未来都会开花结果。


感谢阅读

感谢你坚持认真学习到这里!
每一次翻阅到这里,都是对自己最好的投资。

  • 如果有不懂的地方,欢迎随时留言/私信交流!📩
  • 如果内容对你有帮助,记得点个赞收藏支持一下!🌟
  • 你的每一份认真和坚持,未来都会让你闪闪发光!✨

在接下来的【Day9】中,我们将继续前进——进入JavaScript进阶篇
探索更高级的数组方法、对象深度操作、函数闭包与作用域链的奥秘。

别急,一步步来,未来可期!
咱们下节继续冲刺!🚀🚀🚀

相关文章:

  • 面试题】找出两个整数 a,b 中的较大者
  • 【机器学习驱动的智能化电池管理技术与应用】
  • package.json script 中的 prepare 脚本的作用是什么
  • 00-算法打卡-目录
  • ReACT Agent 实战
  • 关于 React Fiber 架构、Hooks 原理
  • Python爬虫(8)Python数据存储实战:JSON文件读写与复杂结构化数据处理指南
  • pycharm无法创建venv虚拟环境
  • 大模型图像编辑那家强?
  • Centos8 安装 Docker
  • ​​全栈自动化:从零构建智能CI/CD流水线​
  • 多模态常见面试题
  • HTML倒数
  • 使用 MediaPipe 和 OpenCV 快速生成人脸掩膜(Face Mask)
  • 为什么选择 Spring Boot? 它是如何简化单个微服务的创建、配置和部署的?
  • PROXY_ARP在CALICO网络中的应用
  • OpenCV进阶操作:图像金字塔
  • rt-linux下的cgroup cpu的死锁bug
  • 解决SSLError: [SSL: DECRYPTION_FAILED_OR_BAD_RECORD_MAC] decryption faile的问题
  • 【AI模型学习】GPT——从v1到v3
  • 淮安四韵·名城新章: 网络名人领略“运河之都”魅力
  • 著名统计学家、北京工业大学应用数理学院首任院长王松桂逝世
  • “五一”假期云南铁路预计发送旅客超330万人次
  • 三部门提出17条举措,全力促进高校毕业生等青年就业创业
  • 央行:25日将开展6000亿元MLF操作,期限为1年期
  • 研究显示:日行9000步最高可将癌症风险降低26%