JavaScript详细
#javascript #编程 #scor32k

JavaScript通常缩写为JS,是一种多功能且广泛使用的编程语言,可以为现代网站和Web应用程序的交互元素提供动力。从动态UI交互到服务器端脚本,JavaScript在塑造数字景观方面起着关键作用。在本综合指南中,我们将探讨JavaScript的核心概念和功能,深入研究各个方面,以提供对这种强大语言的透彻理解。

JavaScript简介

什么是JavaScript?

JavaScript是一种动态,高级,解释的编程语言,主要用于创建交互式网页。它使开发人员可以通过操纵文档对象模型(DOM)并响应用户操作来添加功能和交互性。

JavaScript的演变

JavaScript是Brendan Eich在1995年在Netscape Communications工作时创建的。最初被称为“摩卡”,后来被称为“ livescript”,并最终以“ javascript”为名,以与Java的受欢迎程度保持一致。多年来,JavaScript已显着发展,重大更新(例如Ecmascript 6(ES6)引入新功能和语法增强)。

基本概念

变量和数据类型

在JavaScript中,变量用于存储数据值。他们可以拥有各种类型的数据,包括数字,字符串,布尔值,阵列,对象等。可以使用varletconst关键字来声明变量。

var age = 25;
let name = "John";
const PI = 3.14;

let isActive = true;
let hobbies = ["reading", "coding", "gaming"];
let person = { firstName: "Jane", lastName: "Doe" };

操作员和表达式

JavaScript支持用于执行变量和值操作的广泛运算符。这些包括算术,比较,逻辑,分配等等。

let x = 10;
let y = 5;

let sum = x + y;
let isGreater = x > y;
let isTrue = true && false;

x += 3; // Equivalent to x = x + 3

控制结构

控制结构使您可以控制程序的流动。 JavaScript提供有条件的语句(如果是else,则为else)和循环(对于,而)进行决策和重复措施。

let age = 18;

if (age >= 18) {
   console.log("You are an adult.");
} else {
   console.log("You are a minor.");
}

for (let i = 0; i < 5; i++) {
   console.log("Iteration " + i);
}

请继续关注该博客系列的下一部分,我们将在其中更深入地研究JavaScript的功能,范围,数组,对象以及更多核心概念。通过了解这些基本方面,您将有能力利用JavaScript创建动态和交互式Web应用程序的力量。

功能和范围

功能和功能声明

函数是执行特定任务的代码的可重复使用块。可以使用函数声明或函数表达式来定义它们。

// Function Declaration
function greet(name) {
   return "Hello, " + name + "!";
}

// Function Call
let message = greet("Alice");
console.log(message); // Output: Hello, Alice!

功能表达式和匿名功能

函数表达式涉及将函数分配给变量。匿名函数是未命名的函数,可以用作参数或分配给变量。

// Function Expression
let add = function(x, y) {
   return x + y;
};

let result = add(5, 3);
console.log(result); // Output: 8

范围和封闭

范围确定代码中可以访问的变量。 JavaScript具有两种主要范围类型:全局范围和局部(函数)范围。即使在父函数完成执行后,函数仍会从其父范围内保留对变量的访问。

function outer() {
   let outerVar = "I am from outer function";

   function inner() {
      let innerVar = "I am from inner function";
      console.log(outerVar); // Accessing outerVar from inner function
   }

   return inner;
}

let closureFunc = outer();
closureFunc(); // Output: I am from outer function

数组和对象

使用数组

数组是值的集合,可能是不同类型的值。它们可用于存储和操纵数据列表。

let colors = ["red", "green", "blue"];
console.log(colors[1]); // Output: green

colors.push("yellow");
console.log(colors); // Output: ["red", "green", "blue", "yellow"]

创建和操纵对象

对象是复杂的数据类型,可让您存储键值对。它们用于代表现实世界实体及其属性。

let person = {
   firstName: "John",
   lastName: "Doe",
   age: 30,
   hobbies: ["reading", "coding"]
};

console.log(person.firstName); // Output: John

person.age = 31;
console.log(person.age); // Output: 31

面向对象的JavaScript

JavaScript支持面向对象的编程(OOP)概念,例如继承,封装和多态性。您可以创建类和对象来建模现实世界实体。

class Animal {
   constructor(name) {
      this.name = name;
   }

   speak() {
      console.log(this.name + " makes a sound.");
   }
}

class Dog extends Animal {
   speak() {
      console.log(this.name + " barks.");
   }
}

let dog = new Dog("Buddy");
dog.speak(); // Output: Buddy barks.

DOM操纵

了解文档对象模型(DOM)

DOM是一个编程接口,代表HTML文档作为对象树的结构。它使JavaScript能够在网页上与HTML和CSS进行交互并操纵CS。

选择和修改DOM元素

JavaScript可用于使用getElementByIdquerySelectorinnerHTML等方法选择和修改DOM元素。

let heading = document.getElementById("main-heading");
heading.innerHTML = "Hello, JavaScript!";

活动处理和活动听众

事件侦听器允许您响应用户交互,例如点击或键按。当发生特定事件时,它们可用于触发功能。

let button = document.getElementById("my-button");

button.addEventListener("click", function() {
   console.log("Button clicked!");
});

异步编程

异步编程简介

JavaScript中的异步编程涉及同时执行任务,而无需等待每个任务完成之前完成。

回调和回调地狱

回调是作为参数传递给其他函数的函数。当多个嵌套回调导致复杂而难以阅读的代码时,就会发生回调地狱。

fetch("https://api.example.com/data", function(response) {
   processData(response, function(result) {
      displayData(result, function() {
         // More nested callbacks...
      });
   });
});

错误处理

JavaScript中的错误类型

JavaScript可能会遇到不同类型的错误,包括语法错误,运行时错误和逻辑错误。

使用尝试...捕获块

尝试...捕获块允许您通过捕获和处理代码执行期间出现的异常来优雅地处理错误。

try {
   // Code that might throw an error
   let result = 10 / 0;
} catch (error) {
   console.error("An error occurred:", error.message);
}

投掷自定义错误

您可以使用Error构造函数和throw语句创建自定义错误,以向用户和开发人员提供更有意义的错误消息。

function divide(a, b) {
   if (b === 0) {
      throw new Error("Division by zero is not allowed.");
   }
   return a / b;
}

ES6及以后

ECMASCRIPT 2015概论(ES6)

ecmascript 2015,也称为ES6,对JavaScript引入了重大增强功能,包括新的语法,功能和现有功能的改进。

箭头功能和增强的语法

箭头函数为编写功能提供了更简洁的语法。他们还具有this关键字的词汇范围。

// Traditional Function
function add(x, y) {
   return x + y;
}

// Arrow Function
let sum = (x, y) => x + y;

类,模块和其他ES6功能

es6介绍了用于创建基于类的对象的class关键字,以及在文件之间组织和共享代码的模块的概念。

// ES5 Constructor Function
function Person(name) {
   this.name = name;
}

// ES6 Class
class Person {
   constructor(name) {
      this.name = name;
   }
}

浏览器中的JavaScript

将JavaScript嵌入HTML

JavaScript可以使用<script>元素嵌入HTML中。它可以放置在HTML文档的<head><body>中。

<!DOCTYPE html>
<html>
<head>
   <title>JavaScript Example</title>
   <script>
      // JavaScript code here
   </script>
</head>
<body>
   <!-- HTML here -->
</body>
</html>

浏览器对象模型(BOM)

浏览器对象模型(BOM)提供了对浏览器特定对象和功能的JavaScript访问,例如与浏览器窗口和处理警报进行交互。

// Open a new browser window
window.open("https://www.dev.to/scorcism");

// Show an alert message
alert("Hello, world!");

操纵样式和属性

JavaScript可用于动态更改DOM元素的样式和属性,使您可以创建动态和交互式用户界面。

let element = document.getElementById("my-element");

// Change background color
element.style.backgroundColor = "blue";

// Add a CSS class
element.classList.add("highlight");

服务器上的JavaScript

node.js简介

node.js是一个JavaScript运行时,允许您在服务器端运行JavaScript。它提供了非阻滞,事件驱动的体系结构。

使用node.js创建基本服务器

node.js可用于创建处理HTTP请求和响应的服务器,使您能够构建Web应用程序和API。

const http = require("http");

const server = http.createServer((req, res) => {
   res.writeHead(200, { "Content-Type": "text/plain" });
   res.end("Hello, Node.js server!");
});

server.listen(3000, () => {
   console.log("Server listening on port 3000");
});

使用NPM(节点软件包管理器)

npm是node.js的软件包管理器,允许您安装和管理项目的库和依赖项。

npm install package-name

与API一起工作

用获取食用API

提取API是在JavaScript中提出HTTP请求的现代方法。它使您可以从API中检索数据并处理响应。

fetch("https://api.example.com/data")
   .then(response => response.json())
   .then(data => console.log(data))
   .catch(error => console.error("An error occurred:", error));

处理JSON数据

JSON(JavaScript对象表示法)是一种通用数据格式,用于在服务器和客户端之间交换数据。 JavaScript提供了解析和串联JSON数据的方法。

let jsonString = '{"name": "John", "age": 30}';
let parsedData = JSON.parse(jsonString);
console.log(parsedData.name); // Output: John

创建API请求和响应

JavaScript可用于创建和发送HTTP请求到API,以及处理和操纵API响应。

let data = { name: "Alice", age: 25 };
fetch("https://api.example.com/data", {
   method: "POST",
   headers: {
      "Content-Type": "application/json"
   },
   body: JSON.stringify(data)
})
   .then(response => response.json())
   .then(responseData => console.log(responseData))
   .catch(error => console.error("An error occurred:", error));

高级功能和关闭

高阶功能

高阶功能是可以接受其他函数作为参数或返回函数作为结果的函数。它们允许更多模块化和可重复使用的代码。

// Higher-order function
function operate(fn, x, y) {
   return fn(x, y);
}

function add(a, b) {
   return a + b;
}

let result = operate(add, 3, 5);
console.log(result); // Output: 8

封闭和词汇范围

当函数保留对变量的父范围访问变量时,即使在父函数完成执行后。

function outer() {
   let outerVar = "I am from outer function";

   function inner() {
      console.log(outerVar); // Closure retains access
   }

   return inner;
}

let closureFunc = outer();
closureFunc(); // Output: I am from outer function

承诺和异步编程

承诺和异步/等待

承诺是处理异步操作并避免回调地狱的一种方式。异步/等待是一种现代语法,使异步代码更可读,更易于推理。

function fetchData() {
   return new Promise((resolve, reject) => {
      setTimeout(() => {
         if (Math.random() > 0.5) {
            resolve("Data fetched successfully");
         } else {
            reject("Error fetching data");
         }
      }, 1000);
   });
}

async function process() {
   try {
      let data = await fetchData();
      console.log(data);
   } catch (error) {
      console.error(error);
   }
}

process();

高级对象和原型

原型继承

JavaScript使用原型继承,其中对象可以继承其他对象的属性和方法。这是对象如何在JavaScript中共享行为的基础。

function Animal(name) {
   this.name = name;
}

Animal.prototype.speak = function() {
   console.log(this.name + " makes a sound.");
};

function Dog(name) {
   Animal.call(this, name);
}

Dog.prototype = Object.create(Animal.prototype);

Dog.prototype.speak = function() {
   console.log(this.name + " barks.");
};

let dog = new Dog("Buddy");
dog.speak(); // Output: Buddy barks.

设计模式

单例图案

单例模式可确保类只有一个实例,并提供了对该实例的全局访问点。

class Singleton {
   constructor() {
      if (Singleton.instance) {
         return Singleton.instance;
      }
      Singleton.instance = this;
   }
}

let instance1 = new Singleton();
let instance2 = new Singleton();

console.log(instance1 === instance2); // Output: true

模块化发展

commonj和模块

commonjs是一个模块系统,用于node.js中,用于组织和模块化代码。它允许您在不同文件之间导出和导出功能,对象或值。

// math.js
module.exports = {
   add: (a, b) => a + b,
   subtract: (a, b) => a - b
};
// main.js
const math = require("./math");

console.log(math.add(5, 3)); // Output: 8

功能编程

地图,过滤并减少

功能编程概念,例如地图,过滤和减少,使您可以以更简洁的方式与数组一起工作。

let numbers = [1, 2, 3, 4, 5];

let doubled = numbers.map(x => x * 2);
console.log(doubled); // Output: [2, 4, 6, 8, 10]

let evens = numbers.filter(x => x % 2 === 0);
console.log(evens); // Output: [2, 4]

let sum = numbers.reduce((acc, current) => acc + current, 0);
console.log(sum); // Output: 15

一开始就足够了。

src:我的笔记,github,google,聊天gpt


如果文章对您有所帮助,请留下类似,关注或任何ð。

您可以在LinkedInGitHubDev.tohashnode上关注我。

bye