JavaScript基础

文章目录

JavaScript基础

JavaScript(简称JS)是一门跨平台、面向对象的编程语言,主要用于实现网页交互逻辑,也是现代Web开发的三大核心技术(HTML结构、CSS样式、JS交互)之一。如今,JavaScript不仅能运行在浏览器中,还能通过Node.js运行在服务器端,甚至用于移动应用、桌面应用开发。

本文从“基础语法→核心概念→简单交互”三个维度,带你快速掌握JavaScript的核心基础知识。

一、JavaScript的运行环境与入门

要学习JavaScript,首先需要了解它的运行环境和最基本的执行方式。

1. 运行环境
  • 浏览器:JavaScript最常用的环境,通过<script>标签嵌入HTML中执行。
  • Node.js:服务器端运行环境,需安装Node.js后通过终端执行JS文件。
2. 第一个JS程序

最简单的方式是在浏览器控制台直接运行代码,或通过HTML文件引入。

方式1:浏览器控制台(推荐新手调试)

  • 打开任意网页,按F12Ctrl+Shift+I打开开发者工具,切换到“Console”(控制台)面板,直接输入代码并回车执行:
    console.log("Hello, JavaScript!"); // 输出:Hello, JavaScript!
    

方式2:嵌入HTML文件
创建一个.html文件,通过<script>标签编写JS代码:

<!DOCTYPE html>
<html>
<body>
  <h1>我的第一个JS页面</h1>
  <!-- JS代码写在script标签中 -->
  <script>
    // 向页面输出内容
    document.write("Hello, World!"); 
    // 向控制台输出内容
    console.log("这是控制台信息");
  </script>
</body>
</html>

用浏览器打开该文件,页面会显示“Hello, World!”,控制台(F12打开)会显示“这是控制台信息”。

二、变量与数据类型

变量是存储数据的容器,JavaScript是弱类型语言(变量类型可动态变化),无需提前声明类型。

1. 变量声明

ES6(2015年)后,推荐使用letconst声明变量,替代早期的var(避免作用域问题)。

声明方式特点适用场景
let可重新赋值,块级作用域值可能变化的变量(如计数器、临时变量)
const不可重新赋值(常量),块级作用域值固定的变量(如配置项、常量)

示例:变量声明与赋值

// 用let声明可修改的变量
let age = 18;
age = 19; // 正确:可以重新赋值
console.log(age); // 输出:19

// 用const声明不可修改的常量
const pi = 3.14;
// pi = 3.1415; // 错误:const变量不能重新赋值

// 声明时可以不立即赋值(let)
let username;
username = "张三";
console.log(username); // 输出:张三
2. 数据类型

JavaScript有7种基本数据类型和1种引用数据类型,核心区别是:基本类型存储“值”,引用类型存储“地址”(指向内存中的对象)。

类型分类具体类型说明
基本类型String(字符串)文本数据,用单引号'或双引号"包裹(如'hello'"JS"
Number(数字)整数或浮点数(如1003.14),特殊值NaN表示“非数字”
Boolean(布尔)只有true(真)和false(假)两个值
null表示“空值”(主动定义的空)
undefined表示“未定义”(变量声明后未赋值时的默认值)
Symbol唯一标识符(ES6新增,用于对象属性)
BigInt超大整数(ES6新增,解决Number精度限制,如9007199254740993n
引用类型Object(对象)复杂数据集合,包括普通对象、数组、函数等

示例:数据类型使用

// 字符串
let name = "张三";
let message = 'Hello';

// 数字
let score = 95;
let price = 9.9;
let notANumber = NaN; // NaN:非数字(如"abc" - 1的结果)

// 布尔
let isStudent = true;
let hasMoney = false;

// null和undefined
let emptyValue = null; // 主动赋值为空
let unassigned; // 未赋值,默认是undefined

// 对象(引用类型)
let person = { 
  name: "李四", 
  age: 20 
}; // 普通对象
let fruits = ["苹果", "香蕉"]; // 数组(特殊对象)
3. 类型转换

JavaScript会自动进行类型转换(隐式转换),也可手动转换(显式转换)。

隐式转换(运算时自动发生):

console.log(10 + "20"); // 输出:"1020"(数字10转为字符串,拼接)
console.log("20" - 5); // 输出:15(字符串"20"转为数字20,减法)
console.log(!!"hello"); // 输出:true(字符串转为布尔,非空字符串为true)

显式转换(手动控制):

// 转为字符串:String() 或 toString()
let num = 123;
console.log(String(num)); // "123"
console.log(num.toString()); // "123"

// 转为数字:Number() 或 parseInt()/parseFloat()
let str = "456";
console.log(Number(str)); // 456
console.log(parseInt("78.9")); // 78(取整数)
console.log(parseFloat("78.9")); // 78.9(保留小数)

// 转为布尔:Boolean()
console.log(Boolean(0)); // false(0、""、null、undefined、NaN转为false)
console.log(Boolean(" ")); // true(非空字符串为true)

三、运算符与表达式

运算符用于对数据进行计算或操作,表达式是运算符与数据的组合。

1. 算术运算符

用于基本数学运算:+(加)、-(减)、*(乘)、/(除)、%(取余)、++(自增)、--(自减)。

let a = 10, b = 3;
console.log(a + b); // 13
console.log(a - b); // 7
console.log(a * b); // 30
console.log(a / b); // 3.333...
console.log(a % b); // 1(10除以3的余数)

let c = 5;
c++; // 等价于 c = c + 1
console.log(c); // 6
2. 赋值运算符

用于给变量赋值:=+=-=*=/=等。

let x = 10;
x += 5; // 等价于 x = x + 5 → x=15
x *= 2; // 等价于 x = x * 2 → x=30
console.log(x); // 30
3. 比较运算符

用于比较两个值,返回布尔值(true/false):==(相等,忽略类型)、===(全等,严格比较类型和值)、!=(不等)、!==(不全等)、><>=<=

console.log(10 == "10"); // true(只比较值,自动转换类型)
console.log(10 === "10"); // false(类型不同,数字vs字符串)
console.log(5 > 3); // true
console.log(7 <= 7); // true

建议:优先使用===!==,避免隐式类型转换导致的意外结果。

4. 逻辑运算符

用于逻辑判断,返回布尔值或短路结果:&&(与)、||(或)、!(非)。

// &&:两边都为true,结果才为true(短路:左边为false则返回左边)
console.log(true && false); // false
console.log("a" && "b"); // "b"(两边为真,返回最后一个真的值)

// ||:至少一边为true,结果就为true(短路:左边为true则返回左边)
console.log(true || false); // true
console.log("" || "默认值"); // "默认值"(左边为假,返回右边)

// !:取反
console.log(!true); // false
console.log(!0); // true(0是假,取反为真)
5. 三元运算符

简化的条件判断,语法:条件 ? 表达式1 : 表达式2(条件为真返回表达式1,否则返回表达式2)。

let score = 85;
let result = score >= 60 ? "及格" : "不及格";
console.log(result); // "及格"

四、控制流:条件语句与循环

控制流用于控制代码的执行顺序,包括“条件判断”和“循环重复”。

1. 条件语句

根据条件执行不同代码块,常用if-elseswitch

if-else语句(适合范围判断):

let age = 17;

if (age >= 18) {
  console.log("已成年");
} else if (age >= 13) { // 可选:多个条件判断
  console.log("青少年");
} else {
  console.log("儿童");
}
// 输出:青少年

switch语句(适合固定值匹配):

let day = 3;
let dayName;

switch (day) {
  case 1:
    dayName = "周一";
    break; // 跳出switch
  case 2:
    dayName = "周二";
    break;
  case 3:
    dayName = "周三";
    break;
  default: // 所有case不匹配时执行
    dayName = "未知";
}
console.log(dayName); // "周三"
2. 循环语句

重复执行代码块,常用forwhiledo-while

for循环(已知循环次数时使用):
语法:for (初始化; 条件; 更新) { 循环体 }

// 打印1到5
for (let i = 1; i <= 5; i++) {
  console.log(i); // 依次输出1、2、3、4、5
}

// 遍历数组
let fruits = ["苹果", "香蕉", "橙子"];
for (let i = 0; i < fruits.length; i++) {
  console.log(fruits[i]); // 依次输出每个水果
}

while循环(未知循环次数,满足条件时执行):
语法:while (条件) { 循环体 }

let count = 1;
// 打印1到3
while (count <= 3) {
  console.log(count); // 1、2、3
  count++; // 必须更新条件,否则无限循环
}

do-while循环(至少执行一次,再判断条件):

let num = 5;
do {
  console.log(num); // 先执行一次:5
  num++;
} while (num < 5); // 条件不满足,循环结束
3. 循环控制
  • break:立即跳出循环;
  • continue:跳过当前循环,进入下一次。
// break:找到3就停止
for (let i = 1; i <= 5; i++) {
  if (i === 3) {
    break;
  }
  console.log(i); // 1、2
}

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

五、函数:代码复用的核心

函数是可重复使用的代码块,用于封装逻辑,提高代码复用性。

1. 函数的声明与调用

声明方式

  • 函数声明:function 函数名(参数) { 函数体 }
  • 函数表达式:const 函数名 = function(参数) { 函数体 }(ES6前)
  • 箭头函数(ES6):const 函数名 = (参数) => { 函数体 }

示例:函数声明与调用

// 1. 函数声明:计算两数之和
function add(a, b) {
  return a + b; // return返回结果(无return则返回undefined)
}
// 调用函数
let sum = add(3, 5);
console.log(sum); // 8

// 2. 函数表达式:打印问候语
const greet = function(name) {
  console.log(`你好,${name}`);
};
greet("张三"); // 输出:你好,张三!

// 3. 箭头函数:计算平方(简化语法)
const square = (x) => {
  return x * x;
};
// 简化:只有一行return时可省略{}和return
const squareShort = x => x * x; 
console.log(squareShort(4)); // 16
2. 函数参数
  • 形参:函数声明时的参数(如add(a, b)中的ab);
  • 实参:调用函数时传入的参数(如add(3, 5)中的35);
  • 默认参数:参数未传入时使用的默认值(ES6新增);
  • 剩余参数:接收多个参数为数组(用...表示,ES6新增)。

示例:参数高级用法

// 默认参数:如果未传age,默认值为18
function introduce(name, age = 18) {
  console.log(`我叫${name},今年${age}`);
}
introduce("李四"); // 我叫李四,今年18岁
introduce("王五", 20); // 我叫王五,今年20岁

// 剩余参数:接收任意数量的参数,转为数组
function sumAll(...nums) {
  let total = 0;
  for (let num of nums) {
    total += num;
  }
  return total;
}
console.log(sumAll(1, 2, 3)); // 6
console.log(sumAll(10, 20, 30, 40)); // 100

六、对象:复杂数据的载体

对象是键值对的集合,用于存储多个相关数据(属性)和功能(方法),是JavaScript中最核心的数据结构之一。

1. 对象的创建与访问

创建对象(常用字面量方式):

// 字面量创建对象(键值对用逗号分隔)
const person = {
  name: "张三", // 属性:键(name)+ 值("张三")
  age: 20,
  isStudent: true,
  // 方法:函数作为值
  sayHello: function() {
    console.log(`你好,我是${this.name}`); // this指向当前对象
  }
};

访问对象属性/方法

  • 点语法:对象.键
  • 方括号语法:对象["键"](适合键名含特殊字符或变量时)
// 访问属性
console.log(person.name); // "张三"
console.log(person["age"]); // 20

// 调用方法
person.sayHello(); // 输出:你好,我是张三

// 修改属性值
person.age = 21;
console.log(person.age); // 21

// 添加新属性
person.gender = "男";
console.log(person.gender); // "男"

// 删除属性
delete person.isStudent;
console.log(person.isStudent); // undefined
2. 对象的遍历

for...in循环遍历对象的所有键:

const car = {
  brand: "特斯拉",
  price: 300000,
  color: "白色"
};

// 遍历所有键
for (let key in car) {
  console.log(`${key}: ${car[key]}`); 
  // 输出:brand: 特斯拉;price: 300000;color: 白色
}

七、数组:有序数据的集合

数组是有序的元素集合(可包含任意类型数据),通过索引(从0开始)访问,提供了丰富的方法用于操作数据。

1. 数组的创建与访问
// 创建数组(字面量方式最常用)
const numbers = [1, 2, 3, 4, 5]; // 数字数组
const mixed = [1, "hello", true, { name: "张三" }]; // 混合类型数组

// 访问元素(索引从0开始)
console.log(numbers[0]); // 1(第一个元素)
console.log(numbers[2]); // 3(第三个元素)

// 修改元素
numbers[1] = 20;
console.log(numbers); // [1, 20, 3, 4, 5]

// 数组长度(length属性)
console.log(numbers.length); // 5
2. 常用数组方法

数组提供了大量内置方法,简化数据操作(以下为最常用的几个):

方法作用示例
push()在数组末尾添加元素,返回新长度numbers.push(6);[1,20,3,4,5,6]
pop()删除并返回数组最后一个元素numbers.pop(); → 返回6,数组变为[1,20,3,4,5]
shift()删除并返回数组第一个元素numbers.shift(); → 返回1,数组变为[20,3,4,5]
unshift()在数组开头添加元素,返回新长度numbers.unshift(0);[0,20,3,4,5]
slice(start, end)截取数组(不修改原数组),返回子数组numbers.slice(1,3);[20,3]
splice(index, count)从index开始删除count个元素(修改原数组)numbers.splice(1,2); → 删除20、3,数组变为[0,4,5]
forEach()遍历数组,执行回调函数numbers.forEach(item => console.log(item));
map()遍历数组,返回新数组(每个元素经处理后)numbers.map(item => item * 2);[0,8,10]

示例:数组方法实战

const fruits = ["苹果", "香蕉", "橙子"];

// 添加元素到末尾
fruits.push("葡萄");
console.log(fruits); // ["苹果", "香蕉", "橙子", "葡萄"]

// 遍历数组并打印
fruits.forEach((fruit, index) => {
  console.log(`${index+1}个水果:${fruit}`);
});

// 生成新数组:每个水果名加"很好吃"
const deliciousFruits = fruits.map(fruit => `${fruit}很好吃`);
console.log(deliciousFruits); 
// ["苹果很好吃", "香蕉很好吃", "橙子很好吃", "葡萄很好吃"]

八、事件:JS与HTML的交互桥梁

事件是用户操作或浏览器行为的触发点(如点击、输入、页面加载),JavaScript通过“事件监听”响应用户行为,实现交互效果。

1. 事件绑定方式

最常用的是通过addEventListener绑定事件(推荐,可绑定多个事件处理函数)。

示例:点击按钮弹出提示

<button id="myBtn">点击我</button>

<script>
  // 获取按钮元素
  const btn = document.getElementById("myBtn");

  // 绑定点击事件(click)
  btn.addEventListener("click", function() {
    alert("按钮被点击了!"); // 弹出提示框
  });

  // 再绑定一个点击事件(可多个)
  btn.addEventListener("click", function() {
    console.log("按钮点击事件触发");
  });
</script>
2. 常用事件类型
事件类型触发时机
click点击元素
dblclick双击元素
mouseover鼠标移到元素上
mouseout鼠标移出元素
input输入框内容变化时
submit表单提交时
load页面或图片加载完成时

示例:输入框实时显示内容

<input type="text" id="myInput" placeholder="输入内容...">
<p id="output"></p>

<script>
  const input = document.getElementById("myInput");
  const output = document.getElementById("output");

  // 绑定input事件(内容变化时触发)
  input.addEventListener("input", function() {
    // this.value获取输入框当前值
    output.textContent = `你输入了:${this.value}`;
  });
</script>

九、DOM操作:JS控制网页元素

DOM(文档对象模型)是网页元素的树形结构表示,JavaScript通过DOM API操作网页元素(如修改内容、样式、结构)。

1. 获取DOM元素

常用方法:

  • getElementById(id):通过ID获取元素(唯一);
  • getElementsByClassName(class):通过类名获取元素集合;
  • getElementsByTagName(tag):通过标签名获取元素集合;
  • querySelector(selector):通过CSS选择器获取第一个匹配元素;
  • querySelectorAll(selector):通过CSS选择器获取所有匹配元素。

示例:获取元素

<div id="box" class="container">这是一个盒子</div>
<p class="text">段落1</p>
<p class="text">段落2</p>

<script>
  // 通过ID获取
  const box = document.getElementById("box");
  console.log(box); // <div id="box" class="container">...</div>

  // 通过类名获取(返回集合)
  const texts = document.getElementsByClassName("text");
  console.log(texts[0]); // 第一个p标签

  // 通过CSS选择器获取
  const firstText = document.querySelector(".text"); // 第一个.text元素
  const allPs = document.querySelectorAll("p"); // 所有p标签
</script>
2. 修改元素内容与样式
  • 修改内容:textContent(纯文本)、innerHTML(可解析HTML);
  • 修改样式:style属性(驼峰命名,如style.backgroundColor)。

示例:动态修改元素

<p id="demo">原始文本</p>
<div id="styleBox" style="width: 100px; height: 100px;">样式盒子</div>

<script>
  const demo = document.getElementById("demo");
  // 修改文本内容
  demo.textContent = "修改后的文本";

  const styleBox = document.getElementById("styleBox");
  // 修改样式(驼峰命名:background-color → backgroundColor)
  styleBox.style.backgroundColor = "lightblue";
  styleBox.style.border = "2px solid blue";

  // 用innerHTML添加HTML内容
  demo.innerHTML = "<strong>加粗文本</strong>"; // 显示为“加粗文本”
</script>

十、总结

JavaScript基础核心包括:

  • 变量与数据类型:理解基本类型和引用类型的区别,掌握类型转换;
  • 运算符与控制流:用运算符处理数据,用条件/循环控制代码执行;
  • 函数与对象:封装复用逻辑(函数),组织复杂数据(对象);
  • 数组与事件:操作有序数据(数组),响应用户交互(事件);
  • DOM操作:通过JS动态控制网页元素,实现交互效果。

学习JavaScript的关键是多写多练:尝试修改示例代码,实现简单功能(如计算器、待办列表),逐步积累对语法和逻辑的理解。后续可深入学习ES6+新特性、异步编程、DOM高级操作等内容。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值