首頁 > web前端 > js教程 > 主體

JavaScript 基礎知識

PHPz
發布: 2024-08-31 06:36:02
原創
417 人瀏覽過

JavaScript Basics

JavaScript

console.log("Hello, World!");
登入後複製
登入後複製

創建變數

在 JavaScript 中,變數是儲存資料值的容器。本指南將引導您了解如何在 JavaScript 中宣告、初始化和使用變量,以及關鍵規則和概念。

變數宣告和初始化的語法

聲明:
JavaScript 中的變數可以使用 var、let 或 const 來宣告。

var variableName;
let anotherVariable;
登入後複製

初始化:
變數可以在宣告時或之後用一個值進行初始化。

variableName = value;
登入後複製
var number = 10;
let name = "John";
登入後複製

宣告與初始化組合:

var age = 25;
let salary = 50000.0;
登入後複製

使用 const 表示常數:
const 用來宣告一旦初始化就無法重新賦值的變數。

const pi = 3.14159;
登入後複製

變數宣告:var、let 和 const

  • var: 聲明一個函數範圍的變量,如果在函數外部聲明,則聲明一個全域範圍的變數。可以重新聲明和更新。
  var greeting = "Hello";
登入後複製
  • let: 宣告一個區塊作用域變量,這表示它只能在宣告的區塊內存取。它可以更新,但不能在同一範圍內重新聲明。
  let count = 5;
登入後複製
  • const: 宣告一個區塊作用域的唯讀變數。它必須在聲明時初始化並且不能重新分配。
  const url = "https://example.com";
登入後複製

變數名稱規則

  1. 變數名稱必須以字母、底線 (_) 或美元符號 ($) 開頭。
  2. 後續字元可以是字母、數字、底線或美元符號。
  3. 變數名稱區分大小寫(myVar 和 myvar 不同)。
  4. 變數名稱不能是 JavaScript 中的保留關鍵字(例如 let、function、class)。

範例:

let age;
const $price = 9.99;
var _isLoggedIn = true;
let year2024;
登入後複製

變數的範圍

  • 全域作用域: 在任何函數或區塊之外宣告的變數具有全域作用域,可以從程式碼中的任何位置存取。
  var globalVar = "I am global";
登入後複製
  • 函數作用域: 在函數內以 var 宣告的變數是函數作用域的。
  function myFunction() {
      var functionScopedVar = "I exist only within this function";
  }
登入後複製
  • 區塊作用域: 在區塊 {} 內用 let 或 const 宣告的變數是區塊作用域的。
  if (true) {
      let blockScopedVar = "I exist only within this block";
  }
登入後複製

吊掛

在 JavaScript 中,變數宣告(但不是初始化)被提升到其作用域的頂端。這意味著變數可以在聲明之前使用。

console.log(myVar); // Outputs: undefined
var myVar = 10;
登入後複製

但是,let 和 const 不允許在聲明之前進行存取(它們處於「臨時死區」)。

console.log(myLet); // ReferenceError
let myLet = 10;
登入後複製

常數

JavaScript 中的常數是使用 const 宣告的。設定初始值後就無法重新分配它們。

範例:

const DAYS_IN_WEEK = 7;
const PI = 3.14159;
登入後複製

但是,如果值是物件或數組,則仍然可以修改其屬性或元素。

const person = { name: "John" };
person.name = "Doe";  // This is allowed
登入後複製

預設值

使用 var、let 或 const 宣告但未初始化的變數將具有未定義的值。

範例:

let num;  // default value is undefined
console.log(num);  // Outputs: undefined
登入後複製

宣告多個變數

您可以在一條語句中宣告多個變量,並用逗號分隔。您也可以在聲明時初始化它們。

範例:

// Declaring multiple variables without values
let a, b, c;

// Declaring and initializing variables
let x = 10, y = 20, z = 30;
登入後複製

將一個值指派給多個變數

您可以透過連結賦值運算子將相同的值指派給多個變數。

範例:

let m, n, o;
m = n = o = 50;
登入後複製

建立評論

註解是不可執行的語句,有助於描述和解釋程式碼。它們對於使程式碼更具可讀性和可維護性很有用。 JavaScript 支援兩種類型的註解:

1. 單行註釋

單行註解以兩個正斜線 (//) 開頭。該行 // 後面的所有內容都被視為註釋,將被 JavaScript 引擎忽略。

文法:

// This is a single-line comment
let x = 10; // x is initialized to 10
登入後複製

2. 多行註釋

多行註解以/*開始,以*/結束。 /* 和 */ 之間的所有內容都被視為註釋,並且可以跨越多行。

文法:

/*
 This is a multi-line comment.
 It can span multiple lines.
*/
let y = 20; /* y is initialized to 20 */
登入後複製

基本輸出

顯示結果並與使用者互動是程式設計的基礎。以下是有關在 JavaScript 環境(例如 Node.js)中執行基本輸出操作的綜合指南:

1. Output (Printing to Console)

To display output on the console, use the console.log() method. This method prints the string representation of the given data to the standard output (usually the console) followed by a newline.

Syntax:

console.log("Hello, World!");
登入後複製
登入後複製

Example:

let number = 10;
console.log("The number is: " + number);
登入後複製

2. Formatting Output

JavaScript allows you to format output using template literals or string concatenation.

Using Template Literals:
Template literals enable embedded expressions and multi-line strings. They are enclosed in backticks (`).

Syntax:

let name = "Alice";
let age = 30;
console.log(`Name: ${name}, Age: ${age}`);
登入後複製

Using String Concatenation:
You can also format output using the + operator.

Syntax:

let name = "Alice";
let age = 30;
console.log("Name: " + name + ", Age: " + age);
登入後複製

Data Types

JavaScript is a dynamically-typed language, meaning variables can hold values of any type and can change types during runtime. JavaScript provides several categories of data types:

1. Primitive Data Types

Primitive data types are the most basic types of data in JavaScript. They are immutable and are not objects. There are seven primitive data types:

Number Type:
// Represents both integer and floating-point numbers
let num = 42;
let pi = 3.14159;
登入後複製
BigInt Type:
// Represents integers with arbitrary precision
let largeNumber = 123456789012345678901234567890n;
登入後複製
String Type:
// Represents a sequence of characters
let greeting = "Hello, World!";
let singleChar = 'A';
登入後複製
Boolean Type:
// Represents true or false values
let isValid = true;
let isComplete = false;
登入後複製
Undefined Type:
// Represents a variable that has been declared but not assigned a value
let value;
console.log(value); // Outputs: undefined
登入後複製
Null Type:
// Represents the intentional absence of any object value
let result = null;
登入後複製
Symbol Type:
// Represents a unique and immutable value used as an object property key
let uniqueSymbol = Symbol('description');
登入後複製

2. Object Data Types

Object data types are collections of properties, where each property is a key-value pair. Objects can be used to group related data and functionality.

  • Object: The most general type of object in JavaScript. It can hold multiple values as properties.

Syntax:

  let person = {
      name: "Alice",
      age: 30
  };
登入後複製
  • Array: A special type of object used to store ordered collections of values. Arrays are indexed starting from 0.

Syntax:

  let numbers = [1, 2, 3, 4, 5];
登入後複製
  • Function: Functions are also objects in JavaScript. They can be assigned to variables, passed as arguments, and returned from other functions.

Syntax:

  function greet(name) {
      return "Hello, " + name;
  }
登入後複製
  • Date: A built-in object for handling dates and times.

Syntax:

  let today = new Date();
登入後複製
  • RegExp: A built-in object for working with regular expressions.

Syntax:

  let pattern = /ab+c/;
登入後複製

Type Conversion

JavaScript performs type conversion automatically (implicit conversion) but also allows explicit conversion.

  • Implicit Conversion: Automatically converts types during operations.
  let result = "The number is " + 42; // "The number is 42"
登入後複製
  • Explicit Conversion: Manually converting types using functions.
  let str = String(123);  // "123"
  let num = Number("456"); // 456
登入後複製

Strings in JavaScript

String is a built-in object that represents a sequence of characters. It is widely used for manipulating text and is immutable, meaning once a String object is created, its value cannot be changed. Here's a comprehensive guide covering everything you need to know about String:

1. Creating Strings

You can create a String using string literals or by creating instances of the String object.

Using String Literals:
let str1 = "Hello"; // Using double quotes
let str2 = 'World'; // Using single quotes
let str3 = `Hello, ${str2}`; // Using template literals
登入後複製
Using String Constructor:
let str4 = new String(); // Empty string
let str5 = new String("JavaScript"); // Using constructor with initial value
登入後複製

2. String Immutability

String objects are immutable, which means once created, their values cannot be changed.

Example:

let immutableStr = "Hello";
immutableStr = immutableStr + " World"; // Creates a new String object
console.log(immutableStr); // Output: Hello World
登入後複製

3. String Concatenation

You can concatenate strings using the + operator or template literals. You can also concatenate numbers with strings.

Example:

let str1 = "Hello";
let str2 = "World";
let concatStr = str1 + " " + str2; // Using +
let concatStr2 = `${str1} ${str2}`; // Using template literals

let num = 42;
let numConcat = `The answer is ${num}`; // Concatenating number with string
console.log(concatStr); // Output: Hello World
console.log(numConcat); // Output: The answer is 42
登入後複製

4. String Length

You can get the length of a String using the length property.

Example:

let str = "JavaScript";
let length = str.length; // length is 10
登入後複製

5. String Comparison

You can compare strings using the === operator for strict equality and locale-aware comparison methods.

Example:

let str1 = "JavaScript";
let str2 = "javascript";
console.log(str1 === str2); // false
console.log(str1.toLowerCase() === str2.toLowerCase()); // true
登入後複製

6. String Interning

While not explicitly handled like in some other languages, strings created using literals may be optimized for performance by the JavaScript engine.

Example:

let str1 = "JavaScript";
let str2 = "JavaScript";
console.log(str1 === str2); // true (interning by engine)
登入後複製

7. Escape Sequences

JavaScript supports escape sequences within strings, such as \n for newline, \t for tab, and \\ for a backslash.

Example:

let escapeStr = "Hello\tWorld\nJavaScript";
console.log(escapeStr);
// Output:
// Hello   World
// JavaScript
登入後複製

8. String Formatting

You can use template literals for formatting.

Example using Template Literals:

let age = 30;
let formattedStr = `I am ${age} years old.`;
console.log(formattedStr);
// Output: I am 30 years old.

let price = 19.95;
let formattedPrice = `The price is ${price.toFixed(2)} dollars.`;
console.log(formattedPrice);
// Output: The price is 19.95 dollars.
登入後複製

Operators in JavaScript

Operators in JavaScript are symbols used to perform operations on values and variables. They are categorized based on their functionality.

Arithmetic Operators

Arithmetic operators are used for basic mathematical operations.

Operator Name Description Example
+ Addition Adds two operands x + y
- Subtraction Subtracts the right operand from the left x - y
* Multiplication Multiplies two operands x * y
/ Division Divides the left operand by the right operand x / y
% Modulus Returns the remainder of the division x % y
++ Increment Increases the value of operand by 1 x++ or ++x
-- Decrement Decreases the value of operand by 1 x-- or --x

Example:

let a = 10;
let b = 3;
console.log(a + b);   // Output: 13
console.log(a / b);   // Output: 3.3333333333333335
console.log(a % b);   // Output: 1

let x = 5;
x++;
console.log(x);       // Output: 6

let y = 8;
y--;
console.log(y);       // Output: 7
登入後複製

Assignment Operators

Assignment operators are used to assign values to variables and perform operations.

Operator Name Description Example
= Assignment Assigns the value on the right to the variable on the left x = 5
+= Addition Adds right operand to the left operand and assigns the result to the left x += 3
-= Subtraction Subtracts right operand from the left operand and assigns the result to the left x -= 3
*= Multiplication Multiplies right operand with the left operand and assigns the result to the left x *= 3
/= Division Divides left operand by right operand and assigns the result to the left x /= 3
%= Modulus Computes modulus of left operand with right operand and assigns the result to the left x %= 3

Example:

let x = 10;
x += 5;
console.log(x);   // Output: 15
登入後複製

Comparison Operators

Comparison operators evaluate conditions and return Boolean values.

Operator Name Description Example
== Equal Checks if two operands are equal x == y
=== Strict Equal Checks if two operands are equal and of the same type x === y
!= Not Equal Checks if two operands are not equal x != y
!== Strict Not Equal Checks if two operands are not equal or not of the same type x !== y
> Greater Than Checks if left operand is greater than right x > y
< Less Than Checks if left operand is less than right x < y
>= Greater Than or Equal Checks if left operand is greater than or equal to right x >= y
<= Less Than or Equal Checks if left operand is less than or equal to right x <= y

Example:

let a = 5;
let b = 10;
console.log(a == b);   // Output: false
console.log(a < b);    // Output: true
登入後複製

Logical Operators

Logical operators combine Boolean expressions and return Boolean values.

Operator Description Example
&& Logical AND x < 5 && x < 10
|| Logical OR x < 5 || x < 4
! Logical NOT !(x < 5 && x < 10)

Example:

let x = 3;
console.log(x < 5 && x < 10);   // Output: true
console.log(x < 5 || x < 2);    // Output: true
登入後複製

Bitwise Operators

Bitwise operators are used to perform bitwise operations on integers.

Operator Name Description Example
& AND Sets each bit to 1 if both bits are 1 x & y
| OR Sets each bit to 1 if one of two bits is 1 x | y
^ XOR Sets each bit to 1 if only one of two bits is 1 x ^ y
~ NOT Inverts all the bits ~x
<< Left Shift Shifts bits to the left x << 2
>> Right Shift Shifts bits to the right x >> 2
>>> Unsigned Right Shift Shifts bits to the right and fills with zeros x >>> 2

Example:

let x = 5;
let y = 3;
console.log(x & y);   // Output: 1
console.log(x | y);   // Output: 7
登入後複製

Ternary Operator

The ternary operator ? : provides a shorthand for conditional expressions.

Example:

let age = 20;
let status = (age >= 18) ? "Adult" : "Minor";
console.log(status);   // Output: Adult
登入後複製

Conditions

Conditions are used to execute specific blocks of code based on whether a certain expression evaluates to true or false. They control the flow of a program by allowing different code to run depending on the outcome of conditional expressions. In JavaScript, conditional statements such as if, else if, and else help manage decision-making in the code.

If-Else Statements in JavaScript

In JavaScript, if statements are employed to execute code based on the evaluation of a condition. A condition in JavaScript evaluates to either true or false, determining which block of code will execute. The else and else if statements are used to specify alternative code blocks based on different conditions.

Syntax and Usage

The basic syntax of an if statement in JavaScript is:

if (condition) {
    // Executes if the condition is true
    statement(s);
}
登入後複製

If you need to execute an alternative block of code when the condition is false, use else:

if (condition) {
    // Executes if the condition is true
    statement(s);
} else {
    // Executes if the condition is false
    statement(s);
}
登入後複製

For handling multiple conditions, use else if:

if (condition1) {
    // Executes if condition1 is true
    statement(s);
} else if (condition2) {
    // Executes if condition1 is false and condition2 is true
    statement(s);
} else {
    // Executes if both condition1 and condition2 are false
    statement(s);
}
登入後複製

Examples

  1. Simple if statement:
let x = 10;

if (x > 5) {
    console.log("x is greater than 5");  // Output: x is greater than 5
}
登入後複製
  1. if-else statement:
let x = 3;

if (x % 2 === 0) {
    console.log("x is even");
} else {
    console.log("x is odd");  // Output: x is odd
}
登入後複製
  1. if-else if-else statement:
let x = 20;

if (x > 50) {
    console.log("x is greater than 50");
} else if (x > 30) {
    console.log("x is greater than 30 but less than or equal to 50");
} else {
    console.log("x is 30 or less");  // Output: x is 30 or less
}
登入後複製

Note:

In JavaScript, you can use any expression in a condition, and values that are not strictly true or false can still be evaluated. For example, non-zero numbers, non-empty strings, and objects are considered true, while 0, null, undefined, NaN, and empty strings are considered false. This flexibility allows for concise condition checks without explicitly comparing values to true or false.

Loops

Loops in JavaScript are used to execute a block of code repeatedly based on a specified condition. JavaScript supports several types of loops: for, for...in, for...of, while, and do...while. Each loop serves different purposes and choosing the right loop can help streamline your code and improve its readability.

1. For Loop

A for loop is used when the number of iterations is known beforehand. It includes initialization, condition, and update expressions.

Syntax:
for (initialization; condition; update) {
    // Code to be executed
}
登入後複製
Example:
for (let i = 0; i < 5; i++) {
    console.log("Iteration: " + i);
}
登入後複製

2. For...in Loop

The for...in loop iterates over the enumerable properties of an object. It is commonly used to loop through the keys of an object.

Syntax:
for (key in object) {
    // Code to be executed
}
登入後複製
Example:
let person = { name: "Alice", age: 25, city: "New York" };
for (let key in person) {
    console.log(key + ": " + person[key]);
}
登入後複製

3. For...of Loop

The for...of loop iterates over iterable objects like arrays, strings, maps, and sets. It provides a convenient way to loop through elements.

Syntax:
for (element of iterable) {
    // Code to be executed
}
登入後複製
Example:
let numbers = [1, 2, 3, 4, 5];
for (let number of numbers) {
    console.log(number);
}
登入後複製

4. While Loop

A while loop is used when the number of iterations is not known beforehand, and the loop continues until a specified condition is false.

Syntax:
while (condition) {
    // Code to be executed
}
登入後複製
Example:
let i = 0;
while (i < 5) {
    console.log("Iteration: " + i);
    i++;
}
登入後複製

5. Do...While Loop

A do...while loop is similar to a while loop, but it ensures that the code block is executed at least once because the condition is evaluated after the loop body.

Syntax:
do {
    // Code to be executed
} while (condition);
登入後複製
Example:
let i = 0;
do {
    console.log("Iteration: " + i);
    i++;
} while (i < 5);
登入後複製

6. Nested Loops

Loops can be nested within other loops, which is useful for iterating over multi-dimensional arrays or performing more complex iterations.

Example:
for (let i = 0; i < 3; i++) {
    for (let j = 0; j < 3; j++) {
        console.log("i: " + i + ", j: " + j);
    }
}
登入後複製

7. Break and Continue

break and continue statements are used to alter the flow of loops:

  • break exits the loop immediately.
  • continue skips the current iteration and proceeds to the next iteration.
Example of break:
for (let i = 0; i < 5; i++) {
    if (i === 3) {
        break;
    }
    console.log("Iteration: " + i);
}
登入後複製
Example of continue:
for (let i = 0; i < 5; i++) {
    if (i === 3) {
        continue;
    }
    console.log("Iteration: " + i);
}
登入後複製

Functions in JavaScript

Functions in JavaScript are blocks of code designed to perform specific tasks. Functions allow you to write reusable code, making your programs more organized and modular. JavaScript functions can be defined using several syntaxes and can handle parameters and return values. Here's a comprehensive guide to understanding and using functions in JavaScript.

1. Function Definition and Syntax

A function in JavaScript is defined using the function keyword, followed by a name, parameters (optional), and a block of code.

Syntax:
function functionName(parameters) {
    // Code to be executed
}
登入後複製
  • functionName: The name of the function.
  • parameters: A comma-separated list of input parameters. If there are no parameters, leave the parentheses empty.
Example:
function greet() {
    return "Hello, World!";
}

console.log(greet());  // Output: Hello, World!
登入後複製
登入後複製

2. Calling Functions

To execute a function, you call it by using its name followed by parentheses. Functions can be called from within other functions or from different parts of your code.

Example:
function greet() {
    return "Hello, World!";
}

console.log(greet());  // Output: Hello, World!
登入後複製
登入後複製

3. Function Parameters

Functions can take parameters, which are used to pass values into the function.

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

console.log(add(5, 3));  // Output: 8
登入後複製

4. Return Values

A function can return a value using the return statement. The return type of the function must match the type of the value returned.

Example:
function multiply(a, b) {
    return a * b;
}

console.log(multiply(4, 7));  // Output: 28
登入後複製

5. Function Overloading

JavaScript does not support method overloading (having multiple functions with the same name but different parameters) directly. Instead, you can use default parameters or check the number and types of arguments inside the function.

Example with argument checking:
function print(value) {
    if (typeof value === "number") {
        console.log("Number: " + value);
    } else if (typeof value === "string") {
        console.log("String: " + value);
    }
}

print(10);          // Output: Number: 10
print("Hello");     // Output: String: Hello
登入後複製

6. Recursive Functions

A function can call itself, a concept known as recursion. Recursion is useful for solving problems that can be broken down into smaller, repetitive tasks.

Example:
function factorial(n) {
    if (n === 0) {
        return 1;
    } else {
        return n * factorial(n - 1);
    }
}

console.log(factorial(5));  // Output: 120
登入後複製

7. Anonymous Functions

An anonymous function is a function that does not have a name. These functions are often used as arguments to other functions or assigned to variables.

Example:
const greet = function() {
    return "Hello, World!";
};

console.log(greet());  // Output: Hello, World!
登入後複製

8. Arrow Functions

Arrow functions provide a concise syntax for writing functions. They do not have their own this context and are often used for shorter functions.

Syntax:
const functionName = (parameters) => {
    // Code to be executed
};
登入後複製
Example:
const add = (a, b) => a + b;

console.log(add(5, 3));  // Output: 8
登入後複製

9. Immediately Invoked Function Expressions (IIFE)

An IIFE is a function that is executed immediately after its definition. It is often used to create a new scope to avoid polluting the global namespace.

Syntax:
(function() {
    // Code to be executed
})();
登入後複製
Example:
(function() {
    const message = "Hello, World!";
    console.log(message);
})();  // Output: Hello, World!
登入後複製

10. Function Expressions

A function expression involves assigning a function to a variable. Function expressions can be named or anonymous.

Example:
const square = function(x) {
    return x * x;
};

console.log(square(4));  // Output: 16
登入後複製

11. Default Parameters

Functions in JavaScript can have default values for parameters. If a parameter is not provided when the function is called, the default value is used.

Syntax:
function functionName(parameter = defaultValue) {
    // Code to be executed
}
登入後複製
Example:
function greet(name = "Guest") {
    return "Hello, " + name + "!";
}

console.log(greet());        // Output: Hello, Guest!
console.log(greet("Alice")); // Output: Hello, Alice!
登入後複製

12. Rest Parameters

Rest parameters allow you to represent an indefinite number of arguments as an array. They must be the last parameter in the function’s parameter list.

Syntax:
function functionName(...rest) {
    // Code to be executed
}
登入後複製
Example:
function sum(...numbers) {
    return numbers.reduce((acc, curr) => acc + curr, 0);
}

console.log(sum(1, 2, 3, 4, 5));  // Output: 15
登入後複製

13. The arguments Object

In JavaScript, functions have an arguments object that contains all the arguments passed to the function. This object is not available in arrow functions.

Example:
function showArguments() {
    console.log(arguments);
}

showArguments(1, "test", true);  // Output: [1, "test", true]
登入後複製

Note: The arguments object is not available in arrow functions; instead, use rest parameters for similar functionality.

Method Parameters in JavaScript

1. Syntax for Defining Method Parameters

In JavaScript, method parameters are defined within parentheses following the method name. Each parameter is declared with its name, and there is no need to specify its type.

function functionName(parameter1, parameter2, ...) {
    // Code to be executed
}
登入後複製

2. Passing Arguments

When invoking a function, you pass arguments to match the parameters defined in the function signature. JavaScript functions can accept any number of arguments, and extra arguments are ignored if they are not specified in the function definition.

function printDetails(name, age) {
    console.log("Name: " + name + ", Age: " + age);
}

printDetails("John", 30); // Passing arguments "John" and 30
登入後複製

3. Pass by Value

JavaScript passes primitive data types (e.g., numbers, strings) by value. This means a copy of the actual value is passed to the function. Changes made to the parameter inside the function do not affect the original value.

function modifyValue(num) {
    num = num + 10; // Changes made to num inside the function
}

let x = 5;
modifyValue(x);
console.log(x); // Output: 5 (unchanged)
登入後複製

4. Pass by Reference

JavaScript objects and arrays are passed by reference. This means that the reference to the object or array is passed, and changes to the object's properties or array elements will affect the original object or array.

function modifyObject(obj) {
    obj.value = obj.value + 10; // Modifying obj inside the function
}

let myObject = { value: 5 };
modifyObject(myObject);
console.log(myObject.value); // Output: 15 (modified)
登入後複製

以上是JavaScript 基礎知識的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:dev.to
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!