JavaScript 学习笔记

1. 介绍

JavaScript 是一种广泛用于 Web 开发的编程语言。它通常用于添加交互、动态更新内容、控制多媒体、动画等功能。它是三大前端技术之一,另外两个是 HTML 和 CSS。

2. 基础语法

2.1 变量

JavaScript 使用 var, let, 和 const 来声明变量。

var name = 'John'; // 全局或函数作用域
let age = 30; // 块级作用域
const pi = 3.14; // 常量,不可重新赋值

2.2 数据类型

JavaScript 有多种数据类型,包括原始类型和对象类型。

  • 原始类型: Number, String, Boolean, Null, Undefined, Symbol, BigInt
  • 对象类型: Object, Array, Function, Date, 等等。

2.3 操作符

算术操作符
let sum = 5 + 2; // 加法
let diff = 5 - 2; // 减法
let prod = 5 * 2; // 乘法
let quot = 5 / 2; // 除法
let mod = 5 % 2; // 取余
比较操作符
let isEqual = (5 == '5'); // true,值相等
let isStrictEqual = (5 === '5'); // false,值和类型都相等
let isNotEqual = (5 != '5'); // false,值不等
let isStrictNotEqual = (5 !== '5'); // true,值或类型不等
逻辑操作符
let and = true && false; // AND 操作
let or = true || false; // OR 操作
let not = !true; // NOT 操作

2.4 条件语句

let age = 18;

if (age >= 18) {
  console.log('Adult');
} else {
  console.log('Minor');
}

let status = (age >= 18) ? 'Adult' : 'Minor'; // 三元操作符

2.5 循环

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

3. 函数

3.1 函数声明

function greet(name) {
  return `Hello, ${name}!`;
}

console.log(greet('Alice'));

3.2 函数表达式

const greet = function(name) {
  return `Hello, ${name}!`;
};

console.log(greet('Bob'));

3.3 箭头函数

const greet = (name) => `Hello, ${name}!`;

console.log(greet('Charlie'));

4. 对象与数组

4.1 对象

let person = {
  name: 'John',
  age: 30,
  greet: function() {
    console.log(`Hello, my name is ${this.name}`);
  }
};

console.log(person.name);
person.greet();

4.2 数组

let fruits = ['Apple', 'Banana', 'Cherry'];

console.log(fruits[0]); // 访问元素

fruits.push('Orange'); // 添加元素
console.log(fruits);

fruits.pop(); // 删除最后一个元素
console.log(fruits);

5. DOM 操作

5.1 选择元素

let element = document.getElementById('myId');
let elements = document.getElementsByClassName('myClass');
let elements = document.getElementsByTagName('div');
let element = document.querySelector('.myClass');
let elements = document.querySelectorAll('.myClass');

5.2 修改内容

let element = document.getElementById('myId');
element.innerHTML = 'New Content';
element.textContent = 'New Text';

5.3 修改样式

let element = document.getElementById('myId');
element.style.color = 'red';
element.style.backgroundColor = 'blue';

5.4 事件处理

let button = document.getElementById('myButton');
button.addEventListener('click', function() {
  alert('Button clicked!');
});

6. 异步编程

6.1 回调函数

function fetchData(callback) {
  setTimeout(() => {
    callback('Data received');
  }, 1000);
}

fetchData((data) => {
  console.log(data);
});

6.2 Promise

let promise = new Promise((resolve, reject) => {
  let success = true;

  if (success) {
    resolve('Promise resolved');
  } else {
    reject('Promise rejected');
  }
});

promise.then((message) => {
  console.log(message);
}).catch((error) => {
  console.log(error);
});

6.3 async/await

async function fetchData() {
  let promise = new Promise((resolve, reject) => {
    setTimeout(() => resolve('Data received'), 1000);
  });

  let result = await promise;
  console.log(result);
}

fetchData();

7. ES6+ 特性

7.1 模板字符串

let name = 'John';
let message = `Hello, ${name}!`;
console.log(message);

7.2 解构赋值

let person = { name: 'Alice', age: 25 };
let { name, age } = person;
console.log(name, age);

let arr = [1, 2, 3];
let [a, b, c] = arr;
console.log(a, b, c);

7.3 扩展运算符

let arr1 = [1, 2, 3];
let arr2 = [...arr1, 4, 5];
console.log(arr2);

let obj1 = { a: 1, b: 2 };
let obj2 = { ...obj1, c: 3 };
console.log(obj2);

7.4 模块化

导出
export const pi = 3.14;
export function add(a, b) {
  return a + b;
}
导入
import { pi, add } from './math.js';
console.log(pi);
console.log(add(2, 3));

确实,事件处理是JavaScript开发中的一个重要部分,尤其是在Web开发中。事件驱动的编程模型允许开发者响应用户交互和其他事件。以下是关于JavaScript事件的详细学习笔记。

8事件

8.1. 什么是事件

事件是浏览器或用户执行的动作,例如点击按钮、加载页面、提交表单等。事件驱动编程通过事件处理程序(函数)来响应这些事件。

8.2. 常见事件类型

  • 鼠标事件click, dblclick, mousedown, mouseup, mouseover, mouseout, mousemove
  • 键盘事件keydown, keyup, keypress
  • 表单事件submit, change, focus, blur
  • 文档/窗口事件load, resize, scroll, unload

8.3. 添加事件监听器

3.1 addEventListener 方法

推荐的现代方法是使用 addEventListener 来添加事件监听器,因为它提供了更强的灵活性和兼容性。

let button = document.getElementById('myButton');

button.addEventListener('click', function() {
  alert('Button clicked!');
});
3.2 直接在HTML标签中使用事件属性

不推荐使用这种方式,因为它会使HTML和JavaScript代码混在一起,降低代码的可维护性。

<button id="myButton" onclick="alert('Button clicked!')">Click Me</button>

8.4. 移除事件监听器

可以使用 removeEventListener 方法移除事件监听器。

let button = document.getElementById('myButton');
function handleClick() {
  alert('Button clicked!');
}

button.addEventListener('click', handleClick);

// 移除事件监听器
button.removeEventListener('click', handleClick);

8.5. 事件对象

当事件被触发时,会传递一个事件对象给事件处理函数,包含了有关事件的详细信息。

button.addEventListener('click', function(event) {
  console.log(event); // 打印事件对象
  console.log(event.type); // 事件类型
  console.log(event.target); // 事件目标元素
});

8.6. 阻止默认行为

可以使用 event.preventDefault() 方法来阻止默认行为,例如表单提交或链接跳转。

let link = document.getElementById('myLink');

link.addEventListener('click', function(event) {
  event.preventDefault(); // 阻止默认行为
  alert('Link clicked!');
});

8.7. 事件冒泡和捕获

####8. 7.1 事件冒泡

事件冒泡指的是事件从最具体的元素开始,逐级向上传播到最不具体的元素(通常是 document)。

let outer = document.getElementById('outer');
let inner = document.getElementById('inner');

outer.addEventListener('click', function() {
  alert('Outer clicked!');
});

inner.addEventListener('click', function() {
  alert('Inner clicked!');
});

点击 inner 会先触发 inner 的点击事件,然后冒泡触发 outer 的点击事件。

8.7.2 事件捕获

事件捕获是从最不具体的元素开始,逐级向下传播到最具体的元素。

outer.addEventListener('click', function() {
  alert('Outer clicked!');
}, true);

inner.addEventListener('click', function() {
  alert('Inner clicked!');
}, true);

通过传递 true 作为第三个参数,事件监听器将会在捕获阶段触发。

8.7.3 阻止事件传播

可以使用 event.stopPropagation() 来阻止事件的进一步传播。

inner.addEventListener('click', function(event) {
  event.stopPropagation(); // 阻止事件传播
  alert('Inner clicked!');
});

8.8. 事件委托

事件委托是一种通过利用事件冒泡来简化事件处理的技术。它允许你将单个事件监听器添加到父元素上,而不是为每个子元素添加事件监听器。

let list = document.getElementById('myList');

list.addEventListener('click', function(event) {
  if (event.target && event.target.nodeName === 'LI') {
    alert('List item clicked!');
  }
});

在上述例子中,无论点击哪个 li 元素,都会触发父元素 ul 的点击事件。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值