📅  最后修改于: 2023-12-03 14:42:29.599000             🧑  作者: Mango
JavaScript 是一种轻量级、解释型的脚本语言,用于 Web 用户界面和服务端开发。它是我们 Web 开发中非常基础的一门语言。本篇文章将介绍 JavaScript 的重点。
变量可以用 var
、let
、const
来定义。
var
关键字在现代版 JavaScript 中已经不再被使用,取而代之的是 let
和 const
。let
关键字用于定义可重新赋值的变量。const
关键字用于定义常量。let name = 'John';
const age = 25;
JavaScript 中的数据类型包括:
typeof
关键字得知。弱类型语言的特点是方便灵活,但需要额外小心类型转换的情况。let a = 1;
let b = 'hello';
let c = true;
let d = {};
let e = function() {};
let f = [1, 2, 3];
let g = null;
let h = undefined;
JavaScript 中的运算符都很常见,如加减乘除以及常见的比较和逻辑运算符等等。其中比较运算符比较有特点,当比较两个不同类型的值时,JavaScript 会尝试在比较之前将它们转换为一致的类型,这样容易引发预料之外的结果。
let a = 3;
let b = '3';
console.log(a == b); // true,因为将 b 自动转换成了数字类型
console.log(a === b); // false,因为类型不同
作用域和闭包在 JavaScript 中是比较重要的概念。
作用域分为全局作用域和局部作用域:
闭包的概念是一种让函数内部变量在函数执行完之后依然可以访问到的方法。闭包的实现方式一般是将函数作为返回值。
function counter() {
let count = 0;
return function() {
return ++count;
}
}
let counter1 = counter(); // 返回值是闭包函数
console.log(counter1()); // 1
console.log(counter1()); // 2
JavaScript 可以使用 Prototype 原型链来实现面向对象编程。每一个 JavaScript 对象都有一个内部指针指向另一个对象,这个对象也有一个指针指向另一个对象,以此类推,直到最后一个对象的指针为 null。
JavaScript 中的每一个对象都有原型,通过 prototype
属性可以引用这个原型,并且可以实现对象之间的继承。
function Person(name) {
this.name = name;
this.sayHello = function() {
console.log(`Hello, ${this.name}`);
}
}
let john = new Person('John');
john.sayHello(); // Hello, John
function Engineer(name) {
this.profession = 'engineer';
this.sayProfession = function() {
console.log(`I am an ${this.profession}`);
}
}
Engineer.prototype = new Person();
let tom = new Engineer('Tom');
tom.sayHello(); // Hello, Tom,从 Person 继承而来
tom.sayProfession(); // I am an engineer
JavaScript 是一种单线程的编程语言,这意味着并不能将所有的任务都排列在一个队列中等待执行。异步编程可以让我们在 JavaScript 中控制非阻塞任务。常见的异步编程模式有:回调函数、Promise 和 async/await。
回调函数是 JavaScript 异步编程中最早的处理方法,虽然非常简单,但是会产生回调嵌套的问题,影响代码的可读性和维护性。Promise 是一种解决这个问题的方法,大大改善了异步代码的可读性。
// 回调函数
function doSomething(callback) {
setTimeout(() => {
console.log('do something');
callback();
}, 1000);
}
function doSomethingElse() {
console.log('do something else');
}
doSomething(doSomethingElse);
// Promise
function doSomethingPromise() {
return new Promise((resolve, reject) => {
setTimeout(() => {
console.log('do something');
resolve();
}, 1000);
});
}
function doAnotherThingPromise() {
console.log('do another thing');
}
doSomethingPromise().then(doAnotherThingPromise);
async/await 是 ES2017 新推出的一种异步处理方式,它让异步调用看起来更像同步调用,使得 JavaScript 代码的可读性和维护性有了质的提升。
async function fetchData() {
try {
let res = await fetch('https://api.example.com/data');
let data = await res.json();
console.log(data);
} catch (error) {
console.error(error);
}
}
本文介绍了 JavaScript 的一些重点知识,包括基础语法、面向对象编程和异步编程等方面。JavaScript 是一门非常有趣的语言,只有通过不断地实践和学习,才能掌握它的精髓。