初识javascript
1. JavaScript 基础语法
(1) 变量声明
JavaScript支持三种声明变量的方式:
-
var
:传统的变量声明方式,存在作用域问题(函数作用域)。 -
let
:块级作用域变量声明方式,避免了var
的作用域问题。 -
const
:常量声明,声明后不能修改其值,具备块级作用域。
var name = "John"; // 使用 var 声明
let age = 25; // 使用 let 声明
const isStudent = true; // 使用 const 声明
(2) 数据类型
JavaScript有6种基本数据类型:
-
Primitive Types:
string
、number
、boolean
、undefined
、null
、symbol
(ES6新增) -
Reference Types:
Object
、Array
、Function
、Date
等
let name = "John"; // string
let age = 25; // number
let isStudent = true; // boolean
let person = { name: "John", age: 25 }; // object
let numbers = [1, 2, 3]; // array
(3) 类型转换
JavaScript会进行隐式或显式的类型转换。
-
隐式转换:例如
"" + 1
会返回"1"
,即数字1
被转换成字符串。 -
显式转换:使用
String()
、Number()
、Boolean()
等函数进行类型转换。
let num = 5;
let str = String(num); // 转换为字符串 "5"
let bool = Boolean(num); // 转换为布尔值 true
2. 控制流
(1) 条件语句
JavaScript支持常见的条件语句:
-
if
、else
、else if
-
switch
:用于多个条件判断时更简洁。
let age = 18;
if (age >= 18) {console.log("Adult");
} else {console.log("Minor");
}let color = "red";
switch(color) {case "red":console.log("Red color");break;case "blue":console.log("Blue color");break;default:console.log("Unknown color");
}
(2) 循环语句
JavaScript提供几种循环方式来处理重复执行的任务:
-
for
:用于知道循环次数时。 -
while
:在循环条件满足时继续执行。 -
do...while
:至少执行一次循环体。
// for 循环
for (let i = 0; i < 5; i++) {console.log(i); // 输出 0 到 4
}// while 循环
let i = 0;
while (i < 5) {console.log(i);i++;
}// do...while 循环
let j = 0;
do {console.log(j);j++;
} while (j < 5);
3. 函数
(1) 函数声明
JavaScript中的函数声明语法如下:
function greet(name) {return "Hello, " + name;
}
console.log(greet("John")); // 输出 "Hello, John"
(2) 匿名函数
可以创建没有名称的函数,通常与变量一起使用,或者作为回调传递:
let add = function(a, b) {return a + b;
};
console.log(add(5, 10)); // 输出 15
(3) 箭头函数 (Arrow Functions)
ES6新增的语法,使得函数写法更加简洁,同时保留了外部this
的上下文。
const multiply = (a, b) => a * b;
console.log(multiply(3, 4)); // 输出 12
(4) 高阶函数
函数可以作为参数传递给另一个函数,或者作为返回值返回。JavaScript中的许多内建函数如map()
、filter()
、reduce()
等都属于高阶函数。
let numbers = [1, 2, 3, 4];
let doubled = numbers.map(x => x * 2); // 高阶函数的例子
console.log(doubled); // 输出 [2, 4, 6, 8]
4. 对象和数组
(1) 对象 (Object)
对象是JavaScript中最常用的数据结构之一,用于存储键值对。
let person = {name: "John",age: 30,greet: function() {return "Hello " + this.name;}
};
console.log(person.name); // 输出 "John"
console.log(person.greet()); // 输出 "Hello John"
(2) 数组 (Array)
数组是一个有序的元素集合,可以是任意类型的数据。
let fruits = ["apple", "banana", "cherry"];
console.log(fruits[0]); // 输出 "apple"
fruits.push("orange"); // 向数组添加元素
console.log(fruits); // 输出 ["apple", "banana", "cherry", "orange"]
5. 事件处理
JavaScript允许开发者监听和处理用户的交互事件(如点击、键盘输入、鼠标移动等)。
<button id="clickBtn">Click Me</button>
<script>
document.getElementById("clickBtn").addEventListener("click", function() {alert("Button clicked!");
});
</script>
-
addEventListener()
用于绑定事件处理器。 -
removeEventListener()
用于移除事件处理器。
6. 异步编程
JavaScript是单线程的,这意味着它一次只能做一件事。不过,可以通过异步编程实现并发行为。
(1) 回调函数
回调函数是异步操作完成时调用的函数。
function fetchData(callback) {setTimeout(() => {console.log("Data fetched");callback();}, 1000);
}fetchData(() => {console.log("Callback executed");
});
(2) Promise
Promise
是JavaScript中用于处理异步操作的标准化方式。
let promise = new Promise((resolve, reject) => {let success = true;if (success) {resolve("Success!");} else {reject("Failed!");}
});promise.then(result => {console.log(result); // 输出 "Success!"
}).catch(error => {console.log(error); // 输出 "Failed!"
});
(3) async/await
async/await
是基于 Promise
的语法糖,它让异步代码看起来像同步代码。
async function fetchData() {let result = await new Promise((resolve, reject) => {setTimeout(() => resolve("Data fetched"), 1000);});console.log(result); // 输出 "Data fetched"
}fetchData();
7. DOM操作
JavaScript可以通过DOM(文档对象模型)操作HTML文档内容、结构和样式。
(1) 选择元素
let element = document.getElementById("myElement"); // 通过ID选择
let elements = document.getElementsByClassName("myClass"); // 通过类名选择
let allDivs = document.querySelectorAll("div"); // 通过CSS选择器选择
(2) 修改元素
element.innerHTML = "New Content"; // 修改内容
element.style.color = "blue"; // 修改样式
(3) 创建元素
let newDiv = document.createElement("div");
newDiv.textContent = "This is a new div!";
document.body.appendChild(newDiv); // 将新元素添加到页面
8. ES6新特性
(1) 解构赋值
let person = { name: "John", age: 30 };
let { name, age } = person; // 解构赋值
console.log(name); // 输出 "John"
console.log(age); // 输出 30
(2) 模块化
ES6支持模块化,可以使用export
和import
来导出和导入模块。
// math.js
export function add(x, y) {return x + y;
}// main.js
import { add } from './math.js';