From 904a5994c87295d84d25f869d5555f35fbce5070 Mon Sep 17 00:00:00 2001 From: Florian Merz Date: Thu, 11 Feb 2021 14:51:56 +0100 Subject: unslug vi: move --- .../javascript/guide/cu-phap-lap-trinh/index.html | 710 --------------------- .../vi/web/javascript/guide/gioi-thieu/index.html | 137 ---- .../javascript/guide/grammar_and_types/index.html | 710 +++++++++++++++++++++ .../web/javascript/guide/introduction/index.html | 137 ++++ 4 files changed, 847 insertions(+), 847 deletions(-) delete mode 100644 files/vi/web/javascript/guide/cu-phap-lap-trinh/index.html delete mode 100644 files/vi/web/javascript/guide/gioi-thieu/index.html create mode 100644 files/vi/web/javascript/guide/grammar_and_types/index.html create mode 100644 files/vi/web/javascript/guide/introduction/index.html (limited to 'files/vi/web/javascript/guide') diff --git a/files/vi/web/javascript/guide/cu-phap-lap-trinh/index.html b/files/vi/web/javascript/guide/cu-phap-lap-trinh/index.html deleted file mode 100644 index 64f63492d2..0000000000 --- a/files/vi/web/javascript/guide/cu-phap-lap-trinh/index.html +++ /dev/null @@ -1,710 +0,0 @@ ---- -title: Cú pháp lập trình -slug: Web/JavaScript/Guide/cu-phap-lap-trinh -translation_of: Web/JavaScript/Guide/Grammar_and_types ---- -
{{jsSidebar("JavaScript Guide")}} {{PreviousNext("Web/JavaScript/Guide/Introduction", "Web/JavaScript/Guide/Control_flow_and_error_handling")}}
- -

Phần này nói về các cú pháp cơ bản của ngôn ngữ JavaScript, các cách khai báo biến, các loại dữ liệu và chính tả (literal).

- -

Cơ bản

- -

Cú pháp của JavaScript (JS) phần lớn được vay mượn từ Java, nhưng JS cũng chịu ảnh hưởng từ cú pháp của các ngôn ngữ lập trình khác như Awk, Perl và Python.

- -

JavaScript là ngôn ngữ lập trình sử dụng chuẩn kí tự Unicode và khi viết cũng cần phải lưu ý phân biệt chữ HOA và chữ thường (case-sensitive). Điều này có nghĩa là các từ như Früh (trong tiếng Đức có nghĩa là "sớm" - early) có thể được sử dụng đặt tên cho biến.

- -
let Früh = "foobar"
-
- -

In JavaScript, instructions are called {{Glossary("Statement", "statements")}} and are separated by a semicolon (;).

- -

Dấu chấm phẩy (;) chỉ cần thiết nếu trên cùng một dòng có từ hai câu lệnh trở lên. Trường hợp câu lệnh nằm riêng một dòng thì không cần dấu chấm phẩy.

- -

ECMAScript cũng có những nguyên tắc để tự động thêm dấu chấm phẩy (ASI) để đánh dấu kết thúc một dòng lệnh. (Để biết thêm, xem tài liệu tham khảo chi tiết tại đây: JavaScript's lexical grammar.)

- -

Thực tế thì nên luôn luôn thêm một dấu chấm phẩy vào cuối mỗi câu lệnh, thậm chí khi điều này là không bắt buộc. Việc làm này sẽ giúp tránh bớt bug.

- -

Các đoạn mã Javascript sẽ được đọc từ trái qua phải và được chuyển thể thành một chuỗi các input elements bao gồm: tokens, control characters, line terminators, comments hoặc {{glossary("whitespace")}}. (Spaces, tabs, và các ký tự đánh dấu dòng mới được xem là whitespace.)

- -

Comments

- -

Cú pháp của comments thì ... giống với C++ và một số ngôn ngữ lập trình khác:

- -
// a one line comment <-- đây là cách comment trên 1 dòng
-
-/* this is a longer, cho những dòng dài hoặc nhiều dòng
-   multi-line comment. hãy sử dụng kiểu comment này
- */
-
-/* You can't, however /* nest comments */ SyntaxError */ <-- Không nên lồng comment trong comment, như đoạn comment này sẽ gây ra lỗi vì "/*" được mở bên trong comment trước đó không có hiệu lực đối với từ SyntaxError nên dấu đóng comment "*/" sẽ gây ra lỗi cú pháp. 
- -

Comments hoạt động như whitespace, và sẽ bị bỏ qua trong quá trình script chạy.

- -

Note: Bạn có thể thấy loại cú pháp comment này trong một số file javascript #!/usr/bin/env node.

- -

Đây là cú pháp hashbang comment, và là một comment đặc biệt sử dụng để chỉ định đường dẫn đến một Javascript interpreter cụ thể có nhiệm vụ sẽ chạy đoạn script. Xem chi tiết Hashbang comments.

- -

Khai báo biến

- -

Có 3 kiểu khai báo biến trong JavaScript.

- -
-
{{jsxref("Statements/var", "var")}}
-
Khai báo một biến, và tùy ý bạn có hoặc không khởi tạo giá trị cho nó.
-
{{jsxref("Statements/let", "let")}}
-
Khai báo một block-scoped, hoặc biến local, chỉ có thể truy cập được trong block bao quanh nó.
-
-
function foo() {
-  var x = 10;
-  if (true) {
-   let x = 20; // x ở đây được khai báo lại nhưng khi ra khỏi block-scoped nó sẽ nhận lại giá trị bên trên là 10
-   console.log(x); // in ra 20
-  }
-   console.log(x); // in ra 10
-}
-
-
{{jsxref("Statements/const", "const")}}
-
Khai báo một hằng block-scoped, read-only.
-
- -

Biến

- -

Bạn sử dụng biến như là tên tượng trưng cho các giá trị trong chương trình. Tên của biến được gọi là {{Glossary("Identifier", "identifier")}}, tuân theo những quy tắc nhất định.

- -

Tên biến phải bắt đầu bằng một 'chữ cái', kí tự gạch dưới (_), hoặc kí tự dollar ($). Các ký tự tiếp theo cũng có thể là các chữ số 0-9.  Vì JavaScript là case sensitive, các chữ các bao gồm các ký tự từ "A" đến "Z" (viết hoa) và "a" đến "z" (viết thường).

- -

Bạn có thể sử dụng chuẩn ISO 8859-1 hoặc các kí tự Unicode như å và ü trong tên biến, thậm chí cả các kí tự dạng Unicode escape sequences.

- -

Ví dụ: Number_hits, temp99, and _name.

- -

Declaring variables

- -

Có hai cách khai báo biến:

- - - -

Bạn cũng có thể khai báo biến mà không dùng các từ khóa trên, ví dụ x = 42. Điều này sẽ tạo ra một biến undeclared global variable. Nó sẽ tạo nên một warning trong JavaScript. Undeclared variables có thể dẫn đến các hành vi không mong muốn. Nên khuyến cáo không nên sử dụng chúng.

- -

Evaluating variables

- -

Một biến được khai báo với cú pháp var hoặc let mà không gán giá trị, sẽ có giá trị mặc định là {{jsxref("undefined")}}.

- -

Truong trường hợp truy cập đến một biến chưa được khai báo, thì exception {{jsxref("ReferenceError")}} sẽ được thrown:

- -
var a;
-console.log('The value of a is ' + a); // The value of a is undefined
-
-console.log('The value of b is ' + b); // The value of b is undefined
-var b;
-// This one may puzzle you until you read 'Variable hoisting' below
-
-console.log('The value of c is ' + c); // Uncaught ReferenceError: c is not defined
-
-let x;
-console.log('The value of x is ' + x); // The value of x is undefined
-
-console.log('The value of y is ' + y); // Uncaught ReferenceError: y is not defined
-let y; 
- -

Bạn có thể sử dụng undefined  để xét xem một biến có đang mang giá trị không. Dưới đây là một ví dụ, biến input chưa được gán giá trị, nên biến input lúc này mang giá trị mặc định undefined vậy câu điều kiện if là return true và không chạy vào else.

- -
var input;
-if(input === undefined){
-  doThis();
-} else {
-  doThat();
-}
-
- -

Giá trị undefined tương đương với fasle khi sử dụng trong bối cảnh boolean, như ví dụ dưới đây, chương trình sẽ chạy function myFunction vì element myArray[0]là undefined trả về false.

- -
var myArray = [];
-if (!myArray[0]) {
-  myFunction();
-}
-
-function myFunction() {
-  alert('return false');
-}
-
- -

Khi biến có giá trị = undefined thực hiện phép toán với biến có giá trị cụ thể hoặc hằng số sẽ cho ra giá trị  = NaN (not a number). 

- -
var a;
-a + 2 = NaN
- -

Null khác với Undefined. Khi biến có giá trị {{jsxref("null")}}, biến sẽ mang giá trị 0 trong các phép toán (numeric) và false trong các ngữ cảnh boolean. Ví dụ:

- -
var n = null;
-console.log(n * 32); // Will log 0 to the console
-
- -

Variable scope

- -

Khi bạn khai báo một biến bên ngoài function, biến đó được gọi là global variable, bởi vì biến đó sẽ có hiệu lực đến bất kì đoạn code nào khác trong document hiện tại. Khi bạn khai báo một biến bên trong một function, nó gọi là local variable, vì nó chỉ có thể dùng được trong phạm vi function đó.

- -

Javascript trước phiên bản ECMAScript 6 không có định nghĩa  block statement scope; thay vào đó, một biến được khai báo trong một block được xem là có giá trị local đối với function (hoặc global scope) mà block đó cư trú.

- -

Ví dụ sau đây sẽ log ra 5, vì scope của x là global context (hoặc function context nếu đoạn code này là một phần của function khác). Scope của x không bị giới hạn vào block câu lệnh if trực tiếp gần nhất.

- -
if (true) {
-  var x = 5;
-}
-console.log(x);  // 5
-
- -

Điều này đã thay đổi khi sử dụng kiểu khai báo let được giới thiệu trong ECMAScript 6.

- -
if (true) {
-  let y = 5;
-}
-console.log(y);  // ReferenceError: y is not defined (y bị giới hạn trực tiếp trong block chứa nó)
-
- -

Variable hoisting

- -

Một thứ không bình thường khác về các biến trong JavaScript là bạn có thể tham chiếu đến một biến tại vị trí phía trước câu lệnh khai báo. Khái niệm này gọi là hoisting; các biến trong JavaScript ở khía cạnh nào đó sẽ được "hoisted" (treo) hoặc lifted (nâng) vào vị trí trên cùng của câu lệnh hoặc hàm gần nó nhất. Tuy nhiên, các variables bị hoisted này sẽ trả về giá trị undefined. Nên cho dù bạn khai báo và khởi tạo sau khi bạn sử dụng hoặc tham chiếu đến biến này, thì trước đó nó vẫn trả về undefined.

- -
/**
- * Example 1
- */
-console.log(x); // undefined
-var x = 3;
-console.log(x); // 3
-
-/**
- * Example 2
- */
-// will return a value of undefined
-var myvar = "my value";
-
-(function() {
-  console.log(myvar); // undefined vì bên dưới có dòng khai báo var myvar, điều này làm biến myvar bị hoisting và nhận giá trị mới là undefined (giá trị 'my value' lúc này không còn hiệu lực vì biến đã bị hoisting)
-  var myvar = "local value";
-})();
-
- -

Ví dụ bên trên có thể được biểu đạt theo cách khác như sau:

- -
/**
- * Example 1
- */
-var x;
-console.log(x === undefined); // logs "true"
-x = 3;
-
-/**
- * Example 2
- */
-var myvar = "my value";
-
-(function() {
-  var myvar;
-  console.log(myvar); // undefined
-  myvar = "local value";
-})();
-
- -

Vì vấn đề hoisting này, tất cả các câu lệnh khai báo biến với var bên trong một function nên được đặt gần với đầu của function nhất có thể. Làm điều này giúp gia tăng độ rõ ràng của code (trường hợp dùng var như trong ví dụ 2 ở trên sẽ gây ra hoisting).

- -

Function hoisting

- -

Trong trường hợp của các function, chỉ các function được tạo theo kiểu function declaration là bị hoisted, còn function được tạo theo kiểu function expression thì không. Khác với variable hoisting, hoisted function không trả về giá trị mặc định undefined. Ví dụ:

- -
/* Function declaration */
-
-foo(); // "bar"
-
-function foo() {
-  console.log('bar');
-}
-
-
-/* Function expression */
-
-baz(); // TypeError: baz is not a function
-
-var baz = function() {
-  console.log('bar2');
-};
- -

Biến toàn cục (global variables)

- -

Các global variables trên thực tế là những properties của global object. Trong các web page, global object chính là window, nên bạn có thể set và truy cập đến các global variables bằng cách sử dụng cú pháp window.variable.

- -

Hệ quả  là, bạn có thể truy cập đến các global variables được khai báo trong một window hoặc frame từ một window hoặc frame khác, bằng cách chỉ định rõ tên của window hoặc frame. Ví dụ, nếu một biến có tên phoneNumber được khai báo trong một document, bạn có thể tham chiếu đến biến này từ một iframe như là parent.phoneNumber.

- -

Constants

- -

Bạn có thể tạo các hằng số read-only với từ khóa {{jsxref("Statements/const", "const")}}. Cú pháp đặt tên cho hằng cũng giống như biến, tên hằng phải bắt đầu bằng một chữ cái, hoặc dấu gạch dưới _, hoặc dấu dollar $, và có thể bao gồm mọi ký tự chữ, số, hoặc dấu gạch dưới.

- -
const PI = 3.14;
-
- -

Một hằng số đã khai báo không thể thay đổi giá trị thông qua việc gán lại giá trị hoặc không thể bị khai báo lại trong khi đoạn script đang chạy. Và bắt buộc phải được gán giá trị ngay khi khởi tạo.

- -

Các nguyên tắc về scope cho các hằng số cũng giống như cách các biến block-scoped như let hoạt động.

- -

Bạn không thể khai báo một hằng số với tên trùng với tên function hoặc biến trong cùng một scope. Ví dụ:

- -
// THIS WILL CAUSE AN ERROR
-function f() {};
-const f = 5;
-
-// THIS WILL CAUSE AN ERROR ALSO
-function f() {
-  const g = 5;
-  var g;
-
-  //statements
-}
-
- -

Tuy nhiên, khi gán một object vào một hằng, thì các thuộc tính của object đó là not protected, nên câu lệnh dưới đây sẽ được thực thi mà không lỗi.

- -
const MY_OBJECT = {'key': 'value'};
-MY_OBJECT.key = 'otherValue';
- -

Cũng tương tự, các nội dung trong một mảng cũng là not protected, nên câu lệnh dưới đây sẽ được thực thi mà không lỗi.

- -
const MY_ARRAY = ['HTML','CSS'];
-MY_ARRAY.push('JAVASCRIPT');
-console.log(MY_ARRAY); //logs ['HTML','CSS','JAVASCRIPT'];
- -

Cấu trúc dữ liệu và kiểu dữ liệu

- -

Kiểu dữ liệu

- -

Tiêu chuẩn mới nhất của ECMAScript định nghĩa 8 kiểu dữ liệu:

- - - -

Mặc dù những kiểu dữ liệu này tương đối ít, chúng cho phép bạn có thể thể hiện những hàm rất hữu dụng. {{jsxref("Object", "Objects")}} và {{jsxref("Function", "functions")}} là những phần tử nền tảng khác của JavaScript. Bạn có thể xem object như là những vùng chứa được đặt tên (named container) để phục vụ cho các giá trị, và các hàm là những quy trình thủ tục để đoạn script của bạn thi hành.

- -

Chuyển đổi kiểu dữ liệu

- -

JavaScript là dynamically typed language. Điều đó có nghĩa bạn không cần phải chỉ định kiểu dữ liệu của biến khi bạn khai báo biến, và kiểu dữ liệu được tự động chuyển đổi khi cần thiết trong quá trình đoạn script được thực thi.

- -

Cho nên, ví dụ, bạn có thể định nghĩa một biến như sau:

- -
var answer = 42;
-
- -

Và sau đó, bạn có thể gán cùng một biến này với một giá trị chuỗi, ví dụ:

- -
answer = "Thanks for all the fish...";
-
- -

Bởi vì JavaScript là dynamically typed, việc gán giá trị này sẽ không gây ra lỗi.

- -

Các số và toán tử '+'

- -

Trong các biểu thức (expression) có sự liên quan giữa các giá trị numeric và string với toán tử  +, JavaScript sẽ chuyển đổi giá trị số sang chuỗi. Ví dụ:

- -
x = "The answer is " + 42 // "The answer is 42"
-y = 42 + " is the answer" // "42 is the answer"
-
- -

Với tất cả mọi loại toán tử khác, JavaScript sẽ không chuyển đổi giá trị numeric sang string. Ví dụ:

- -
"37" - 7 // 30
-"37" + 7 // "377"
-
- -

Chuyển từ kiểu chuỗi (string) sang kiểu số (number)

- -

Tong trường hợp một giá trị biểu thị một số nhưng lại được lưu trong bộ nhớ như là một chuỗi, có các phương thức để chuyển đổi.

- - - -

parseInt sẽ chỉ trả về các số nguyên, nên mục đích của nó là làm giảm bớt giá trị cho các số decimals. Thêm nữa, một thực hành tốt nhất cho parseInt là luôn luôn thêm vào nó tham số radix. Tham số radix được dùng để chỉ định hệ số học nào sẽ được sử dụng.

- -
parseInt('101', 2) // 5
- -

Một phương thức khác để nhận được giá trị số từ một chuỗi là dùng toán tử + 

- -
"1.1" + "1.1" = "1.11.1"
-(+"1.1") + (+"1.1") = 2.2
-// Note: the parentheses are added for clarity, not required.
- -

Literals

- -

Literals (nguyên văn), đại diện cho các giá trị trong JavaScript. Đây là những giá trị cố định - không phải biến - mà bạn cung cấp một cách litterally trong script của bạn. Phần này mô tả những kiểu literals sau đây:

- - - -

Array literals

- -

Một array literal là một danh sách của không hoặc nhiều biểu thức, mỗi biểu thức trong đó đại diện cho một phần tử của mảng (array element), được bao bọc trong dấu ngoặc vuông ([]). Khi bạn tạo một mảng bằng cách dùng array literal, nó được khởi tạo với những giá trị cụ thể như là các element của mảng, và length của mảng là số lượng đối số (argument).

- -

Ví dụ sau tạo ra mảng coffees với 3 phần tử và một length của 3:

- -
var coffees = ["French Roast", "Colombian", "Kona"];
-
- -

Note: Một array literal là một kiểu của object initializer. Xem Using Object Initializers.

- -

Nếu một mảng được tạo ra sử dụng một literal trong một top-level script, JavaScript sẽ interpret mảng mỗi lần nó đánh giá biểu thức có chứa array literal. Ngoài ra, một literal được sử dụng trong một hàm sẽ được tạo ra mỗi lần function được gọi.

- -

Note: Các array literals cũng là các Array objects. Xem {{jsxref("Array")}} and Indexed collections để biết chi tiết về Array objects.

- -

Dấu phẩy dư trong các array literals

- -

Bạn không cần phải xác định mọi phần tử trong một array literal. Nếu bạn đặt 2 dấu phẩy trên cùng một hàng, mảng sẽ tạo ra một phần tử mang giá trị undefined. Ví dụ sau tạo ra mảng fish.

- -
var fish = ["Lion", , "Angel"];
-
- -

Mảng này gồm 2 phần tử có giá trị và một phần tử rỗng (fish[0] là "Lion", fish[1] là undefined, và fish[2] là "Angel").

- -

Nếu bạn thêm một dấu phẩy theo sau (trailing comma) phần tử cuối cùng của mãng, dấu phẩy này sẽ bị bỏ qua. Trong ví dụ sau, length của mảng là 3. Không có myList[3]. Tất cả dấu phẩy khác trong danh sách ngầm chỉ định là một phần tử mới. (Note: trailing commas có thể xem là lỗi đối với các trình duyệt cũ và tốt nhất là nên xóa chúng đi).

- -
let myList = ['home', , 'school', ];
-
- -

Trong ví dụ bên dưới, length của mảng là 4, myList[0] và myList[2] bị thiếu.

- -
var myList = [ , 'home', , 'school'];
-
- -

Trong ví dụ dưới, length của mảng là 4, myList[1] và myList[3] bị thiếu. Chỉ có dấu phẩy cuối cùng bị bỏ qua.

- -
var myList = ['home', , 'school', , ];
-
- -

Hiểu được hành vi của cac dấu phẩy thêm này rất quan trọng để hiểu được JavaScript như là một ngôn ngữ. Tuy nhiên, khi viết code của riêng bạn, bạn nên khai báo một cách rõ ràng các phần tử bị thiếu (missing elements) là undefined. Làm vậy sẽ gia tăng độ rõ ràng cho code và dễ bảo trì sau này.

- -

Boolean literals

- -

Kiểu Boolean có 2 giá trị literal: truefalse.

- -

Cẩn thận: Đừng nhầm lẫn giá trị Boolean nguyên thủy true và false với true và fales của {{jsxref("Boolean")}} object. Boolean object là một lớp bao bên ngoài kiểu dữ liệu Boolean nguyên thủy. Xem {{jsxref("Boolean")}} để biết thêm.

- -

Numeric literals

- -

Kiểu dữ liệu {{jsxref("Number")}} và {{jsxref("BigInt")}} có thể được biểu diễn bằng hệ decimal (hệ 10), hệ hexadecimal (hệ 16), octal (hệ 8) và binary (base 2 - hệ nhị phân).

- - - -

Một số ví dụ của numeric literals:

- -
0, 117, -345, 123456789123456789n             (decimal, base 10)
-015, 0001 -0o77, 0o777777777777n              (octal, base 8)
-0x1123, 0x00111, -0xF1A7, 0x123456789ABCDEFn  (hexadecimal, "hex" or base 16)
-0b11, 0b0011, -0b11, 0b11101001010101010101n  (binary, base 2)
-
- -

Chi tiết xem thêm tại: Numeric literals in the Lexical grammar reference.

- -

Floating-point literals

- -

Một floating-point literal (literal số thực dấu chấm động) có thể có các bộ phận sau:

- - - -

Bộ phận số mũ là một ký tự "e" hoặc "E", theo sau nó là một số nguyên integer (số nguyên integer này có thể có thêm phía trước là dấu "+" hoặc "-"). Một floating-point literal phải có ít nhất một ký tự số, và hoặc là một dấu chấm hệ 10 hoặc là ký tự "e" (hoặc "E"). Tóm lại, cú pháp như sau:

- -
[(+|-)][digits][.digits][(E|e)[(+|-)]digits]
-
- -

Ví dụ: 

- -
3.1415926
--.123456789
--3.1E+12
-.1e-23
-
- -

Object literals

- -

Một object literal là một danh sách của không hoặc nhiều cặp property names và associated values (tên thuộc tính và giá trị được liên kết) của một một object, bao bọc bởi cặp dấu ngoặc nhọn ({}).

- -

Lưu ý đừng sử dụng một object literal ngay tại vị trí bắt đầu của một câu lệnh! Điều này sẽ dẫn đến một lỗi (hoặc nó sẽ thực thi theo cách bạn không mong muốn), vì dấu mở ngoặc nhọn { sẽ được interpreted như là bắt đầu của một block.

- -

Ví dụ dưới đây là một ví dụ của object literal. Phần tử đầu tiên của object car định nghĩa là một thuộc tính (property), myCar, và được gán giá trị kiểu chuỗi là "myCar", phần tử thứ 2, thuộc tính getCar, ngay lập tức được gán giá trị là kết quả trả về của việc gọi hàm (CarTypes("Honda")); phần tử thứ 3, thuộc tính special, sử dụng một biến đã tồn tại (sales).

- -
var Sales = "Toyota";
-
-function CarTypes(name) {
-  if (name == "Honda") {
-    return name;
-  } else {
-    return "Sorry, we don't sell " + name + ".";
-  }
-}
-
-var car = { myCar: "Saturn", getCar: CarTypes("Honda"), special: Sales };
-
-console.log(car.myCar);   // Saturn
-console.log(car.getCar);  // Honda
-console.log(car.special); // Toyota
-
- -

Thêm nữa, bạn có thể sử dụng cả kiểu số hoặc chữ để đặt tên cho thuộc tính của object, hoặc bạn có thể lồng một object bên trong một object khác. Ví dụ:

- -
var car = { manyCars: {a: "Saab", "b": "Jeep"}, 7: "Mazda" };
-
-console.log(car.manyCars.b); // Jeep
-console.log(car[7]); // Mazda
-
- -

Các tên thuộc tính của object có thể là bất kỳ chuỗi nào, bao gồm cả chuỗi rỗng ''. Nếu tên thuộc tính không phải là một JavaScript identifier hợp lệ, hoặc nó là số, thì nó phải được bao bọc trong các dấu nháy.

- -

Các tên thuộc tính mà không phải là các identifier hợp lệ không thể được truy cập đến như các thuộc tính thông thường là dùng dấu chấm (.), nhưng có thể được truy cập đến và set giá trị bằng cặp dấu ngoặc vuông giống mảng ("[]").

- -
var unusualPropertyNames = {
-  "": "An empty string",
-  "!": "Bang!"
-}
-console.log(unusualPropertyNames."");   // SyntaxError: Unexpected string
-console.log(unusualPropertyNames[""]);  // An empty string
-console.log(unusualPropertyNames.!);    // SyntaxError: Unexpected token !
-console.log(unusualPropertyNames["!"]); // Bang!
- -

Please note:

- -
var foo = {a: "alpha", 2: "two"};
-console.log(foo.a);    // alpha
-console.log(foo[2]);   // two
-//console.log(foo.2);  // Error: missing ) after argument list
-//console.log(foo[a]); // Error: a is not defined
-console.log(foo["a"]); // alpha
-console.log(foo["2"]); // two
-
- -

Enhanced Object literals

- -

Trong ES2015, các object literals được mở rộng từ đó hỗ trợ thêm việc cài đặt các prototype tại construction, shorthand cho việc gán biến foo: foo, các phương thức defining, make super calls, và xử lý các tên thuộc tính với các biểu thức. Cùng nhau, những thứ này cũng mang object listerals và khai báo class đến gần nhau hơn, và cho phép các thiết kế object-based để đạt được lợi ích từ một số tiện nghi giống nhau.

- -
var obj = {
-    // __proto__
-    __proto__: theProtoObj,
-    // Shorthand for ‘handler: handler’
-    handler,
-    // Methods
-    toString() {
-     // Super calls
-     return 'd ' + super.toString();
-    },
-    // Computed (dynamic) property names
-    [ 'prop_' + (() => 42)() ]: 42
-};
- -

RegExp literals

- -

Một regex literal (được định nghĩa chi tiết sau đây) là một mô hình mẫu bao bọc giữa các dấu xuyệt /. Ví dụ:

- -
var re = /ab+c/;
- -

String literals

- -

Một string literal là không có hoặc có nhiều ký tự bao bọc trong dấu (") hoặc ('). Một chuỗi (string) phải được giới hạn trong cặp dấu cùng loại; hoặc là cùng nháy đơn hoặc là cùng nháy kép. Ví dụ:

- - - -

Bạn có thể gọi các phương thức của {{jsxref("String")}} object lên một giá trị string nguyên văn (string literal) - JavaScript tự động chuyển đổi string literal sang một String object tạm, gọi phương thức để chạy, chạy xong hủy bỏ String object tạm đó. Bạn cũng có thể sử dụng thuộc tính String.length với một string literal:

- -
console.log("John's cat".length)
-// Will print the number of symbols in the string including whitespace.
-// In this case, 10.
-
- -

Trong ES2015, template literals cũng được đưa vào sử dụng. Template literals bao bọc trong dấu back-tick (`) (dấu huyền) thay vì dấu nháy đơn hay nháy kép.

- -

Các template strings cung cấp cú pháp đặc biệt (synctactic sugar) để xây dựng các chuỗi (string). (Điều này tương tự với đặc điểm nội suy chuỗi string interpolation trong Perl, Python, v.v...)

- -

Tùy trường hợp, một thẻ tag có thể được thêm vào để cho phép việc xây dựng chuỗi được tùy chỉnh, tránh injection attacks, hoặc xây dựng nên những cấu trúc dữ liệu higher-level từ các nội dung của chuỗi.

- -
// Basic literal string creation
-// `In JavaScript '\n' is a line-feed.`
-
-// Multiline strings
-`In JavaScript, template strings can run
- over multiple lines, but double and single
- quoted strings cannot.`
-
-// String interpolation
-var name = 'Bob', time = 'today';
-`Hello ${name}, how are you ${time}?`
-
-// Construct an HTTP request prefix used to interpret the replacements and construction
-POST`http://foo.org/bar?a=${a}&b=${b}
-     Content-Type: application/json
-     X-Credentials: ${credentials}
-     { "foo": ${foo},
-       "bar": ${bar}}`(myOnReadyStateChangeHandler);
-
- -

Bạn nên sử dụng các string literals đơn thuần nếu không cần thiết phải sử dụng đến String object. Xem {{jsxref("String")}} để biết chi tiết về String objects.

- -

Sử dụng các ký tự đặc biệt trong chuỗi

- -

Ngoài các ký tự thông thường, bạn cũng có thể thêm vào các ký tự đặc biệt trong chuỗi, ví dụ:

- -
"one line \n another line"
-
- -

Bảng dưới đây liệt kê danh sách các ký tự đặc biệt có thể sử dụng trong các chuỗi JavaScript.

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Table: JavaScript special characters
CharacterMeaning
\0Null Byte
\bBackspace - Khoảng cách
\fForm feed -
\nNew line - Dòng mới
\rCarriage return
\tTab - Tab một tab
\vVertical tab - Tab dọc
\'Apostrophe or single quote - trích dẫn đơn
\"Double quote - ngoặc kép.
\\Backslash character
\XXXThe character with the Latin-1 encoding specified by up to three octal digits XXX between 0 and 377. For example, \251 is the octal sequence for the copyright symbol.
\xXXThe character with the Latin-1 encoding specified by the two hexadecimal digits XX between 00 and FF. For example, \xA9 is the hexadecimal sequence for the copyright symbol.
\uXXXXThe Unicode character specified by the four hexadecimal digits XXXX. For example, \u00A9 is the Unicode sequence for the copyright symbol. See {{anch("Unicode escape sequences")}}.
- -

Escaping characters

- -

Đối với các ký tự không có trong bảng trên, dấu backslash \ được thêm vào trước sẽ bị bỏ qua, nhưng cách dùng này đã không còn nữa và nên được tránh dùng.

- -

Bạn có thể chèn vào một dấu ngoặc kép bên trong một chuỗi bằng cách đặt phía trước nó một dấu backslash \. Điều này tức là escaping dấu trích dẫn. Ví dụ:

- -
var quote = "He read \"The Cremation of Sam McGee\" by R.W. Service.";
-console.log(quote);
-
- -

Kết quả của đoạn code trên là:

- -
He read "The Cremation of Sam McGee" by R.W. Service.
-
- -

Để thêm một dấu backslash thật sự vào trong chuỗi, bạn phải escape dấu backslash đó. Ví dụ, để gán dường dẫn file c:\temp vào một chuỗi:

- -
var home = "c:\\temp";
-
- -

Bạn cũng có thể escape các line breaks bằng cách đặt vào trước chúng một dấu backslash. Backslash và line break đều sẽ được remove khỏi giá trị của chuỗi.

- -
var str = "this string \
-is broken \
-across multiple\
-lines."
-console.log(str);   // this string is broken across multiplelines.
-
- -

Mặc dù JavaScript không có cú pháp "heredoc", bạn có thể gần đạt được điều này bằng cách thêm vào một linebreak escape và một escaped linebreak ở cuối mỗi dòng:

- -
var poem =
-"Roses are red,\n\
-Violets are blue.\n\
-I'm schizophrenic,\n\
-And so am I."
-
- -

Thông tin thêm

- -

Chương này tập trung vào cú pháp cơ bản cho các việc khai báo và các kiểu dữ liệu. Để biết rõ hơn về cấu trúc ngôn ngữ JavaScript, xem các chương tiếp theo trong bộ hướng dẫn này:

- - - -

Trong chương tiếp theo, chúng ta sẽ tìm hiểu về control flow constructs và error handling.

- -

{{PreviousNext("Web/JavaScript/Guide/Introduction", "Web/JavaScript/Guide/Control_flow_and_error_handling")}}

diff --git a/files/vi/web/javascript/guide/gioi-thieu/index.html b/files/vi/web/javascript/guide/gioi-thieu/index.html deleted file mode 100644 index f8fddcf666..0000000000 --- a/files/vi/web/javascript/guide/gioi-thieu/index.html +++ /dev/null @@ -1,137 +0,0 @@ ---- -title: Giới thiệu -slug: Web/JavaScript/Guide/Gioi-thieu -tags: - - Guide - - JavaScript -translation_of: Web/JavaScript/Guide/Introduction ---- -
{{jsSidebar("JavaScript Guide")}} {{PreviousNext("Web/JavaScript/Guide", "Web/JavaScript/Guide/Grammar_and_types")}}
- -

Trong phần này: giới thiệu về JavaScript và thảo luận về một số khái niệm cơ bản của JavaScript.

- -

Kiến thức nền tảng cần có

- -

Để đến với JavaScript, chúng tôi giả sử rằng bạn đã có một số hiểu biết nền tảng:

- - - -

Bạn có thể tìm thêm thông tin về JavaScript ở đâu?

- -

Tài liệu về JavaScript tại MDN bao gồm:

- - - -

Nếu bạn mới tìm hiểu JavaScript, hãy bắt đầu bằng cách đọc các bài viết tại learning areaJavaScript Guide. Một khi bạn đã nắm vững các nền tảng cơ bản, bạn có thể sử dụng JavaScript Reference để lấy những thông tin chi tiết của từng object và các câu lệnh (statements).

- -

JavaScript là gì?

- -

JavaScript là một ngôn ngữ lập trình đa nền tảng (cross-platform), ngôn ngữ lập trình kịch bản, hướng đối tượng. JavaScript là một ngôn ngữ nhỏ và nhẹ (small and lightweight). Khi nằm bên trong một môi trường (host environment), JavaScript có thể kết nối tới các object của môi trường đó và cung cấp các cách quản lý chúng (object).

- -

JavaScript chứa các thư viện tiêu chuẩn cho các object, ví dụ như:  Array, Date, và Math, và các yếu tố cốt lõi của ngôn ngữ lập trình như: toán tử (operators), cấu trúc điều khiển (control structures), và câu lệnh. JavaScript có thể được mở rộng cho nhiều mục đích bằng việc bổ sung thêm các object; ví dụ:

- - - -

JavaScript và Java

- -

JavaScript và Java thì giống nhau ở những cái này nhưng lại khác nhau ở cái khác. Ngôn ngữ JavaScript có lẽ giống giống với ngôn ngữ Java nhưng JavaScript không có khai báo static cũng như không có "tính mạnh về kiểu" (strong type checking) như Java. Cú pháp (syntax) lập trình, đặt tên công thức và xây dựng điều khiển lưu lượng (control-flow) cơ bản của JavaScript phần lớn dựa theo ngôn ngữ lập trình Java, đó cũng là lý do tại sao JavaScript được đổi tên từ LiveScript thành JavaScript.

- -

Ngược lại với hệ thống thời gian biên dịch (compile-time) Java của các lớp được xây dựng bởi các khai báo, JavaScript hỗ trợ nền tảng hệ thống thời gian chạy dựa trên một số lượng nhỏ các loại dữ liệu đại diện cho số, boolean và dữ liệu các chuỗi. JavaScript có một mô hình ít phổ biến hơn là mô hình đối tượng dựa trên nguyên mẫu (prototype-based) thay vì các mô hình đối tượng dựa trên lớp (class-based). Các mô hình dựa trên nguyên mẫu cung cấp khả năng thừa kế năng động; nghĩa là, những gì được kế thừa có thể khác nhau cho các đối tượng khác nhau. JavaScript cũng hỗ trợ các phương thức (function) không khai báo bất cứ gì ở trỏng. Phương thức có thể là một trong các thuộc tính (property) của các đối tượng, thực thi như là một phương thức đã được định kiểu (loosely typed methods).

- -

JavaScript là một ngôn ngữ rất tự do so với Java. Bạn có thể không cần khai báo tất cả biến (variable), lớp (class) và cả phương thức (method). Bạn không cần quan tâm cho dù phương thức đó là public, private hoặc protected, và bạn không cần phải implement interfaces. Biến, tham số (parameters), và kiểu trả về của phương thức (function return) cũng không cần phải rõ ràng.

- -

Java is a class-based programming language designed for fast execution and type safety. Type safety means, for instance, that you can't cast a Java integer into an object reference or access private memory by corrupting Java bytecodes. Java's class-based model means that programs consist exclusively of classes and their methods. Java's class inheritance and strong typing generally require tightly coupled object hierarchies. These requirements make Java programming more complex than JavaScript programming.

- -

In contrast, JavaScript descends in spirit from a line of smaller, dynamically typed languages such as HyperTalk and dBASE. These scripting languages offer programming tools to a much wider audience because of their easier syntax, specialized built-in functionality, and minimal requirements for object creation.

- - - - - - - - - - - - - - - - - - - - - - - -
JavaScript so sánh với Java
JavaScriptJava
Hướng đối tượng (Object-oriented). Không phân biệt giữa kiểu (type) của các đối tượng (object). Tính kế thừa thông qua cơ chế nguyên mẫu (prototype), và các thuộc tính (property) cũng như phương thức có thể thêm vào bất cứ đối tượng nào một cách năng động.Class-based (nền tảng lớp.).Đối tượng được thành các lớp với tất cả kế thừa thông qua hệ thống phân cấp lớp. Các lớp không thể thêm vào các thuộc tính và phương thức mới một cách năng động.
Không khai báo kiểu dữ liệu cho biến (dynamic typing).Phải khai báo kiểu dữ liệu cho biến (static typing).
Không thể tự động ghi vào ổ đĩa cứng.Có thể tự động ghi dữ liệu vào đĩa cứng.
- -

Thêm thông tin về sự khác nhau giữa JavaScript và Java, xem chương: Details of the object model.

- -

JavaScript và tiêu chuẩn ECMAScript

- -

JavaScript được tiêu chuẩn hóa tại Ecma International — the European association for standardizing information and communication systems, Liên kết Châu Âu cho các tiêu chuẩn hóa hệ thống thông tin và truyền thông (ECMA trước đây là viết tắt cho the European Computer Manufacturers Association) cung cấp một tiêu chuẩn hóa, nền tảng ngôn ngữ lập trình mở quốc tế lên JavaScript. Phiên bản đã tiêu chuẩn hóa của JavaScript được gọi là ECMAScript, làm việc giống với cái cách mà tất cả ứng dụng đã được hỗ trợ theo tiêu chuẩn. Các công ty có thể sử dụng tiêu chuẩn ngôn ngữ mở (open standard language) để phát triển các implementation của JavaScript riêng cho họ. Tiêu chuẩn ECMAScript là tài liệu nằm trong tiêu chuẩn ECMA-262 (ECMA-262 specification) . Xem New in JavaScript để biết thêm về sự khác nhau giữa các phiên bản JavaScript cũng như sự khác nhau của phiên bản tiêu chuẩn ECMAScript (ECMAScript specification editions).

- -

Tiêu chuẩn ECMA-262 cũng đã được phê duyệt bởi ISO (International Organization for Standardization) tại ISO-16262. Bạn cũng có thể tìm tiêu chuẩn trên the Ecma International website. Tiêu chuẩn ECMAScript không bao gồm các mô tả cho Document Object Model (DOM), nó được tiêu chuẩn hóa bởi World Wide Web Consortium (W3C). DOM định nghĩa cách mà các đối tượng trong HTML tiếp xúc với các đoạn script của bạn. Để có được một cảm nhận tốt hơn về các công nghệ khác nhau được sử dụng khi lập trình với JavaScript, hãy tham khảo bài viết tổng quan về công nghệ JavaScript.

- -

Tài liệu JavaScript và tiêu chuẩn ECMAScript

- -

Tiêu chuẩn ECMAScript là một tập hợp yêu cầu các việc cần thực hiện khi triển khai ECMAScript; nó rất là hữu ích nếu bạn muốn tạo ra một trình biên dịch tiêu chuẩn các tính năng của ngôn ngữ trong ECMAScript implementation hoặc bộ máy biên dịch của bạn (giống như SpiderMonkey của Firefox, hoặc v8 của Chrome).

- -

Tài liệu ECMAScript được tạo ra không dự định hỗ trợ các lập trình viên script; sử dụng tài liệu JavaScript để lấy thông tin cho việc viết scripts của bạn.

- -

Tiêu chuẩn ECMAScript sử dụng các thuật ngữ và cú pháp có thể các lập trình viên JavaScript chưa được làm quen. Mặc dù sự mô tả của ngôn ngữ có lẽ khác nhau trong ECMAScript, nhưng bản thân ngôn ngữ vẫn giữ nguyên, không thay đổi. JavaScript hỗ trợ tất cả chức năng được nêu trong tiêu chuẩn ECMAScript.

- -

Tài liệu JavaScript mô tả các khía cạnh của ngôn ngữ lập trình JavaScript, thích hợp cho các lập trình viên JavaScript sử dụng.

- -

Bắt đầu với JavaScript

- -

Bắt đầu với JavaScript rất đơn giản: tất cả những gì bạn cần là một trình duyệt Web hiện đại. Trong các bài hướng dẫn có kèm theo một số tính năng JavaScript, mà nó chỉ chạy được ở các phiên bản trình duyệt mới nhất của Firefox, hoặc... cách tốt nhất là sử dụng một số phiên bản trình duyệt gần đây nhất của Firefox..

- -

Có 2 công cụ được xây dựng trong Firefox, nó rất hữu ích để chạy các 'thí nghiệm' với JavaScript, đó là: Web ConsoleScratchpad.

- -

Web Console

- -

Web Console cho phép bạn thấy thông tin về trang Web đang chạy, và kèm theo một command line, với nó bạn có thể sử dụng để chạy một đoạn lệnh JavaScript trên trang Web hiện tại.

- -

Mở Web Console bằng cách chọn "Web Console" từ menu "Web Developer" (Ctrl + Shift + I),  "Web Developer" nằm trong Menu chính của Firefox, nó có hình cờ lê, tên: Developer (nếu vẫn không thấy nó, bạn có thể mở menu và nhấn Customize để kéo nó ra ngoài). Sau khi mở lên, nó sẽ là 1 bảng hiển thị nằm phía dưới của cửa sổ trình duyệt. Có 1 ô nhập chạy dài dưới cùng của cửa sổ Web Console (khoanh vùng màu đỏ trong mình), nó chính là command line, với nó bạn có thể nhập vào đoạn JavaScript mà bạu muốn thực thi, và sau khi Enter thì trình duyệt sẽ chạy và trả về kết quả lên bảng Web Console nằm trên nó:

- -

- -

Scratchpad

- -

Web Console có thể rất hiệu quả cho việc chạy đơn lẻ từng dòng lệnh của JavaScript, bạn cũng có thể chạy những đoạn lệnh nhiều dòng với nó (Ctrl + Enter)... Nhưng có vẻ nó không được tiện lợi cho lắm! Bạn không thể lưu lại code khi sử dụng Web Console. Với các 'thí nghiệm' dài và phức tạp thì Scratchpad là một công cụ hiệu quả.

- -

Để mở Scratchpad, chọn "Scratchpad" từ menu "Web Developer" (Ctrl + Shift + I),  "Web Developer" nằm trong Menu chính của Firefox, nó có hình cờ lê, tên: Developer (nếu vẫn không thấy nó, bạn có thể mở menu và nhấn Customize để kéo nó ra ngoài).  Nó sẽ mở lên trong một cửa sổ window riêng với trình duyệt và là một trình soạn thảo mà bạn có thể sử dụng để viết và chạy JavaScript trong trình duyệt. Bạn cũng có thế lưu lại hoặc mở lên các đoạn script đó lên từ ổ đĩa.

- -

Nếu bạn chọn "Inspect", đoạn code trong cửa sổ nãy sẽ chạy trong trình duyệt và xuất kết quả trở về bảng dưới dạng comment:

- -

- -

Hello world

- -

Bắt đầu với JavaScript, mở Web Console hoặc Scarthpad và viết code JavaScript hiển thị "Hello world" đầu tiên của bạn:

- -
function greetMe(user) {
-  return "Hi " + user;
-}
-
-greetMe("Alice"); // "Hi Alice"
-
- -

Trong trang tiếp theo, chúng tôi sẽ giới thiệu cho bạn về cú pháp và các đặc tính của ngôn ngữ JavaScript, với nó, bạn sẽ có thể viết các ứng dụng phức tạp.

- -

{{PreviousNext("Web/JavaScript/Guide", "Web/JavaScript/Guide/Grammar_and_types")}}

diff --git a/files/vi/web/javascript/guide/grammar_and_types/index.html b/files/vi/web/javascript/guide/grammar_and_types/index.html new file mode 100644 index 0000000000..64f63492d2 --- /dev/null +++ b/files/vi/web/javascript/guide/grammar_and_types/index.html @@ -0,0 +1,710 @@ +--- +title: Cú pháp lập trình +slug: Web/JavaScript/Guide/cu-phap-lap-trinh +translation_of: Web/JavaScript/Guide/Grammar_and_types +--- +
{{jsSidebar("JavaScript Guide")}} {{PreviousNext("Web/JavaScript/Guide/Introduction", "Web/JavaScript/Guide/Control_flow_and_error_handling")}}
+ +

Phần này nói về các cú pháp cơ bản của ngôn ngữ JavaScript, các cách khai báo biến, các loại dữ liệu và chính tả (literal).

+ +

Cơ bản

+ +

Cú pháp của JavaScript (JS) phần lớn được vay mượn từ Java, nhưng JS cũng chịu ảnh hưởng từ cú pháp của các ngôn ngữ lập trình khác như Awk, Perl và Python.

+ +

JavaScript là ngôn ngữ lập trình sử dụng chuẩn kí tự Unicode và khi viết cũng cần phải lưu ý phân biệt chữ HOA và chữ thường (case-sensitive). Điều này có nghĩa là các từ như Früh (trong tiếng Đức có nghĩa là "sớm" - early) có thể được sử dụng đặt tên cho biến.

+ +
let Früh = "foobar"
+
+ +

In JavaScript, instructions are called {{Glossary("Statement", "statements")}} and are separated by a semicolon (;).

+ +

Dấu chấm phẩy (;) chỉ cần thiết nếu trên cùng một dòng có từ hai câu lệnh trở lên. Trường hợp câu lệnh nằm riêng một dòng thì không cần dấu chấm phẩy.

+ +

ECMAScript cũng có những nguyên tắc để tự động thêm dấu chấm phẩy (ASI) để đánh dấu kết thúc một dòng lệnh. (Để biết thêm, xem tài liệu tham khảo chi tiết tại đây: JavaScript's lexical grammar.)

+ +

Thực tế thì nên luôn luôn thêm một dấu chấm phẩy vào cuối mỗi câu lệnh, thậm chí khi điều này là không bắt buộc. Việc làm này sẽ giúp tránh bớt bug.

+ +

Các đoạn mã Javascript sẽ được đọc từ trái qua phải và được chuyển thể thành một chuỗi các input elements bao gồm: tokens, control characters, line terminators, comments hoặc {{glossary("whitespace")}}. (Spaces, tabs, và các ký tự đánh dấu dòng mới được xem là whitespace.)

+ +

Comments

+ +

Cú pháp của comments thì ... giống với C++ và một số ngôn ngữ lập trình khác:

+ +
// a one line comment <-- đây là cách comment trên 1 dòng
+
+/* this is a longer, cho những dòng dài hoặc nhiều dòng
+   multi-line comment. hãy sử dụng kiểu comment này
+ */
+
+/* You can't, however /* nest comments */ SyntaxError */ <-- Không nên lồng comment trong comment, như đoạn comment này sẽ gây ra lỗi vì "/*" được mở bên trong comment trước đó không có hiệu lực đối với từ SyntaxError nên dấu đóng comment "*/" sẽ gây ra lỗi cú pháp. 
+ +

Comments hoạt động như whitespace, và sẽ bị bỏ qua trong quá trình script chạy.

+ +

Note: Bạn có thể thấy loại cú pháp comment này trong một số file javascript #!/usr/bin/env node.

+ +

Đây là cú pháp hashbang comment, và là một comment đặc biệt sử dụng để chỉ định đường dẫn đến một Javascript interpreter cụ thể có nhiệm vụ sẽ chạy đoạn script. Xem chi tiết Hashbang comments.

+ +

Khai báo biến

+ +

Có 3 kiểu khai báo biến trong JavaScript.

+ +
+
{{jsxref("Statements/var", "var")}}
+
Khai báo một biến, và tùy ý bạn có hoặc không khởi tạo giá trị cho nó.
+
{{jsxref("Statements/let", "let")}}
+
Khai báo một block-scoped, hoặc biến local, chỉ có thể truy cập được trong block bao quanh nó.
+
+
function foo() {
+  var x = 10;
+  if (true) {
+   let x = 20; // x ở đây được khai báo lại nhưng khi ra khỏi block-scoped nó sẽ nhận lại giá trị bên trên là 10
+   console.log(x); // in ra 20
+  }
+   console.log(x); // in ra 10
+}
+
+
{{jsxref("Statements/const", "const")}}
+
Khai báo một hằng block-scoped, read-only.
+
+ +

Biến

+ +

Bạn sử dụng biến như là tên tượng trưng cho các giá trị trong chương trình. Tên của biến được gọi là {{Glossary("Identifier", "identifier")}}, tuân theo những quy tắc nhất định.

+ +

Tên biến phải bắt đầu bằng một 'chữ cái', kí tự gạch dưới (_), hoặc kí tự dollar ($). Các ký tự tiếp theo cũng có thể là các chữ số 0-9.  Vì JavaScript là case sensitive, các chữ các bao gồm các ký tự từ "A" đến "Z" (viết hoa) và "a" đến "z" (viết thường).

+ +

Bạn có thể sử dụng chuẩn ISO 8859-1 hoặc các kí tự Unicode như å và ü trong tên biến, thậm chí cả các kí tự dạng Unicode escape sequences.

+ +

Ví dụ: Number_hits, temp99, and _name.

+ +

Declaring variables

+ +

Có hai cách khai báo biến:

+ + + +

Bạn cũng có thể khai báo biến mà không dùng các từ khóa trên, ví dụ x = 42. Điều này sẽ tạo ra một biến undeclared global variable. Nó sẽ tạo nên một warning trong JavaScript. Undeclared variables có thể dẫn đến các hành vi không mong muốn. Nên khuyến cáo không nên sử dụng chúng.

+ +

Evaluating variables

+ +

Một biến được khai báo với cú pháp var hoặc let mà không gán giá trị, sẽ có giá trị mặc định là {{jsxref("undefined")}}.

+ +

Truong trường hợp truy cập đến một biến chưa được khai báo, thì exception {{jsxref("ReferenceError")}} sẽ được thrown:

+ +
var a;
+console.log('The value of a is ' + a); // The value of a is undefined
+
+console.log('The value of b is ' + b); // The value of b is undefined
+var b;
+// This one may puzzle you until you read 'Variable hoisting' below
+
+console.log('The value of c is ' + c); // Uncaught ReferenceError: c is not defined
+
+let x;
+console.log('The value of x is ' + x); // The value of x is undefined
+
+console.log('The value of y is ' + y); // Uncaught ReferenceError: y is not defined
+let y; 
+ +

Bạn có thể sử dụng undefined  để xét xem một biến có đang mang giá trị không. Dưới đây là một ví dụ, biến input chưa được gán giá trị, nên biến input lúc này mang giá trị mặc định undefined vậy câu điều kiện if là return true và không chạy vào else.

+ +
var input;
+if(input === undefined){
+  doThis();
+} else {
+  doThat();
+}
+
+ +

Giá trị undefined tương đương với fasle khi sử dụng trong bối cảnh boolean, như ví dụ dưới đây, chương trình sẽ chạy function myFunction vì element myArray[0]là undefined trả về false.

+ +
var myArray = [];
+if (!myArray[0]) {
+  myFunction();
+}
+
+function myFunction() {
+  alert('return false');
+}
+
+ +

Khi biến có giá trị = undefined thực hiện phép toán với biến có giá trị cụ thể hoặc hằng số sẽ cho ra giá trị  = NaN (not a number). 

+ +
var a;
+a + 2 = NaN
+ +

Null khác với Undefined. Khi biến có giá trị {{jsxref("null")}}, biến sẽ mang giá trị 0 trong các phép toán (numeric) và false trong các ngữ cảnh boolean. Ví dụ:

+ +
var n = null;
+console.log(n * 32); // Will log 0 to the console
+
+ +

Variable scope

+ +

Khi bạn khai báo một biến bên ngoài function, biến đó được gọi là global variable, bởi vì biến đó sẽ có hiệu lực đến bất kì đoạn code nào khác trong document hiện tại. Khi bạn khai báo một biến bên trong một function, nó gọi là local variable, vì nó chỉ có thể dùng được trong phạm vi function đó.

+ +

Javascript trước phiên bản ECMAScript 6 không có định nghĩa  block statement scope; thay vào đó, một biến được khai báo trong một block được xem là có giá trị local đối với function (hoặc global scope) mà block đó cư trú.

+ +

Ví dụ sau đây sẽ log ra 5, vì scope của x là global context (hoặc function context nếu đoạn code này là một phần của function khác). Scope của x không bị giới hạn vào block câu lệnh if trực tiếp gần nhất.

+ +
if (true) {
+  var x = 5;
+}
+console.log(x);  // 5
+
+ +

Điều này đã thay đổi khi sử dụng kiểu khai báo let được giới thiệu trong ECMAScript 6.

+ +
if (true) {
+  let y = 5;
+}
+console.log(y);  // ReferenceError: y is not defined (y bị giới hạn trực tiếp trong block chứa nó)
+
+ +

Variable hoisting

+ +

Một thứ không bình thường khác về các biến trong JavaScript là bạn có thể tham chiếu đến một biến tại vị trí phía trước câu lệnh khai báo. Khái niệm này gọi là hoisting; các biến trong JavaScript ở khía cạnh nào đó sẽ được "hoisted" (treo) hoặc lifted (nâng) vào vị trí trên cùng của câu lệnh hoặc hàm gần nó nhất. Tuy nhiên, các variables bị hoisted này sẽ trả về giá trị undefined. Nên cho dù bạn khai báo và khởi tạo sau khi bạn sử dụng hoặc tham chiếu đến biến này, thì trước đó nó vẫn trả về undefined.

+ +
/**
+ * Example 1
+ */
+console.log(x); // undefined
+var x = 3;
+console.log(x); // 3
+
+/**
+ * Example 2
+ */
+// will return a value of undefined
+var myvar = "my value";
+
+(function() {
+  console.log(myvar); // undefined vì bên dưới có dòng khai báo var myvar, điều này làm biến myvar bị hoisting và nhận giá trị mới là undefined (giá trị 'my value' lúc này không còn hiệu lực vì biến đã bị hoisting)
+  var myvar = "local value";
+})();
+
+ +

Ví dụ bên trên có thể được biểu đạt theo cách khác như sau:

+ +
/**
+ * Example 1
+ */
+var x;
+console.log(x === undefined); // logs "true"
+x = 3;
+
+/**
+ * Example 2
+ */
+var myvar = "my value";
+
+(function() {
+  var myvar;
+  console.log(myvar); // undefined
+  myvar = "local value";
+})();
+
+ +

Vì vấn đề hoisting này, tất cả các câu lệnh khai báo biến với var bên trong một function nên được đặt gần với đầu của function nhất có thể. Làm điều này giúp gia tăng độ rõ ràng của code (trường hợp dùng var như trong ví dụ 2 ở trên sẽ gây ra hoisting).

+ +

Function hoisting

+ +

Trong trường hợp của các function, chỉ các function được tạo theo kiểu function declaration là bị hoisted, còn function được tạo theo kiểu function expression thì không. Khác với variable hoisting, hoisted function không trả về giá trị mặc định undefined. Ví dụ:

+ +
/* Function declaration */
+
+foo(); // "bar"
+
+function foo() {
+  console.log('bar');
+}
+
+
+/* Function expression */
+
+baz(); // TypeError: baz is not a function
+
+var baz = function() {
+  console.log('bar2');
+};
+ +

Biến toàn cục (global variables)

+ +

Các global variables trên thực tế là những properties của global object. Trong các web page, global object chính là window, nên bạn có thể set và truy cập đến các global variables bằng cách sử dụng cú pháp window.variable.

+ +

Hệ quả  là, bạn có thể truy cập đến các global variables được khai báo trong một window hoặc frame từ một window hoặc frame khác, bằng cách chỉ định rõ tên của window hoặc frame. Ví dụ, nếu một biến có tên phoneNumber được khai báo trong một document, bạn có thể tham chiếu đến biến này từ một iframe như là parent.phoneNumber.

+ +

Constants

+ +

Bạn có thể tạo các hằng số read-only với từ khóa {{jsxref("Statements/const", "const")}}. Cú pháp đặt tên cho hằng cũng giống như biến, tên hằng phải bắt đầu bằng một chữ cái, hoặc dấu gạch dưới _, hoặc dấu dollar $, và có thể bao gồm mọi ký tự chữ, số, hoặc dấu gạch dưới.

+ +
const PI = 3.14;
+
+ +

Một hằng số đã khai báo không thể thay đổi giá trị thông qua việc gán lại giá trị hoặc không thể bị khai báo lại trong khi đoạn script đang chạy. Và bắt buộc phải được gán giá trị ngay khi khởi tạo.

+ +

Các nguyên tắc về scope cho các hằng số cũng giống như cách các biến block-scoped như let hoạt động.

+ +

Bạn không thể khai báo một hằng số với tên trùng với tên function hoặc biến trong cùng một scope. Ví dụ:

+ +
// THIS WILL CAUSE AN ERROR
+function f() {};
+const f = 5;
+
+// THIS WILL CAUSE AN ERROR ALSO
+function f() {
+  const g = 5;
+  var g;
+
+  //statements
+}
+
+ +

Tuy nhiên, khi gán một object vào một hằng, thì các thuộc tính của object đó là not protected, nên câu lệnh dưới đây sẽ được thực thi mà không lỗi.

+ +
const MY_OBJECT = {'key': 'value'};
+MY_OBJECT.key = 'otherValue';
+ +

Cũng tương tự, các nội dung trong một mảng cũng là not protected, nên câu lệnh dưới đây sẽ được thực thi mà không lỗi.

+ +
const MY_ARRAY = ['HTML','CSS'];
+MY_ARRAY.push('JAVASCRIPT');
+console.log(MY_ARRAY); //logs ['HTML','CSS','JAVASCRIPT'];
+ +

Cấu trúc dữ liệu và kiểu dữ liệu

+ +

Kiểu dữ liệu

+ +

Tiêu chuẩn mới nhất của ECMAScript định nghĩa 8 kiểu dữ liệu:

+ + + +

Mặc dù những kiểu dữ liệu này tương đối ít, chúng cho phép bạn có thể thể hiện những hàm rất hữu dụng. {{jsxref("Object", "Objects")}} và {{jsxref("Function", "functions")}} là những phần tử nền tảng khác của JavaScript. Bạn có thể xem object như là những vùng chứa được đặt tên (named container) để phục vụ cho các giá trị, và các hàm là những quy trình thủ tục để đoạn script của bạn thi hành.

+ +

Chuyển đổi kiểu dữ liệu

+ +

JavaScript là dynamically typed language. Điều đó có nghĩa bạn không cần phải chỉ định kiểu dữ liệu của biến khi bạn khai báo biến, và kiểu dữ liệu được tự động chuyển đổi khi cần thiết trong quá trình đoạn script được thực thi.

+ +

Cho nên, ví dụ, bạn có thể định nghĩa một biến như sau:

+ +
var answer = 42;
+
+ +

Và sau đó, bạn có thể gán cùng một biến này với một giá trị chuỗi, ví dụ:

+ +
answer = "Thanks for all the fish...";
+
+ +

Bởi vì JavaScript là dynamically typed, việc gán giá trị này sẽ không gây ra lỗi.

+ +

Các số và toán tử '+'

+ +

Trong các biểu thức (expression) có sự liên quan giữa các giá trị numeric và string với toán tử  +, JavaScript sẽ chuyển đổi giá trị số sang chuỗi. Ví dụ:

+ +
x = "The answer is " + 42 // "The answer is 42"
+y = 42 + " is the answer" // "42 is the answer"
+
+ +

Với tất cả mọi loại toán tử khác, JavaScript sẽ không chuyển đổi giá trị numeric sang string. Ví dụ:

+ +
"37" - 7 // 30
+"37" + 7 // "377"
+
+ +

Chuyển từ kiểu chuỗi (string) sang kiểu số (number)

+ +

Tong trường hợp một giá trị biểu thị một số nhưng lại được lưu trong bộ nhớ như là một chuỗi, có các phương thức để chuyển đổi.

+ + + +

parseInt sẽ chỉ trả về các số nguyên, nên mục đích của nó là làm giảm bớt giá trị cho các số decimals. Thêm nữa, một thực hành tốt nhất cho parseInt là luôn luôn thêm vào nó tham số radix. Tham số radix được dùng để chỉ định hệ số học nào sẽ được sử dụng.

+ +
parseInt('101', 2) // 5
+ +

Một phương thức khác để nhận được giá trị số từ một chuỗi là dùng toán tử + 

+ +
"1.1" + "1.1" = "1.11.1"
+(+"1.1") + (+"1.1") = 2.2
+// Note: the parentheses are added for clarity, not required.
+ +

Literals

+ +

Literals (nguyên văn), đại diện cho các giá trị trong JavaScript. Đây là những giá trị cố định - không phải biến - mà bạn cung cấp một cách litterally trong script của bạn. Phần này mô tả những kiểu literals sau đây:

+ + + +

Array literals

+ +

Một array literal là một danh sách của không hoặc nhiều biểu thức, mỗi biểu thức trong đó đại diện cho một phần tử của mảng (array element), được bao bọc trong dấu ngoặc vuông ([]). Khi bạn tạo một mảng bằng cách dùng array literal, nó được khởi tạo với những giá trị cụ thể như là các element của mảng, và length của mảng là số lượng đối số (argument).

+ +

Ví dụ sau tạo ra mảng coffees với 3 phần tử và một length của 3:

+ +
var coffees = ["French Roast", "Colombian", "Kona"];
+
+ +

Note: Một array literal là một kiểu của object initializer. Xem Using Object Initializers.

+ +

Nếu một mảng được tạo ra sử dụng một literal trong một top-level script, JavaScript sẽ interpret mảng mỗi lần nó đánh giá biểu thức có chứa array literal. Ngoài ra, một literal được sử dụng trong một hàm sẽ được tạo ra mỗi lần function được gọi.

+ +

Note: Các array literals cũng là các Array objects. Xem {{jsxref("Array")}} and Indexed collections để biết chi tiết về Array objects.

+ +

Dấu phẩy dư trong các array literals

+ +

Bạn không cần phải xác định mọi phần tử trong một array literal. Nếu bạn đặt 2 dấu phẩy trên cùng một hàng, mảng sẽ tạo ra một phần tử mang giá trị undefined. Ví dụ sau tạo ra mảng fish.

+ +
var fish = ["Lion", , "Angel"];
+
+ +

Mảng này gồm 2 phần tử có giá trị và một phần tử rỗng (fish[0] là "Lion", fish[1] là undefined, và fish[2] là "Angel").

+ +

Nếu bạn thêm một dấu phẩy theo sau (trailing comma) phần tử cuối cùng của mãng, dấu phẩy này sẽ bị bỏ qua. Trong ví dụ sau, length của mảng là 3. Không có myList[3]. Tất cả dấu phẩy khác trong danh sách ngầm chỉ định là một phần tử mới. (Note: trailing commas có thể xem là lỗi đối với các trình duyệt cũ và tốt nhất là nên xóa chúng đi).

+ +
let myList = ['home', , 'school', ];
+
+ +

Trong ví dụ bên dưới, length của mảng là 4, myList[0] và myList[2] bị thiếu.

+ +
var myList = [ , 'home', , 'school'];
+
+ +

Trong ví dụ dưới, length của mảng là 4, myList[1] và myList[3] bị thiếu. Chỉ có dấu phẩy cuối cùng bị bỏ qua.

+ +
var myList = ['home', , 'school', , ];
+
+ +

Hiểu được hành vi của cac dấu phẩy thêm này rất quan trọng để hiểu được JavaScript như là một ngôn ngữ. Tuy nhiên, khi viết code của riêng bạn, bạn nên khai báo một cách rõ ràng các phần tử bị thiếu (missing elements) là undefined. Làm vậy sẽ gia tăng độ rõ ràng cho code và dễ bảo trì sau này.

+ +

Boolean literals

+ +

Kiểu Boolean có 2 giá trị literal: truefalse.

+ +

Cẩn thận: Đừng nhầm lẫn giá trị Boolean nguyên thủy true và false với true và fales của {{jsxref("Boolean")}} object. Boolean object là một lớp bao bên ngoài kiểu dữ liệu Boolean nguyên thủy. Xem {{jsxref("Boolean")}} để biết thêm.

+ +

Numeric literals

+ +

Kiểu dữ liệu {{jsxref("Number")}} và {{jsxref("BigInt")}} có thể được biểu diễn bằng hệ decimal (hệ 10), hệ hexadecimal (hệ 16), octal (hệ 8) và binary (base 2 - hệ nhị phân).

+ + + +

Một số ví dụ của numeric literals:

+ +
0, 117, -345, 123456789123456789n             (decimal, base 10)
+015, 0001 -0o77, 0o777777777777n              (octal, base 8)
+0x1123, 0x00111, -0xF1A7, 0x123456789ABCDEFn  (hexadecimal, "hex" or base 16)
+0b11, 0b0011, -0b11, 0b11101001010101010101n  (binary, base 2)
+
+ +

Chi tiết xem thêm tại: Numeric literals in the Lexical grammar reference.

+ +

Floating-point literals

+ +

Một floating-point literal (literal số thực dấu chấm động) có thể có các bộ phận sau:

+ + + +

Bộ phận số mũ là một ký tự "e" hoặc "E", theo sau nó là một số nguyên integer (số nguyên integer này có thể có thêm phía trước là dấu "+" hoặc "-"). Một floating-point literal phải có ít nhất một ký tự số, và hoặc là một dấu chấm hệ 10 hoặc là ký tự "e" (hoặc "E"). Tóm lại, cú pháp như sau:

+ +
[(+|-)][digits][.digits][(E|e)[(+|-)]digits]
+
+ +

Ví dụ: 

+ +
3.1415926
+-.123456789
+-3.1E+12
+.1e-23
+
+ +

Object literals

+ +

Một object literal là một danh sách của không hoặc nhiều cặp property names và associated values (tên thuộc tính và giá trị được liên kết) của một một object, bao bọc bởi cặp dấu ngoặc nhọn ({}).

+ +

Lưu ý đừng sử dụng một object literal ngay tại vị trí bắt đầu của một câu lệnh! Điều này sẽ dẫn đến một lỗi (hoặc nó sẽ thực thi theo cách bạn không mong muốn), vì dấu mở ngoặc nhọn { sẽ được interpreted như là bắt đầu của một block.

+ +

Ví dụ dưới đây là một ví dụ của object literal. Phần tử đầu tiên của object car định nghĩa là một thuộc tính (property), myCar, và được gán giá trị kiểu chuỗi là "myCar", phần tử thứ 2, thuộc tính getCar, ngay lập tức được gán giá trị là kết quả trả về của việc gọi hàm (CarTypes("Honda")); phần tử thứ 3, thuộc tính special, sử dụng một biến đã tồn tại (sales).

+ +
var Sales = "Toyota";
+
+function CarTypes(name) {
+  if (name == "Honda") {
+    return name;
+  } else {
+    return "Sorry, we don't sell " + name + ".";
+  }
+}
+
+var car = { myCar: "Saturn", getCar: CarTypes("Honda"), special: Sales };
+
+console.log(car.myCar);   // Saturn
+console.log(car.getCar);  // Honda
+console.log(car.special); // Toyota
+
+ +

Thêm nữa, bạn có thể sử dụng cả kiểu số hoặc chữ để đặt tên cho thuộc tính của object, hoặc bạn có thể lồng một object bên trong một object khác. Ví dụ:

+ +
var car = { manyCars: {a: "Saab", "b": "Jeep"}, 7: "Mazda" };
+
+console.log(car.manyCars.b); // Jeep
+console.log(car[7]); // Mazda
+
+ +

Các tên thuộc tính của object có thể là bất kỳ chuỗi nào, bao gồm cả chuỗi rỗng ''. Nếu tên thuộc tính không phải là một JavaScript identifier hợp lệ, hoặc nó là số, thì nó phải được bao bọc trong các dấu nháy.

+ +

Các tên thuộc tính mà không phải là các identifier hợp lệ không thể được truy cập đến như các thuộc tính thông thường là dùng dấu chấm (.), nhưng có thể được truy cập đến và set giá trị bằng cặp dấu ngoặc vuông giống mảng ("[]").

+ +
var unusualPropertyNames = {
+  "": "An empty string",
+  "!": "Bang!"
+}
+console.log(unusualPropertyNames."");   // SyntaxError: Unexpected string
+console.log(unusualPropertyNames[""]);  // An empty string
+console.log(unusualPropertyNames.!);    // SyntaxError: Unexpected token !
+console.log(unusualPropertyNames["!"]); // Bang!
+ +

Please note:

+ +
var foo = {a: "alpha", 2: "two"};
+console.log(foo.a);    // alpha
+console.log(foo[2]);   // two
+//console.log(foo.2);  // Error: missing ) after argument list
+//console.log(foo[a]); // Error: a is not defined
+console.log(foo["a"]); // alpha
+console.log(foo["2"]); // two
+
+ +

Enhanced Object literals

+ +

Trong ES2015, các object literals được mở rộng từ đó hỗ trợ thêm việc cài đặt các prototype tại construction, shorthand cho việc gán biến foo: foo, các phương thức defining, make super calls, và xử lý các tên thuộc tính với các biểu thức. Cùng nhau, những thứ này cũng mang object listerals và khai báo class đến gần nhau hơn, và cho phép các thiết kế object-based để đạt được lợi ích từ một số tiện nghi giống nhau.

+ +
var obj = {
+    // __proto__
+    __proto__: theProtoObj,
+    // Shorthand for ‘handler: handler’
+    handler,
+    // Methods
+    toString() {
+     // Super calls
+     return 'd ' + super.toString();
+    },
+    // Computed (dynamic) property names
+    [ 'prop_' + (() => 42)() ]: 42
+};
+ +

RegExp literals

+ +

Một regex literal (được định nghĩa chi tiết sau đây) là một mô hình mẫu bao bọc giữa các dấu xuyệt /. Ví dụ:

+ +
var re = /ab+c/;
+ +

String literals

+ +

Một string literal là không có hoặc có nhiều ký tự bao bọc trong dấu (") hoặc ('). Một chuỗi (string) phải được giới hạn trong cặp dấu cùng loại; hoặc là cùng nháy đơn hoặc là cùng nháy kép. Ví dụ:

+ + + +

Bạn có thể gọi các phương thức của {{jsxref("String")}} object lên một giá trị string nguyên văn (string literal) - JavaScript tự động chuyển đổi string literal sang một String object tạm, gọi phương thức để chạy, chạy xong hủy bỏ String object tạm đó. Bạn cũng có thể sử dụng thuộc tính String.length với một string literal:

+ +
console.log("John's cat".length)
+// Will print the number of symbols in the string including whitespace.
+// In this case, 10.
+
+ +

Trong ES2015, template literals cũng được đưa vào sử dụng. Template literals bao bọc trong dấu back-tick (`) (dấu huyền) thay vì dấu nháy đơn hay nháy kép.

+ +

Các template strings cung cấp cú pháp đặc biệt (synctactic sugar) để xây dựng các chuỗi (string). (Điều này tương tự với đặc điểm nội suy chuỗi string interpolation trong Perl, Python, v.v...)

+ +

Tùy trường hợp, một thẻ tag có thể được thêm vào để cho phép việc xây dựng chuỗi được tùy chỉnh, tránh injection attacks, hoặc xây dựng nên những cấu trúc dữ liệu higher-level từ các nội dung của chuỗi.

+ +
// Basic literal string creation
+// `In JavaScript '\n' is a line-feed.`
+
+// Multiline strings
+`In JavaScript, template strings can run
+ over multiple lines, but double and single
+ quoted strings cannot.`
+
+// String interpolation
+var name = 'Bob', time = 'today';
+`Hello ${name}, how are you ${time}?`
+
+// Construct an HTTP request prefix used to interpret the replacements and construction
+POST`http://foo.org/bar?a=${a}&b=${b}
+     Content-Type: application/json
+     X-Credentials: ${credentials}
+     { "foo": ${foo},
+       "bar": ${bar}}`(myOnReadyStateChangeHandler);
+
+ +

Bạn nên sử dụng các string literals đơn thuần nếu không cần thiết phải sử dụng đến String object. Xem {{jsxref("String")}} để biết chi tiết về String objects.

+ +

Sử dụng các ký tự đặc biệt trong chuỗi

+ +

Ngoài các ký tự thông thường, bạn cũng có thể thêm vào các ký tự đặc biệt trong chuỗi, ví dụ:

+ +
"one line \n another line"
+
+ +

Bảng dưới đây liệt kê danh sách các ký tự đặc biệt có thể sử dụng trong các chuỗi JavaScript.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Table: JavaScript special characters
CharacterMeaning
\0Null Byte
\bBackspace - Khoảng cách
\fForm feed -
\nNew line - Dòng mới
\rCarriage return
\tTab - Tab một tab
\vVertical tab - Tab dọc
\'Apostrophe or single quote - trích dẫn đơn
\"Double quote - ngoặc kép.
\\Backslash character
\XXXThe character with the Latin-1 encoding specified by up to three octal digits XXX between 0 and 377. For example, \251 is the octal sequence for the copyright symbol.
\xXXThe character with the Latin-1 encoding specified by the two hexadecimal digits XX between 00 and FF. For example, \xA9 is the hexadecimal sequence for the copyright symbol.
\uXXXXThe Unicode character specified by the four hexadecimal digits XXXX. For example, \u00A9 is the Unicode sequence for the copyright symbol. See {{anch("Unicode escape sequences")}}.
+ +

Escaping characters

+ +

Đối với các ký tự không có trong bảng trên, dấu backslash \ được thêm vào trước sẽ bị bỏ qua, nhưng cách dùng này đã không còn nữa và nên được tránh dùng.

+ +

Bạn có thể chèn vào một dấu ngoặc kép bên trong một chuỗi bằng cách đặt phía trước nó một dấu backslash \. Điều này tức là escaping dấu trích dẫn. Ví dụ:

+ +
var quote = "He read \"The Cremation of Sam McGee\" by R.W. Service.";
+console.log(quote);
+
+ +

Kết quả của đoạn code trên là:

+ +
He read "The Cremation of Sam McGee" by R.W. Service.
+
+ +

Để thêm một dấu backslash thật sự vào trong chuỗi, bạn phải escape dấu backslash đó. Ví dụ, để gán dường dẫn file c:\temp vào một chuỗi:

+ +
var home = "c:\\temp";
+
+ +

Bạn cũng có thể escape các line breaks bằng cách đặt vào trước chúng một dấu backslash. Backslash và line break đều sẽ được remove khỏi giá trị của chuỗi.

+ +
var str = "this string \
+is broken \
+across multiple\
+lines."
+console.log(str);   // this string is broken across multiplelines.
+
+ +

Mặc dù JavaScript không có cú pháp "heredoc", bạn có thể gần đạt được điều này bằng cách thêm vào một linebreak escape và một escaped linebreak ở cuối mỗi dòng:

+ +
var poem =
+"Roses are red,\n\
+Violets are blue.\n\
+I'm schizophrenic,\n\
+And so am I."
+
+ +

Thông tin thêm

+ +

Chương này tập trung vào cú pháp cơ bản cho các việc khai báo và các kiểu dữ liệu. Để biết rõ hơn về cấu trúc ngôn ngữ JavaScript, xem các chương tiếp theo trong bộ hướng dẫn này:

+ + + +

Trong chương tiếp theo, chúng ta sẽ tìm hiểu về control flow constructs và error handling.

+ +

{{PreviousNext("Web/JavaScript/Guide/Introduction", "Web/JavaScript/Guide/Control_flow_and_error_handling")}}

diff --git a/files/vi/web/javascript/guide/introduction/index.html b/files/vi/web/javascript/guide/introduction/index.html new file mode 100644 index 0000000000..f8fddcf666 --- /dev/null +++ b/files/vi/web/javascript/guide/introduction/index.html @@ -0,0 +1,137 @@ +--- +title: Giới thiệu +slug: Web/JavaScript/Guide/Gioi-thieu +tags: + - Guide + - JavaScript +translation_of: Web/JavaScript/Guide/Introduction +--- +
{{jsSidebar("JavaScript Guide")}} {{PreviousNext("Web/JavaScript/Guide", "Web/JavaScript/Guide/Grammar_and_types")}}
+ +

Trong phần này: giới thiệu về JavaScript và thảo luận về một số khái niệm cơ bản của JavaScript.

+ +

Kiến thức nền tảng cần có

+ +

Để đến với JavaScript, chúng tôi giả sử rằng bạn đã có một số hiểu biết nền tảng:

+ + + +

Bạn có thể tìm thêm thông tin về JavaScript ở đâu?

+ +

Tài liệu về JavaScript tại MDN bao gồm:

+ + + +

Nếu bạn mới tìm hiểu JavaScript, hãy bắt đầu bằng cách đọc các bài viết tại learning areaJavaScript Guide. Một khi bạn đã nắm vững các nền tảng cơ bản, bạn có thể sử dụng JavaScript Reference để lấy những thông tin chi tiết của từng object và các câu lệnh (statements).

+ +

JavaScript là gì?

+ +

JavaScript là một ngôn ngữ lập trình đa nền tảng (cross-platform), ngôn ngữ lập trình kịch bản, hướng đối tượng. JavaScript là một ngôn ngữ nhỏ và nhẹ (small and lightweight). Khi nằm bên trong một môi trường (host environment), JavaScript có thể kết nối tới các object của môi trường đó và cung cấp các cách quản lý chúng (object).

+ +

JavaScript chứa các thư viện tiêu chuẩn cho các object, ví dụ như:  Array, Date, và Math, và các yếu tố cốt lõi của ngôn ngữ lập trình như: toán tử (operators), cấu trúc điều khiển (control structures), và câu lệnh. JavaScript có thể được mở rộng cho nhiều mục đích bằng việc bổ sung thêm các object; ví dụ:

+ + + +

JavaScript và Java

+ +

JavaScript và Java thì giống nhau ở những cái này nhưng lại khác nhau ở cái khác. Ngôn ngữ JavaScript có lẽ giống giống với ngôn ngữ Java nhưng JavaScript không có khai báo static cũng như không có "tính mạnh về kiểu" (strong type checking) như Java. Cú pháp (syntax) lập trình, đặt tên công thức và xây dựng điều khiển lưu lượng (control-flow) cơ bản của JavaScript phần lớn dựa theo ngôn ngữ lập trình Java, đó cũng là lý do tại sao JavaScript được đổi tên từ LiveScript thành JavaScript.

+ +

Ngược lại với hệ thống thời gian biên dịch (compile-time) Java của các lớp được xây dựng bởi các khai báo, JavaScript hỗ trợ nền tảng hệ thống thời gian chạy dựa trên một số lượng nhỏ các loại dữ liệu đại diện cho số, boolean và dữ liệu các chuỗi. JavaScript có một mô hình ít phổ biến hơn là mô hình đối tượng dựa trên nguyên mẫu (prototype-based) thay vì các mô hình đối tượng dựa trên lớp (class-based). Các mô hình dựa trên nguyên mẫu cung cấp khả năng thừa kế năng động; nghĩa là, những gì được kế thừa có thể khác nhau cho các đối tượng khác nhau. JavaScript cũng hỗ trợ các phương thức (function) không khai báo bất cứ gì ở trỏng. Phương thức có thể là một trong các thuộc tính (property) của các đối tượng, thực thi như là một phương thức đã được định kiểu (loosely typed methods).

+ +

JavaScript là một ngôn ngữ rất tự do so với Java. Bạn có thể không cần khai báo tất cả biến (variable), lớp (class) và cả phương thức (method). Bạn không cần quan tâm cho dù phương thức đó là public, private hoặc protected, và bạn không cần phải implement interfaces. Biến, tham số (parameters), và kiểu trả về của phương thức (function return) cũng không cần phải rõ ràng.

+ +

Java is a class-based programming language designed for fast execution and type safety. Type safety means, for instance, that you can't cast a Java integer into an object reference or access private memory by corrupting Java bytecodes. Java's class-based model means that programs consist exclusively of classes and their methods. Java's class inheritance and strong typing generally require tightly coupled object hierarchies. These requirements make Java programming more complex than JavaScript programming.

+ +

In contrast, JavaScript descends in spirit from a line of smaller, dynamically typed languages such as HyperTalk and dBASE. These scripting languages offer programming tools to a much wider audience because of their easier syntax, specialized built-in functionality, and minimal requirements for object creation.

+ + + + + + + + + + + + + + + + + + + + + + + +
JavaScript so sánh với Java
JavaScriptJava
Hướng đối tượng (Object-oriented). Không phân biệt giữa kiểu (type) của các đối tượng (object). Tính kế thừa thông qua cơ chế nguyên mẫu (prototype), và các thuộc tính (property) cũng như phương thức có thể thêm vào bất cứ đối tượng nào một cách năng động.Class-based (nền tảng lớp.).Đối tượng được thành các lớp với tất cả kế thừa thông qua hệ thống phân cấp lớp. Các lớp không thể thêm vào các thuộc tính và phương thức mới một cách năng động.
Không khai báo kiểu dữ liệu cho biến (dynamic typing).Phải khai báo kiểu dữ liệu cho biến (static typing).
Không thể tự động ghi vào ổ đĩa cứng.Có thể tự động ghi dữ liệu vào đĩa cứng.
+ +

Thêm thông tin về sự khác nhau giữa JavaScript và Java, xem chương: Details of the object model.

+ +

JavaScript và tiêu chuẩn ECMAScript

+ +

JavaScript được tiêu chuẩn hóa tại Ecma International — the European association for standardizing information and communication systems, Liên kết Châu Âu cho các tiêu chuẩn hóa hệ thống thông tin và truyền thông (ECMA trước đây là viết tắt cho the European Computer Manufacturers Association) cung cấp một tiêu chuẩn hóa, nền tảng ngôn ngữ lập trình mở quốc tế lên JavaScript. Phiên bản đã tiêu chuẩn hóa của JavaScript được gọi là ECMAScript, làm việc giống với cái cách mà tất cả ứng dụng đã được hỗ trợ theo tiêu chuẩn. Các công ty có thể sử dụng tiêu chuẩn ngôn ngữ mở (open standard language) để phát triển các implementation của JavaScript riêng cho họ. Tiêu chuẩn ECMAScript là tài liệu nằm trong tiêu chuẩn ECMA-262 (ECMA-262 specification) . Xem New in JavaScript để biết thêm về sự khác nhau giữa các phiên bản JavaScript cũng như sự khác nhau của phiên bản tiêu chuẩn ECMAScript (ECMAScript specification editions).

+ +

Tiêu chuẩn ECMA-262 cũng đã được phê duyệt bởi ISO (International Organization for Standardization) tại ISO-16262. Bạn cũng có thể tìm tiêu chuẩn trên the Ecma International website. Tiêu chuẩn ECMAScript không bao gồm các mô tả cho Document Object Model (DOM), nó được tiêu chuẩn hóa bởi World Wide Web Consortium (W3C). DOM định nghĩa cách mà các đối tượng trong HTML tiếp xúc với các đoạn script của bạn. Để có được một cảm nhận tốt hơn về các công nghệ khác nhau được sử dụng khi lập trình với JavaScript, hãy tham khảo bài viết tổng quan về công nghệ JavaScript.

+ +

Tài liệu JavaScript và tiêu chuẩn ECMAScript

+ +

Tiêu chuẩn ECMAScript là một tập hợp yêu cầu các việc cần thực hiện khi triển khai ECMAScript; nó rất là hữu ích nếu bạn muốn tạo ra một trình biên dịch tiêu chuẩn các tính năng của ngôn ngữ trong ECMAScript implementation hoặc bộ máy biên dịch của bạn (giống như SpiderMonkey của Firefox, hoặc v8 của Chrome).

+ +

Tài liệu ECMAScript được tạo ra không dự định hỗ trợ các lập trình viên script; sử dụng tài liệu JavaScript để lấy thông tin cho việc viết scripts của bạn.

+ +

Tiêu chuẩn ECMAScript sử dụng các thuật ngữ và cú pháp có thể các lập trình viên JavaScript chưa được làm quen. Mặc dù sự mô tả của ngôn ngữ có lẽ khác nhau trong ECMAScript, nhưng bản thân ngôn ngữ vẫn giữ nguyên, không thay đổi. JavaScript hỗ trợ tất cả chức năng được nêu trong tiêu chuẩn ECMAScript.

+ +

Tài liệu JavaScript mô tả các khía cạnh của ngôn ngữ lập trình JavaScript, thích hợp cho các lập trình viên JavaScript sử dụng.

+ +

Bắt đầu với JavaScript

+ +

Bắt đầu với JavaScript rất đơn giản: tất cả những gì bạn cần là một trình duyệt Web hiện đại. Trong các bài hướng dẫn có kèm theo một số tính năng JavaScript, mà nó chỉ chạy được ở các phiên bản trình duyệt mới nhất của Firefox, hoặc... cách tốt nhất là sử dụng một số phiên bản trình duyệt gần đây nhất của Firefox..

+ +

Có 2 công cụ được xây dựng trong Firefox, nó rất hữu ích để chạy các 'thí nghiệm' với JavaScript, đó là: Web ConsoleScratchpad.

+ +

Web Console

+ +

Web Console cho phép bạn thấy thông tin về trang Web đang chạy, và kèm theo một command line, với nó bạn có thể sử dụng để chạy một đoạn lệnh JavaScript trên trang Web hiện tại.

+ +

Mở Web Console bằng cách chọn "Web Console" từ menu "Web Developer" (Ctrl + Shift + I),  "Web Developer" nằm trong Menu chính của Firefox, nó có hình cờ lê, tên: Developer (nếu vẫn không thấy nó, bạn có thể mở menu và nhấn Customize để kéo nó ra ngoài). Sau khi mở lên, nó sẽ là 1 bảng hiển thị nằm phía dưới của cửa sổ trình duyệt. Có 1 ô nhập chạy dài dưới cùng của cửa sổ Web Console (khoanh vùng màu đỏ trong mình), nó chính là command line, với nó bạn có thể nhập vào đoạn JavaScript mà bạu muốn thực thi, và sau khi Enter thì trình duyệt sẽ chạy và trả về kết quả lên bảng Web Console nằm trên nó:

+ +

+ +

Scratchpad

+ +

Web Console có thể rất hiệu quả cho việc chạy đơn lẻ từng dòng lệnh của JavaScript, bạn cũng có thể chạy những đoạn lệnh nhiều dòng với nó (Ctrl + Enter)... Nhưng có vẻ nó không được tiện lợi cho lắm! Bạn không thể lưu lại code khi sử dụng Web Console. Với các 'thí nghiệm' dài và phức tạp thì Scratchpad là một công cụ hiệu quả.

+ +

Để mở Scratchpad, chọn "Scratchpad" từ menu "Web Developer" (Ctrl + Shift + I),  "Web Developer" nằm trong Menu chính của Firefox, nó có hình cờ lê, tên: Developer (nếu vẫn không thấy nó, bạn có thể mở menu và nhấn Customize để kéo nó ra ngoài).  Nó sẽ mở lên trong một cửa sổ window riêng với trình duyệt và là một trình soạn thảo mà bạn có thể sử dụng để viết và chạy JavaScript trong trình duyệt. Bạn cũng có thế lưu lại hoặc mở lên các đoạn script đó lên từ ổ đĩa.

+ +

Nếu bạn chọn "Inspect", đoạn code trong cửa sổ nãy sẽ chạy trong trình duyệt và xuất kết quả trở về bảng dưới dạng comment:

+ +

+ +

Hello world

+ +

Bắt đầu với JavaScript, mở Web Console hoặc Scarthpad và viết code JavaScript hiển thị "Hello world" đầu tiên của bạn:

+ +
function greetMe(user) {
+  return "Hi " + user;
+}
+
+greetMe("Alice"); // "Hi Alice"
+
+ +

Trong trang tiếp theo, chúng tôi sẽ giới thiệu cho bạn về cú pháp và các đặc tính của ngôn ngữ JavaScript, với nó, bạn sẽ có thể viết các ứng dụng phức tạp.

+ +

{{PreviousNext("Web/JavaScript/Guide", "Web/JavaScript/Guide/Grammar_and_types")}}

-- cgit v1.2.3-54-g00ecf From 9201e4212c57af09becda69f17c17a3a34f226c2 Mon Sep 17 00:00:00 2001 From: Florian Merz Date: Thu, 11 Feb 2021 14:51:56 +0100 Subject: unslug vi: modify --- files/vi/_redirects.txt | 62 ++ files/vi/_wikihistory.json | 824 ++++++++++----------- .../conflicting/learn/css/first_steps/index.html | 5 +- files/vi/conflicting/web/html/index.html | 3 +- .../global_objects/array/length/index.html | 3 +- .../reference/global_objects/promise/index.html | 3 +- .../web/javascript/reference/operators/index.html | 3 +- files/vi/glossary/ajax/index.html | 3 +- files/vi/glossary/algorithm/index.html | 3 +- files/vi/glossary/array/index.html | 3 +- files/vi/glossary/attribute/index.html | 3 +- files/vi/glossary/bandwidth/index.html | 3 +- files/vi/glossary/boolean/index.html | 3 +- files/vi/glossary/browser/index.html | 3 +- files/vi/glossary/cache/index.html | 3 +- files/vi/glossary/callback_function/index.html | 3 +- files/vi/glossary/cdn/index.html | 3 +- files/vi/glossary/computer_programming/index.html | 3 +- files/vi/glossary/css/index.html | 3 +- .../dynamic_programming_language/index.html | 3 +- files/vi/glossary/falsy/index.html | 3 +- files/vi/glossary/general_header/index.html | 3 +- files/vi/glossary/head/index.html | 3 +- files/vi/glossary/hoisting/index.html | 3 +- files/vi/glossary/html/index.html | 3 +- files/vi/glossary/identifier/index.html | 3 +- files/vi/glossary/index.html | 3 +- files/vi/glossary/jquery/index.html | 3 +- files/vi/glossary/json/index.html | 3 +- files/vi/glossary/metadata/index.html | 3 +- files/vi/glossary/null/index.html | 3 +- files/vi/glossary/operand/index.html | 3 +- files/vi/glossary/php/index.html | 3 +- files/vi/glossary/primitive/index.html | 3 +- files/vi/glossary/responsive_web_design/index.html | 3 +- files/vi/glossary/svg/index.html | 3 +- files/vi/glossary/truthy/index.html | 3 +- files/vi/glossary/type_conversion/index.html | 3 +- files/vi/glossary/undefined/index.html | 3 +- files/vi/glossary/xml/index.html | 3 +- .../how_does_the_internet_work/index.html | 3 +- .../set_up_a_local_testing_server/index.html | 3 +- files/vi/learn/forms/index.html | 3 +- .../installing_basic_software/index.html | 3 +- .../index.html" | 3 +- files/vi/orphaned/dom_inspector/index.html | 3 +- files/vi/orphaned/labs-tab/index.html | 3 +- .../vi/orphaned/learn/how_to_contribute/index.html | 3 +- files/vi/orphaned/mdn/community/index.html | 3 +- .../howto/create_an_mdn_account/index.html | 3 +- .../howto/do_a_technical_review/index.html | 3 +- .../howto/do_an_editorial_review/index.html | 3 +- .../baseaudiocontext/createoscillator/index.html | 3 +- .../api/htmlorforeignelement/dataset/index.html | 3 +- files/vi/web/api/navigator/sendbeacon/index.html | 3 +- files/vi/web/api/window/load_event/index.html | 3 +- .../introduction_to_the_css_box_model/index.html | 3 +- .../basic_concepts_of_grid_layout/index.html | 3 +- files/vi/web/css/url()/index.html | 3 +- .../javascript/guide/grammar_and_types/index.html | 3 +- .../web/javascript/guide/introduction/index.html | 3 +- .../reference/errors/too_much_recursion/index.html | 3 +- .../reference/global_objects/array/sort/index.html | 3 +- .../reference/global_objects/error/index.html | 3 +- 64 files changed, 599 insertions(+), 475 deletions(-) (limited to 'files/vi/web/javascript/guide') diff --git a/files/vi/_redirects.txt b/files/vi/_redirects.txt index 173d74da22..0a771fc06f 100644 --- a/files/vi/_redirects.txt +++ b/files/vi/_redirects.txt @@ -1,18 +1,80 @@ # FROM-URL TO-URL +/vi/docs/Bản_Kê_Khai_Cài_Đặt /vi/docs/orphaned/Bản_Kê_Khai_Cài_Đặt /vi/docs/CSS /vi/docs/Web/CSS /vi/docs/CSS/background-color /vi/docs/Web/CSS/background-color +/vi/docs/DOM_Inspector /vi/docs/orphaned/DOM_Inspector /vi/docs/HTML /vi/docs/Web/HTML +/vi/docs/Labs-tab /vi/docs/orphaned/Labs-tab /vi/docs/Learn/CSS/Introduction_to_CSS /en-US/docs/Learn/CSS/First_steps /vi/docs/Learn/CSS/Introduction_to_CSS/Box_model /en-US/docs/Learn/CSS/Building_blocks/The_box_model /vi/docs/Learn/CSS/Introduction_to_CSS/How_CSS_works /en-US/docs/Learn/CSS/First_steps/How_CSS_works /vi/docs/Learn/CSS/Introduction_to_CSS/Selectors /en-US/docs/Learn/CSS/Building_blocks/Selectors +/vi/docs/Learn/Common_questions/Internet_lam_viec_nh_the_nao /vi/docs/Learn/Common_questions/How_does_the_Internet_work +/vi/docs/Learn/Common_questions/thiet_lap_web_mang_noi_bo /vi/docs/Learn/Common_questions/set_up_a_local_testing_server +/vi/docs/Learn/Dong_gop_cho_khu_vuc_hoc_tap_tren_MDN /vi/docs/orphaned/Learn/How_to_contribute +/vi/docs/Learn/Getting_started_with_the_web/Cài_đặt_các_phần_mềm_cơ_bản /vi/docs/Learn/Getting_started_with_the_web/Installing_basic_software +/vi/docs/Learn/HTML/Forms /vi/docs/Learn/Forms +/vi/docs/MDN/Community /vi/docs/orphaned/MDN/Community /vi/docs/MDN/Contribute/Guidelines /vi/docs/MDN/Guidelines /vi/docs/MDN/Contribute/Guidelines/Writing_style_guide /vi/docs/MDN/Guidelines/Writing_style_guide +/vi/docs/MDN/Contribute/Howto/Create_an_MDN_account /vi/docs/orphaned/MDN/Contribute/Howto/Create_an_MDN_account +/vi/docs/MDN/Contribute/Howto/Do_a_technical_review /vi/docs/orphaned/MDN/Contribute/Howto/Do_a_technical_review +/vi/docs/MDN/Contribute/Howto/Do_an_editorial_review /vi/docs/orphaned/MDN/Contribute/Howto/Do_an_editorial_review /vi/docs/MDN/Contribute/Tools /vi/docs/MDN/Tools /vi/docs/MDN/Contribute/Tools/KumaScript /vi/docs/MDN/Tools/KumaScript /vi/docs/MDN/Contribute/Tools/KumaScript/Troubleshooting /vi/docs/MDN/Tools/KumaScript/Troubleshooting /vi/docs/MDN/Feedback /vi/docs/MDN/Contribute/Feedback +/vi/docs/Tu-dien-thuat-ngu /vi/docs/Glossary +/vi/docs/Tu-dien-thuat-ngu/AJAX /vi/docs/Glossary/AJAX +/vi/docs/Tu-dien-thuat-ngu/Algorithm /vi/docs/Glossary/Algorithm +/vi/docs/Tu-dien-thuat-ngu/Attribute /vi/docs/Glossary/Attribute +/vi/docs/Tu-dien-thuat-ngu/Bandwidth /vi/docs/Glossary/Bandwidth +/vi/docs/Tu-dien-thuat-ngu/Boolean /vi/docs/Glossary/Boolean +/vi/docs/Tu-dien-thuat-ngu/CDN /vi/docs/Glossary/CDN +/vi/docs/Tu-dien-thuat-ngu/CSS /vi/docs/Glossary/CSS +/vi/docs/Tu-dien-thuat-ngu/Cache /vi/docs/Glossary/Cache +/vi/docs/Tu-dien-thuat-ngu/Callback_function /vi/docs/Glossary/Callback_function +/vi/docs/Tu-dien-thuat-ngu/Computer_Programming /vi/docs/Glossary/Computer_Programming +/vi/docs/Tu-dien-thuat-ngu/Dynamic_programming_language /vi/docs/Glossary/Dynamic_programming_language +/vi/docs/Tu-dien-thuat-ngu/Falsy /vi/docs/Glossary/Falsy +/vi/docs/Tu-dien-thuat-ngu/General_header /vi/docs/Glossary/General_header +/vi/docs/Tu-dien-thuat-ngu/HTML /vi/docs/Glossary/HTML +/vi/docs/Tu-dien-thuat-ngu/Head /vi/docs/Glossary/Head +/vi/docs/Tu-dien-thuat-ngu/Hoisting /vi/docs/Glossary/Hoisting +/vi/docs/Tu-dien-thuat-ngu/Identifier /vi/docs/Glossary/Identifier +/vi/docs/Tu-dien-thuat-ngu/JSON /vi/docs/Glossary/JSON +/vi/docs/Tu-dien-thuat-ngu/Metadata /vi/docs/Glossary/Metadata +/vi/docs/Tu-dien-thuat-ngu/Null /vi/docs/Glossary/Null +/vi/docs/Tu-dien-thuat-ngu/Operand /vi/docs/Glossary/Operand +/vi/docs/Tu-dien-thuat-ngu/PHP /vi/docs/Glossary/PHP +/vi/docs/Tu-dien-thuat-ngu/Primitive /vi/docs/Glossary/Primitive +/vi/docs/Tu-dien-thuat-ngu/Responsive_web_design /vi/docs/Glossary/Responsive_web_design +/vi/docs/Tu-dien-thuat-ngu/SVG /vi/docs/Glossary/SVG +/vi/docs/Tu-dien-thuat-ngu/Truthy /vi/docs/Glossary/Truthy +/vi/docs/Tu-dien-thuat-ngu/Type_Conversion /vi/docs/Glossary/Type_Conversion +/vi/docs/Tu-dien-thuat-ngu/XML /vi/docs/Glossary/XML +/vi/docs/Tu-dien-thuat-ngu/array /vi/docs/Glossary/array +/vi/docs/Tu-dien-thuat-ngu/jQuery /vi/docs/Glossary/jQuery +/vi/docs/Tu-dien-thuat-ngu/trinh-duyet /vi/docs/Glossary/Browser +/vi/docs/Tu-dien-thuat-ngu/undefined /vi/docs/Glossary/undefined +/vi/docs/Web/API/AudioContext/createOscillator /vi/docs/Web/API/BaseAudioContext/createOscillator +/vi/docs/Web/API/HTMLElement/dataset /vi/docs/Web/API/HTMLOrForeignElement/dataset +/vi/docs/Web/API/Navigator/sendBeacon-vi /vi/docs/Web/API/Navigator/sendBeacon +/vi/docs/Web/CSS/CSS_Box_Model/Kien_thuc_co_ban_ve_css_box_model /vi/docs/Web/CSS/CSS_Box_Model/Introduction_to_the_CSS_box_model +/vi/docs/Web/CSS/CSS_Grid_Layout/tong_quan_ve_grid_layout /vi/docs/Web/CSS/CSS_Grid_Layout/Basic_Concepts_of_Grid_Layout +/vi/docs/Web/CSS/filter-function/url /vi/docs/Web/CSS/url() /vi/docs/Web/CSS/transform-function/perspective /vi/docs/Web/CSS/transform-function/perspective() +/vi/docs/Web/Events/load /vi/docs/Web/API/Window/load_event /vi/docs/Web/Guide/CSS /vi/docs/Learn/CSS +/vi/docs/Web/Guide/CSS/Getting_started /vi/docs/conflicting/Learn/CSS/First_steps /vi/docs/Web/Guide/HTML /en-US/docs/Learn/HTML +/vi/docs/Web/HTML_vi /vi/docs/conflicting/Web/HTML +/vi/docs/Web/JavaScript/Guide/Gioi-thieu /vi/docs/Web/JavaScript/Guide/Introduction +/vi/docs/Web/JavaScript/Guide/cu-phap-lap-trinh /vi/docs/Web/JavaScript/Guide/Grammar_and_types +/vi/docs/Web/JavaScript/Reference/Errors/qua_nhieu_de_quy /vi/docs/Web/JavaScript/Reference/Errors/Too_much_recursion +/vi/docs/Web/JavaScript/Reference/Global_Objects/Array/length /vi/docs/conflicting/Web/JavaScript/Reference/Global_Objects/Array/length +/vi/docs/Web/JavaScript/Reference/Global_Objects/Array/Sắp_xếp /vi/docs/Web/JavaScript/Reference/Global_Objects/Array/sort +/vi/docs/Web/JavaScript/Reference/Global_Objects/Promise/prototype /vi/docs/conflicting/Web/JavaScript/Reference/Global_Objects/Promise +/vi/docs/Web/JavaScript/Reference/Global_Objects/loi /vi/docs/Web/JavaScript/Reference/Global_Objects/Error +/vi/docs/Web/JavaScript/Reference/Operators/Arithmetic_Operators /vi/docs/conflicting/Web/JavaScript/Reference/Operators /vi/docs/en /en-US/ diff --git a/files/vi/_wikihistory.json b/files/vi/_wikihistory.json index f15e5c7f6f..3f58307eac 100644 --- a/files/vi/_wikihistory.json +++ b/files/vi/_wikihistory.json @@ -1,23 +1,4 @@ { - "Bản_Kê_Khai_Cài_Đặt": { - "modified": "2019-03-24T00:04:37.878Z", - "contributors": [ - "ethertank", - "kimkha" - ] - }, - "DOM_Inspector": { - "modified": "2019-01-16T16:31:31.933Z", - "contributors": [ - "ThornyLong" - ] - }, - "Labs-tab": { - "modified": "2019-01-16T13:28:54.736Z", - "contributors": [ - "Hakuna" - ] - }, "Learn": { "modified": "2020-07-16T22:43:49.278Z", "contributors": [ @@ -75,12 +56,6 @@ "JeffD" ] }, - "Learn/Common_questions/Internet_lam_viec_nh_the_nao": { - "modified": "2020-07-16T22:35:39.021Z", - "contributors": [ - "dev-luonglq" - ] - }, "Learn/Common_questions/What_is_a_web_server": { "modified": "2020-07-16T22:35:32.212Z", "contributors": [ @@ -88,20 +63,6 @@ "thanhvk" ] }, - "Learn/Common_questions/thiet_lap_web_mang_noi_bo": { - "modified": "2020-07-16T22:35:53.848Z", - "contributors": [ - "namphong124563", - "trannguyenhb" - ] - }, - "Learn/Dong_gop_cho_khu_vuc_hoc_tap_tren_MDN": { - "modified": "2020-07-16T22:33:47.224Z", - "contributors": [ - "SphinxKnight", - "vunamhung" - ] - }, "Learn/Front-end_web_developer": { "modified": "2020-10-22T05:39:54.725Z", "contributors": [ @@ -131,16 +92,6 @@ "vunamhung" ] }, - "Learn/Getting_started_with_the_web/Cài_đặt_các_phần_mềm_cơ_bản": { - "modified": "2020-07-16T22:34:12.264Z", - "contributors": [ - "vunamhung", - "PurpleLover", - "summerpupil", - "trannguyenhb", - "sugudkendy" - ] - }, "Learn/Getting_started_with_the_web/Dealing_with_files": { "modified": "2020-07-16T22:34:39.260Z", "contributors": [ @@ -215,13 +166,6 @@ "hoangphong15" ] }, - "Learn/HTML/Forms": { - "modified": "2020-07-16T22:21:02.351Z", - "contributors": [ - "jasonwest", - "Jeffrey_Yang" - ] - }, "Learn/HTML/Introduction_to_HTML": { "modified": "2020-07-16T22:22:54.442Z", "contributors": [ @@ -449,16 +393,6 @@ "Lungv" ] }, - "MDN/Community": { - "modified": "2019-09-11T08:00:31.400Z", - "contributors": [ - "SphinxKnight", - "wbamberg", - "dangkyokhoang", - "trongdaideveloper", - "lescarbeauleo.ll37" - ] - }, "MDN/Contribute": { "modified": "2019-03-23T22:56:25.294Z", "contributors": [ @@ -486,12 +420,6 @@ "jswisher" ] }, - "MDN/Contribute/Howto/Create_an_MDN_account": { - "modified": "2019-08-03T22:29:43.278Z", - "contributors": [ - "sonvo90" - ] - }, "MDN/Contribute/Howto/Create_and_edit_pages": { "modified": "2020-11-12T19:32:11.935Z", "contributors": [ @@ -499,21 +427,6 @@ "Vietnamese" ] }, - "MDN/Contribute/Howto/Do_a_technical_review": { - "modified": "2019-03-18T21:34:38.027Z", - "contributors": [ - "wbamberg", - "SphinxKnight", - "nguyenkien1997" - ] - }, - "MDN/Contribute/Howto/Do_an_editorial_review": { - "modified": "2019-03-18T21:31:03.863Z", - "contributors": [ - "wbamberg", - "PurpleLover" - ] - }, "MDN/Contribute/Howto/Tag": { "modified": "2019-07-09T17:34:43.609Z", "contributors": [ @@ -600,215 +513,6 @@ "cubi.koj" ] }, - "Tu-dien-thuat-ngu": { - "modified": "2020-07-07T11:10:26.504Z", - "contributors": [ - "AMAZALK", - "SphinxKnight", - "wbamberg", - "dogeblossom", - "pierreneter" - ] - }, - "Tu-dien-thuat-ngu/AJAX": { - "modified": "2019-03-23T22:03:39.351Z", - "contributors": [ - "PurpleLover", - "HoangLong" - ] - }, - "Tu-dien-thuat-ngu/Algorithm": { - "modified": "2019-07-04T10:59:16.462Z", - "contributors": [ - "CaMapCoChan" - ] - }, - "Tu-dien-thuat-ngu/Attribute": { - "modified": "2019-03-23T22:08:56.474Z", - "contributors": [ - "dogeblossom" - ] - }, - "Tu-dien-thuat-ngu/Bandwidth": { - "modified": "2019-03-18T21:38:06.965Z", - "contributors": [ - "LuckyBC" - ] - }, - "Tu-dien-thuat-ngu/Boolean": { - "modified": "2019-03-18T21:19:37.651Z", - "contributors": [ - "dangtu" - ] - }, - "Tu-dien-thuat-ngu/CDN": { - "modified": "2019-03-18T21:19:29.377Z", - "contributors": [ - "dangtu" - ] - }, - "Tu-dien-thuat-ngu/CSS": { - "modified": "2019-03-23T22:03:35.496Z", - "contributors": [ - "HoangLong" - ] - }, - "Tu-dien-thuat-ngu/Cache": { - "modified": "2019-03-18T21:19:31.742Z", - "contributors": [ - "dangtu" - ] - }, - "Tu-dien-thuat-ngu/Callback_function": { - "modified": "2020-09-09T06:56:52.568Z", - "contributors": [ - "HieuZenKa" - ] - }, - "Tu-dien-thuat-ngu/Computer_Programming": { - "modified": "2019-07-04T11:20:10.774Z", - "contributors": [ - "CaMapCoChan" - ] - }, - "Tu-dien-thuat-ngu/Dynamic_programming_language": { - "modified": "2020-01-21T05:07:50.519Z", - "contributors": [ - "TozyMC" - ] - }, - "Tu-dien-thuat-ngu/Falsy": { - "modified": "2019-03-18T21:42:15.228Z", - "contributors": [ - "huyennbl" - ] - }, - "Tu-dien-thuat-ngu/General_header": { - "modified": "2020-07-30T13:12:39.167Z", - "contributors": [ - "meet-robbers" - ] - }, - "Tu-dien-thuat-ngu/HTML": { - "modified": "2019-07-09T01:38:57.464Z", - "contributors": [ - "CaMapCoChan", - "SphinxKnight", - "sang247" - ] - }, - "Tu-dien-thuat-ngu/Head": { - "modified": "2019-03-18T21:34:03.824Z", - "contributors": [ - "haschema" - ] - }, - "Tu-dien-thuat-ngu/Hoisting": { - "modified": "2019-03-23T22:03:26.098Z", - "contributors": [ - "tthoa" - ] - }, - "Tu-dien-thuat-ngu/Identifier": { - "modified": "2019-09-12T07:11:51.101Z", - "contributors": [ - "PurpleLover" - ] - }, - "Tu-dien-thuat-ngu/JSON": { - "modified": "2020-03-01T08:50:15.149Z", - "contributors": [ - "jasonwest" - ] - }, - "Tu-dien-thuat-ngu/Metadata": { - "modified": "2019-09-28T03:51:43.213Z", - "contributors": [ - "PurpleLover" - ] - }, - "Tu-dien-thuat-ngu/Null": { - "modified": "2019-04-02T01:34:28.284Z", - "contributors": [ - "PurpleLover" - ] - }, - "Tu-dien-thuat-ngu/Operand": { - "modified": "2019-03-18T21:24:16.690Z", - "contributors": [ - "PurpleLover" - ] - }, - "Tu-dien-thuat-ngu/PHP": { - "modified": "2020-07-06T04:07:13.997Z", - "contributors": [ - "trhiu98" - ] - }, - "Tu-dien-thuat-ngu/Primitive": { - "modified": "2020-02-20T08:31:45.575Z", - "contributors": [ - "jasonwest", - "PurpleLover" - ] - }, - "Tu-dien-thuat-ngu/Responsive_web_design": { - "modified": "2019-03-18T21:23:52.487Z", - "contributors": [ - "dangtu", - "PurpleLover" - ] - }, - "Tu-dien-thuat-ngu/SVG": { - "modified": "2019-03-18T21:30:00.077Z", - "contributors": [ - "PurpleLover" - ] - }, - "Tu-dien-thuat-ngu/Truthy": { - "modified": "2019-03-18T21:14:14.286Z", - "contributors": [ - "PurpleLover" - ] - }, - "Tu-dien-thuat-ngu/Type_Conversion": { - "modified": "2019-03-18T21:14:14.787Z", - "contributors": [ - "PurpleLover" - ] - }, - "Tu-dien-thuat-ngu/XML": { - "modified": "2019-04-02T00:32:39.662Z", - "contributors": [ - "PurpleLover" - ] - }, - "Tu-dien-thuat-ngu/array": { - "modified": "2019-03-23T22:51:42.901Z", - "contributors": [ - "pierreneter" - ] - }, - "Tu-dien-thuat-ngu/jQuery": { - "modified": "2020-06-12T00:19:33.980Z", - "contributors": [ - "MinhDT" - ] - }, - "Tu-dien-thuat-ngu/trinh-duyet": { - "modified": "2019-03-18T21:27:51.112Z", - "contributors": [ - "trongthanh" - ] - }, - "Tu-dien-thuat-ngu/undefined": { - "modified": "2020-11-05T07:13:34.835Z", - "contributors": [ - "lamvanngoankl", - "duongdnh", - "dzungnait" - ] - }, "Web": { "modified": "2020-09-07T08:56:40.087Z", "contributors": [ @@ -841,12 +545,6 @@ "ffxsam" ] }, - "Web/API/AudioContext/createOscillator": { - "modified": "2019-03-23T22:10:18.020Z", - "contributors": [ - "deschutron" - ] - }, "Web/API/Canvas_API": { "modified": "2019-10-21T22:35:24.820Z", "contributors": [ @@ -929,12 +627,6 @@ "namnt2203" ] }, - "Web/API/HTMLElement/dataset": { - "modified": "2020-10-15T22:21:54.914Z", - "contributors": [ - "dangtu" - ] - }, "Web/API/HTMLFormElement": { "modified": "2020-10-15T22:23:32.942Z", "contributors": [ @@ -959,12 +651,6 @@ "NgDTien" ] }, - "Web/API/Navigator/sendBeacon-vi": { - "modified": "2020-10-15T22:30:31.004Z", - "contributors": [ - "hta218" - ] - }, "Web/API/Node": { "modified": "2019-03-23T22:48:37.272Z", "contributors": [ @@ -1112,12 +798,6 @@ "Web/CSS/CSS_Box_Model": { "modified": "2020-07-02T02:43:31.905Z" }, - "Web/CSS/CSS_Box_Model/Kien_thuc_co_ban_ve_css_box_model": { - "modified": "2020-07-26T20:10:53.236Z", - "contributors": [ - "luongvanphuc" - ] - }, "Web/CSS/CSS_Grid_Layout": { "modified": "2020-09-05T02:57:16.998Z", "contributors": [ @@ -1125,15 +805,6 @@ "trannguyenhb" ] }, - "Web/CSS/CSS_Grid_Layout/tong_quan_ve_grid_layout": { - "modified": "2019-10-10T16:32:33.519Z", - "contributors": [ - "thaovy231011", - "graceoflives", - "ThuanChung", - "trannguyenhb" - ] - }, "Web/CSS/CSS_Transitions": { "modified": "2019-03-18T21:17:41.766Z", "contributors": [ @@ -1177,12 +848,6 @@ "alattalatta" ] }, - "Web/CSS/filter-function/url": { - "modified": "2019-06-25T00:21:32.737Z", - "contributors": [ - "quangnguyen3499" - ] - }, "Web/CSS/flex": { "modified": "2019-03-23T22:06:01.834Z", "contributors": [ @@ -1237,13 +902,6 @@ "chrisdavidmills" ] }, - "Web/Events/load": { - "modified": "2019-04-30T13:56:43.861Z", - "contributors": [ - "wbamberg", - "tinhocsoctrang" - ] - }, "Web/Guide": { "modified": "2019-04-18T16:41:12.742Z", "contributors": [ @@ -1259,12 +917,6 @@ "Lyn203" ] }, - "Web/Guide/CSS/Getting_started": { - "modified": "2019-03-23T22:41:47.576Z", - "contributors": [ - "wjinca" - ] - }, "Web/Guide/HTML/HTML5": { "modified": "2019-06-28T06:02:15.769Z", "contributors": [ @@ -1332,13 +984,6 @@ "nguyenhavy280" ] }, - "Web/HTML_vi": { - "modified": "2019-09-10T15:30:17.653Z", - "contributors": [ - "SphinxKnight", - "monodyle" - ] - }, "Web/HTTP": { "modified": "2020-06-02T02:12:20.369Z", "contributors": [ @@ -1448,13 +1093,6 @@ "vietthangml3" ] }, - "Web/JavaScript/Guide/Gioi-thieu": { - "modified": "2020-03-12T19:42:05.017Z", - "contributors": [ - "ldhnam", - "pierreneter" - ] - }, "Web/JavaScript/Guide/Iterators_and_Generators": { "modified": "2020-03-12T19:48:55.506Z", "contributors": [ @@ -1512,15 +1150,6 @@ "quytran" ] }, - "Web/JavaScript/Guide/cu-phap-lap-trinh": { - "modified": "2020-03-12T19:42:06.926Z", - "contributors": [ - "jasonwest", - "mrbean", - "ldhnam", - "pierreneter" - ] - }, "Web/JavaScript/Memory_Management": { "modified": "2020-03-12T19:48:37.281Z", "contributors": [ @@ -1581,12 +1210,6 @@ "Lisa9820727170617" ] }, - "Web/JavaScript/Reference/Errors/qua_nhieu_de_quy": { - "modified": "2020-03-12T19:46:27.274Z", - "contributors": [ - "tuanticker" - ] - }, "Web/JavaScript/Reference/Functions": { "modified": "2020-03-12T19:45:38.625Z", "contributors": [ @@ -1636,13 +1259,6 @@ "teoli" ] }, - "Web/JavaScript/Reference/Global_Objects/Array/\blength": { - "modified": "2020-10-15T22:08:30.308Z", - "contributors": [ - "quangnguyen3499", - "dothanhlam" - ] - }, "Web/JavaScript/Reference/Global_Objects/Array/Reduce": { "modified": "2020-10-15T22:08:11.278Z", "contributors": [ @@ -1656,14 +1272,6 @@ "anhnc" ] }, - "Web/JavaScript/Reference/Global_Objects/Array/Sắp_xếp": { - "modified": "2020-10-15T22:05:03.635Z", - "contributors": [ - "trongthanh", - "PurpleLover", - "summerpupil" - ] - }, "Web/JavaScript/Reference/Global_Objects/Array/concat": { "modified": "2020-10-15T22:08:22.825Z", "contributors": [ @@ -2095,12 +1703,6 @@ "WTSKelly" ] }, - "Web/JavaScript/Reference/Global_Objects/Promise/prototype": { - "modified": "2020-10-15T21:50:15.823Z", - "contributors": [ - "dominhhai" - ] - }, "Web/JavaScript/Reference/Global_Objects/RegExp": { "modified": "2020-10-15T22:02:37.288Z", "contributors": [ @@ -2184,13 +1786,6 @@ "PurpleLover" ] }, - "Web/JavaScript/Reference/Global_Objects/loi": { - "modified": "2020-10-15T22:01:36.057Z", - "contributors": [ - "Dr.Tan", - "bonjourimcam" - ] - }, "Web/JavaScript/Reference/Iteration_protocols": { "modified": "2020-05-26T04:51:45.802Z", "contributors": [ @@ -2203,13 +1798,6 @@ "myakura" ] }, - "Web/JavaScript/Reference/Operators/Arithmetic_Operators": { - "modified": "2020-10-15T22:08:01.208Z", - "contributors": [ - "quytran", - "PurpleLover" - ] - }, "Web/JavaScript/Reference/Operators/Conditional_Operator": { "modified": "2020-10-15T22:14:02.394Z", "contributors": [ @@ -2354,5 +1942,417 @@ "summerpupil", "thonggtcc" ] + }, + "orphaned/Bản_Kê_Khai_Cài_Đặt": { + "modified": "2019-03-24T00:04:37.878Z", + "contributors": [ + "ethertank", + "kimkha" + ] + }, + "orphaned/DOM_Inspector": { + "modified": "2019-01-16T16:31:31.933Z", + "contributors": [ + "ThornyLong" + ] + }, + "orphaned/Labs-tab": { + "modified": "2019-01-16T13:28:54.736Z", + "contributors": [ + "Hakuna" + ] + }, + "Learn/Common_questions/How_does_the_Internet_work": { + "modified": "2020-07-16T22:35:39.021Z", + "contributors": [ + "dev-luonglq" + ] + }, + "Learn/Common_questions/set_up_a_local_testing_server": { + "modified": "2020-07-16T22:35:53.848Z", + "contributors": [ + "namphong124563", + "trannguyenhb" + ] + }, + "orphaned/Learn/How_to_contribute": { + "modified": "2020-07-16T22:33:47.224Z", + "contributors": [ + "SphinxKnight", + "vunamhung" + ] + }, + "Learn/Getting_started_with_the_web/Installing_basic_software": { + "modified": "2020-07-16T22:34:12.264Z", + "contributors": [ + "vunamhung", + "PurpleLover", + "summerpupil", + "trannguyenhb", + "sugudkendy" + ] + }, + "Learn/Forms": { + "modified": "2020-07-16T22:21:02.351Z", + "contributors": [ + "jasonwest", + "Jeffrey_Yang" + ] + }, + "orphaned/MDN/Community": { + "modified": "2019-09-11T08:00:31.400Z", + "contributors": [ + "SphinxKnight", + "wbamberg", + "dangkyokhoang", + "trongdaideveloper", + "lescarbeauleo.ll37" + ] + }, + "orphaned/MDN/Contribute/Howto/Create_an_MDN_account": { + "modified": "2019-08-03T22:29:43.278Z", + "contributors": [ + "sonvo90" + ] + }, + "orphaned/MDN/Contribute/Howto/Do_a_technical_review": { + "modified": "2019-03-18T21:34:38.027Z", + "contributors": [ + "wbamberg", + "SphinxKnight", + "nguyenkien1997" + ] + }, + "orphaned/MDN/Contribute/Howto/Do_an_editorial_review": { + "modified": "2019-03-18T21:31:03.863Z", + "contributors": [ + "wbamberg", + "PurpleLover" + ] + }, + "Glossary/AJAX": { + "modified": "2019-03-23T22:03:39.351Z", + "contributors": [ + "PurpleLover", + "HoangLong" + ] + }, + "Glossary/Algorithm": { + "modified": "2019-07-04T10:59:16.462Z", + "contributors": [ + "CaMapCoChan" + ] + }, + "Glossary/array": { + "modified": "2019-03-23T22:51:42.901Z", + "contributors": [ + "pierreneter" + ] + }, + "Glossary/Attribute": { + "modified": "2019-03-23T22:08:56.474Z", + "contributors": [ + "dogeblossom" + ] + }, + "Glossary/Bandwidth": { + "modified": "2019-03-18T21:38:06.965Z", + "contributors": [ + "LuckyBC" + ] + }, + "Glossary/Boolean": { + "modified": "2019-03-18T21:19:37.651Z", + "contributors": [ + "dangtu" + ] + }, + "Glossary/Cache": { + "modified": "2019-03-18T21:19:31.742Z", + "contributors": [ + "dangtu" + ] + }, + "Glossary/Callback_function": { + "modified": "2020-09-09T06:56:52.568Z", + "contributors": [ + "HieuZenKa" + ] + }, + "Glossary/CDN": { + "modified": "2019-03-18T21:19:29.377Z", + "contributors": [ + "dangtu" + ] + }, + "Glossary/Computer_Programming": { + "modified": "2019-07-04T11:20:10.774Z", + "contributors": [ + "CaMapCoChan" + ] + }, + "Glossary/CSS": { + "modified": "2019-03-23T22:03:35.496Z", + "contributors": [ + "HoangLong" + ] + }, + "Glossary/Dynamic_programming_language": { + "modified": "2020-01-21T05:07:50.519Z", + "contributors": [ + "TozyMC" + ] + }, + "Glossary/Falsy": { + "modified": "2019-03-18T21:42:15.228Z", + "contributors": [ + "huyennbl" + ] + }, + "Glossary/General_header": { + "modified": "2020-07-30T13:12:39.167Z", + "contributors": [ + "meet-robbers" + ] + }, + "Glossary/Head": { + "modified": "2019-03-18T21:34:03.824Z", + "contributors": [ + "haschema" + ] + }, + "Glossary/Hoisting": { + "modified": "2019-03-23T22:03:26.098Z", + "contributors": [ + "tthoa" + ] + }, + "Glossary/HTML": { + "modified": "2019-07-09T01:38:57.464Z", + "contributors": [ + "CaMapCoChan", + "SphinxKnight", + "sang247" + ] + }, + "Glossary/Identifier": { + "modified": "2019-09-12T07:11:51.101Z", + "contributors": [ + "PurpleLover" + ] + }, + "Glossary": { + "modified": "2020-07-07T11:10:26.504Z", + "contributors": [ + "AMAZALK", + "SphinxKnight", + "wbamberg", + "dogeblossom", + "pierreneter" + ] + }, + "Glossary/jQuery": { + "modified": "2020-06-12T00:19:33.980Z", + "contributors": [ + "MinhDT" + ] + }, + "Glossary/JSON": { + "modified": "2020-03-01T08:50:15.149Z", + "contributors": [ + "jasonwest" + ] + }, + "Glossary/Metadata": { + "modified": "2019-09-28T03:51:43.213Z", + "contributors": [ + "PurpleLover" + ] + }, + "Glossary/Null": { + "modified": "2019-04-02T01:34:28.284Z", + "contributors": [ + "PurpleLover" + ] + }, + "Glossary/Operand": { + "modified": "2019-03-18T21:24:16.690Z", + "contributors": [ + "PurpleLover" + ] + }, + "Glossary/PHP": { + "modified": "2020-07-06T04:07:13.997Z", + "contributors": [ + "trhiu98" + ] + }, + "Glossary/Primitive": { + "modified": "2020-02-20T08:31:45.575Z", + "contributors": [ + "jasonwest", + "PurpleLover" + ] + }, + "Glossary/Responsive_web_design": { + "modified": "2019-03-18T21:23:52.487Z", + "contributors": [ + "dangtu", + "PurpleLover" + ] + }, + "Glossary/SVG": { + "modified": "2019-03-18T21:30:00.077Z", + "contributors": [ + "PurpleLover" + ] + }, + "Glossary/Browser": { + "modified": "2019-03-18T21:27:51.112Z", + "contributors": [ + "trongthanh" + ] + }, + "Glossary/Truthy": { + "modified": "2019-03-18T21:14:14.286Z", + "contributors": [ + "PurpleLover" + ] + }, + "Glossary/Type_Conversion": { + "modified": "2019-03-18T21:14:14.787Z", + "contributors": [ + "PurpleLover" + ] + }, + "Glossary/undefined": { + "modified": "2020-11-05T07:13:34.835Z", + "contributors": [ + "lamvanngoankl", + "duongdnh", + "dzungnait" + ] + }, + "Glossary/XML": { + "modified": "2019-04-02T00:32:39.662Z", + "contributors": [ + "PurpleLover" + ] + }, + "Web/API/BaseAudioContext/createOscillator": { + "modified": "2019-03-23T22:10:18.020Z", + "contributors": [ + "deschutron" + ] + }, + "Web/API/HTMLOrForeignElement/dataset": { + "modified": "2020-10-15T22:21:54.914Z", + "contributors": [ + "dangtu" + ] + }, + "Web/API/Navigator/sendBeacon": { + "modified": "2020-10-15T22:30:31.004Z", + "contributors": [ + "hta218" + ] + }, + "Web/CSS/CSS_Box_Model/Introduction_to_the_CSS_box_model": { + "modified": "2020-07-26T20:10:53.236Z", + "contributors": [ + "luongvanphuc" + ] + }, + "Web/CSS/CSS_Grid_Layout/Basic_Concepts_of_Grid_Layout": { + "modified": "2019-10-10T16:32:33.519Z", + "contributors": [ + "thaovy231011", + "graceoflives", + "ThuanChung", + "trannguyenhb" + ] + }, + "Web/API/Window/load_event": { + "modified": "2019-04-30T13:56:43.861Z", + "contributors": [ + "wbamberg", + "tinhocsoctrang" + ] + }, + "conflicting/Web/HTML": { + "modified": "2019-09-10T15:30:17.653Z", + "contributors": [ + "SphinxKnight", + "monodyle" + ] + }, + "Web/JavaScript/Guide/Grammar_and_types": { + "modified": "2020-03-12T19:42:06.926Z", + "contributors": [ + "jasonwest", + "mrbean", + "ldhnam", + "pierreneter" + ] + }, + "Web/JavaScript/Guide/Introduction": { + "modified": "2020-03-12T19:42:05.017Z", + "contributors": [ + "ldhnam", + "pierreneter" + ] + }, + "Web/JavaScript/Reference/Errors/Too_much_recursion": { + "modified": "2020-03-12T19:46:27.274Z", + "contributors": [ + "tuanticker" + ] + }, + "conflicting/Web/JavaScript/Reference/Global_Objects/Array/length": { + "modified": "2020-10-15T22:08:30.308Z", + "contributors": [ + "quangnguyen3499", + "dothanhlam" + ] + }, + "Web/JavaScript/Reference/Global_Objects/Array/sort": { + "modified": "2020-10-15T22:05:03.635Z", + "contributors": [ + "trongthanh", + "PurpleLover", + "summerpupil" + ] + }, + "Web/JavaScript/Reference/Global_Objects/Error": { + "modified": "2020-10-15T22:01:36.057Z", + "contributors": [ + "Dr.Tan", + "bonjourimcam" + ] + }, + "Web/CSS/url()": { + "modified": "2019-06-25T00:21:32.737Z", + "contributors": [ + "quangnguyen3499" + ] + }, + "conflicting/Learn/CSS/First_steps": { + "modified": "2019-03-23T22:41:47.576Z", + "contributors": [ + "wjinca" + ] + }, + "conflicting/Web/JavaScript/Reference/Global_Objects/Promise": { + "modified": "2020-10-15T21:50:15.823Z", + "contributors": [ + "dominhhai" + ] + }, + "conflicting/Web/JavaScript/Reference/Operators": { + "modified": "2020-10-15T22:08:01.208Z", + "contributors": [ + "quytran", + "PurpleLover" + ] } } \ No newline at end of file diff --git a/files/vi/conflicting/learn/css/first_steps/index.html b/files/vi/conflicting/learn/css/first_steps/index.html index 2bfc5c76bb..523fc257b0 100644 --- a/files/vi/conflicting/learn/css/first_steps/index.html +++ b/files/vi/conflicting/learn/css/first_steps/index.html @@ -1,10 +1,10 @@ --- title: Getting started with CSS -slug: Web/Guide/CSS/Getting_started +slug: conflicting/Learn/CSS/First_steps tags: - Beginner - CSS - - 'CSS:Getting_Started' + - CSS:Getting_Started - Guide - Needs - NeedsBeginnerUpdate @@ -14,6 +14,7 @@ tags: - Web translation_of: Learn/CSS/First_steps translation_of_original: Web/Guide/CSS/Getting_started +original_slug: Web/Guide/CSS/Getting_started ---

This tutorial introduces you to the basic features and language (the syntax) for Cascading Style Sheets (CSS). You use CSS to change the look of a structured document, such as a web page. The tutorial also includes sample exercises you can try on your own computer to see the effects of CSS and features that work in modern browsers.

The tutorial is for beginners and anyone who would like to review the basics of CSS. If you have more experience with CSS, the CSS main page lists more advanced resources.

diff --git a/files/vi/conflicting/web/html/index.html b/files/vi/conflicting/web/html/index.html index 0b57e8194c..fbaa7abbf3 100644 --- a/files/vi/conflicting/web/html/index.html +++ b/files/vi/conflicting/web/html/index.html @@ -1,7 +1,8 @@ --- title: HTML -slug: Web/HTML_vi +slug: conflicting/Web/HTML translation_of: Web/HTML +original_slug: Web/HTML_vi ---
{{HTMLSidebar}}
diff --git a/files/vi/conflicting/web/javascript/reference/global_objects/array/length/index.html b/files/vi/conflicting/web/javascript/reference/global_objects/array/length/index.html index 01186b015a..8a939194ca 100644 --- a/files/vi/conflicting/web/javascript/reference/global_objects/array/length/index.html +++ b/files/vi/conflicting/web/javascript/reference/global_objects/array/length/index.html @@ -1,7 +1,8 @@ --- title: Array.length -slug: "Web/JavaScript/Reference/Global_Objects/Array/\blength" +slug: conflicting/Web/JavaScript/Reference/Global_Objects/Array/length translation_of: Web/JavaScript/Reference/Global_Objects/Array/length +original_slug: "Web/JavaScript/Reference/Global_Objects/Array/\blength" ---
{{JSRef}}
diff --git a/files/vi/conflicting/web/javascript/reference/global_objects/promise/index.html b/files/vi/conflicting/web/javascript/reference/global_objects/promise/index.html index 9fb94f4154..5fda2aba9f 100644 --- a/files/vi/conflicting/web/javascript/reference/global_objects/promise/index.html +++ b/files/vi/conflicting/web/javascript/reference/global_objects/promise/index.html @@ -1,8 +1,9 @@ --- title: Promise.prototype -slug: Web/JavaScript/Reference/Global_Objects/Promise/prototype +slug: conflicting/Web/JavaScript/Reference/Global_Objects/Promise translation_of: Web/JavaScript/Reference/Global_Objects/Promise translation_of_original: Web/JavaScript/Reference/Global_Objects/Promise/prototype +original_slug: Web/JavaScript/Reference/Global_Objects/Promise/prototype ---
{{JSRef}}
diff --git a/files/vi/conflicting/web/javascript/reference/operators/index.html b/files/vi/conflicting/web/javascript/reference/operators/index.html index 302c6633c6..1eb6c04b76 100644 --- a/files/vi/conflicting/web/javascript/reference/operators/index.html +++ b/files/vi/conflicting/web/javascript/reference/operators/index.html @@ -1,8 +1,9 @@ --- title: Toán tử số học -slug: Web/JavaScript/Reference/Operators/Arithmetic_Operators +slug: conflicting/Web/JavaScript/Reference/Operators translation_of: Web/JavaScript/Reference/Operators translation_of_original: Web/JavaScript/Reference/Operators/Arithmetic_Operators +original_slug: Web/JavaScript/Reference/Operators/Arithmetic_Operators ---
{{jsSidebar("Operators")}}
diff --git a/files/vi/glossary/ajax/index.html b/files/vi/glossary/ajax/index.html index c111812954..ce804dea38 100644 --- a/files/vi/glossary/ajax/index.html +++ b/files/vi/glossary/ajax/index.html @@ -1,7 +1,8 @@ --- title: AJAX -slug: Tu-dien-thuat-ngu/AJAX +slug: Glossary/AJAX translation_of: Glossary/AJAX +original_slug: Tu-dien-thuat-ngu/AJAX ---

AJAX (Asynchronous {{glossary("JavaScript")}} And {{glossary("XML")}}) là một kỹ thuật lập trình kết hợp {{glossary("HTML")}}, {{glossary("CSS")}}, {{glossary("JavaScript")}}, {{glossary("DOM")}}, và đối tượng XMLHttpRequest để xây dựng các trang web phức tạp hơn. Điều mà AJAX cho phép bạn thực hiện chỉ là cập nhật một số thành phần của trang web thay vì phải tải lại toàn bộ trang. AJAX cũng cho phép bạn làm việc bất đồng bộ, có nghĩa là mã nguồn của bạn tiếp tục chạy trong khi những thành phần đó sẽ cố gắng tải lại (còn đồng bộ sẽ không cho mã nguồn của bạn chạy cho đến khi các thành phần của trang web tải lại xong).

diff --git a/files/vi/glossary/algorithm/index.html b/files/vi/glossary/algorithm/index.html index 79accd5810..93fcf4df29 100644 --- a/files/vi/glossary/algorithm/index.html +++ b/files/vi/glossary/algorithm/index.html @@ -1,9 +1,10 @@ --- title: Thuật Toán -slug: Tu-dien-thuat-ngu/Algorithm +slug: Glossary/Algorithm tags: - thuật toán translation_of: Glossary/Algorithm +original_slug: Tu-dien-thuat-ngu/Algorithm ---

Thuật toán là một chuỗi khép kín những hướng dẫn để thực hiện một chức năng.

diff --git a/files/vi/glossary/array/index.html b/files/vi/glossary/array/index.html index d701cf9623..ff005daae5 100644 --- a/files/vi/glossary/array/index.html +++ b/files/vi/glossary/array/index.html @@ -1,7 +1,8 @@ --- title: Array -slug: Tu-dien-thuat-ngu/array +slug: Glossary/array translation_of: Glossary/array +original_slug: Tu-dien-thuat-ngu/array ---

Một array (mảng) là một tập hợp sắp xếp các dữ liệu {{Glossary("primitive")}} hoặc {{Glossary("object")}}. Dựa vào các vị trí của nó trong array, mỗi item (phần tử trong mảng) dữ liệu có một số index (chỉ mục, thứ tự vị trí của các phần tử, bắt đầu từ vị trí đầu tiên có giá trị là 0), thông qua index này mà bạn có thể truy cập tới các {{glossary("giá trị")}} ({{glossary("value")}}) chứa trong mảng. {{jsxref("array")}} cũng là các đối tượng, mà nó có thể được dùng bởi nhiều phương thức khác nhau. ({{jsxref("array")}}s are also objects that can be manipulated with various {{Glossary("Method", "methods")}}.)

diff --git a/files/vi/glossary/attribute/index.html b/files/vi/glossary/attribute/index.html index 50079a0e56..8fe616d567 100644 --- a/files/vi/glossary/attribute/index.html +++ b/files/vi/glossary/attribute/index.html @@ -1,10 +1,11 @@ --- title: Thuộc tính -slug: Tu-dien-thuat-ngu/Attribute +slug: Glossary/Attribute tags: - HTML - Từ điển thuật ngữ translation_of: Glossary/Attribute +original_slug: Tu-dien-thuat-ngu/Attribute ---

Một thuộc tính mở rộng một {{Glossary("thẻ")}}, thay đổi hành vi của thẻ đó hoặc cung cấp thông tin/dữ liệu về nó. Một thuộc tính luôn luôn có dạng name=value (tên của một thuộc tính được đặt theo các thuộc tính liên quan).

diff --git a/files/vi/glossary/bandwidth/index.html b/files/vi/glossary/bandwidth/index.html index 50bee3a7cd..6db7ad3983 100644 --- a/files/vi/glossary/bandwidth/index.html +++ b/files/vi/glossary/bandwidth/index.html @@ -1,7 +1,8 @@ --- title: Bandwidth -slug: Tu-dien-thuat-ngu/Bandwidth +slug: Glossary/Bandwidth translation_of: Glossary/Bandwidth +original_slug: Tu-dien-thuat-ngu/Bandwidth ---

 

diff --git a/files/vi/glossary/boolean/index.html b/files/vi/glossary/boolean/index.html index 9d227fa486..2800146bfd 100644 --- a/files/vi/glossary/boolean/index.html +++ b/files/vi/glossary/boolean/index.html @@ -1,6 +1,6 @@ --- title: Boolean -slug: Tu-dien-thuat-ngu/Boolean +slug: Glossary/Boolean tags: - Boolean - JavaScript @@ -8,6 +8,7 @@ tags: - Ngôn ngữ lập trình - Thuật ngữ translation_of: Glossary/Boolean +original_slug: Tu-dien-thuat-ngu/Boolean ---

Trong khoa học máy tính, Boolean (phiên âm /bu-li-ờn/) là loại dữ liệu logic chỉ có giá trị true/đúng hoặc false/sai. Ví dụ, trong JavaScript, điều kiện Boolean thường sử dụng để quyết định đoạn mã nào được thực thi (như trong {{jsxref("Statements/if...else", "lệnh if")}}) hay lặp lại (trong {{jsxref("Statements/for", "vòng lặp for")}}).

diff --git a/files/vi/glossary/browser/index.html b/files/vi/glossary/browser/index.html index 147573222b..bf9179c482 100644 --- a/files/vi/glossary/browser/index.html +++ b/files/vi/glossary/browser/index.html @@ -1,10 +1,11 @@ --- title: Trình Duyệt -slug: Tu-dien-thuat-ngu/trinh-duyet +slug: Glossary/Browser tags: - Thuật ngữ - Từ điển translation_of: Glossary/Browser +original_slug: Tu-dien-thuat-ngu/trinh-duyet ---

Trình duyệt Web hay trình duyệt là một chương trình có chức năng tải và hiển thị các trang {{Glossary("World Wide Web","Web")}}, và cho phép người dùng truy cập những trang web khác thông qua {{Glossary("hyperlink","hyperlinks")}}. Trình duyệt chính là những {{Glossary("user agent")}} phổ biến nhất.

diff --git a/files/vi/glossary/cache/index.html b/files/vi/glossary/cache/index.html index d496389bba..dd5159d4ea 100644 --- a/files/vi/glossary/cache/index.html +++ b/files/vi/glossary/cache/index.html @@ -1,10 +1,11 @@ --- title: Cache -slug: Tu-dien-thuat-ngu/Cache +slug: Glossary/Cache tags: - HTTP - Thuật ngữ translation_of: Glossary/Cache +original_slug: Tu-dien-thuat-ngu/Cache ---

Cache (web cache hay HTTP cache, phiên âm /kát-sờ/) là một thành phần lưu trữ phản hồi HTTP tạm thời từ đó máy tính có thể sử dụng nó cho những yêu cầu HTTP tiếp theo miễn nó đạt được những điều kiện nhất định.

diff --git a/files/vi/glossary/callback_function/index.html b/files/vi/glossary/callback_function/index.html index 5aabc5fcc4..3692c5a6c9 100644 --- a/files/vi/glossary/callback_function/index.html +++ b/files/vi/glossary/callback_function/index.html @@ -1,7 +1,8 @@ --- title: Callback function -slug: Tu-dien-thuat-ngu/Callback_function +slug: Glossary/Callback_function translation_of: Glossary/Callback_function +original_slug: Tu-dien-thuat-ngu/Callback_function ---

Hàm gọi lại là một hàm được truyền vào một hàm khác dưới dạng đối số, sau đó được gọi bên trong hàm bên ngoài để hoàn thành một số loại quy trình hoặc hành động.  Đây là một ví dụ nhanh:

diff --git a/files/vi/glossary/cdn/index.html b/files/vi/glossary/cdn/index.html index 9f54fcb5b4..bd3bf5fff6 100644 --- a/files/vi/glossary/cdn/index.html +++ b/files/vi/glossary/cdn/index.html @@ -1,10 +1,11 @@ --- title: CDN -slug: Tu-dien-thuat-ngu/CDN +slug: Glossary/CDN tags: - Cơ sở hạ tầng - Thuật ngữ translation_of: Glossary/CDN +original_slug: Tu-dien-thuat-ngu/CDN ---

CDN (Mạng lưới Phân phối Nội dung / Content Delivery Network) là một nhóm các máy chủ phân bổ trên nhiều vị trí địa lý. Những máy chủ này chứa các bản sao dữ liệu để nó có thể cung cấp dữ liệu được yêu cầu dựa trên máy chủ gần nhất so với người-dùng-cuối tương ứng. Các CDN giúp cho dịch vụ tốc ít bị ảnh hưởng bởi lưu lượng cao.

diff --git a/files/vi/glossary/computer_programming/index.html b/files/vi/glossary/computer_programming/index.html index 27c03c6afb..abafd80811 100644 --- a/files/vi/glossary/computer_programming/index.html +++ b/files/vi/glossary/computer_programming/index.html @@ -1,9 +1,10 @@ --- title: Lập Trình Máy Tính -slug: Tu-dien-thuat-ngu/Computer_Programming +slug: Glossary/Computer_Programming tags: - Lập trình máy tính translation_of: Glossary/Computer_Programming +original_slug: Tu-dien-thuat-ngu/Computer_Programming ---

Lập trình máy tính là một quá trình xây dựng và sắp xếp một bộ gồm các hướng dẫn. Những hướng dẫn này sẽ nói cho máy tính/ phần mềm biết nó phải làm gì bằng ngôn ngữ mà máy hiểu được. Hướng dẫn được viết bằng rất nhiều ngôn ngữ, như là C++, Java, JavaScript, HTML, Python, Ruby, and Rust.

diff --git a/files/vi/glossary/css/index.html b/files/vi/glossary/css/index.html index 4c6d127406..61ef0bca16 100644 --- a/files/vi/glossary/css/index.html +++ b/files/vi/glossary/css/index.html @@ -1,7 +1,8 @@ --- title: CSS -slug: Tu-dien-thuat-ngu/CSS +slug: Glossary/CSS translation_of: Glossary/CSS +original_slug: Tu-dien-thuat-ngu/CSS ---

CSS (Cascading Style Sheets) là một ngôn ngữ khai báo mà điều chỉnh trang web sẽ nhìn như thế nào trong {{glossary("trình duyệt")}}. Trình duyệt gắn kiểu khai báo trong CSS vào những elements dược chọn để hiển thị nó đúng chính xác. Một kiểu khai báo bao gồm những thuộc tính và giá trị của các elements, cái mà xác định trang web sẽ nhìn như thế nào.

diff --git a/files/vi/glossary/dynamic_programming_language/index.html b/files/vi/glossary/dynamic_programming_language/index.html index 7babbc04e7..e8a8dd07dc 100644 --- a/files/vi/glossary/dynamic_programming_language/index.html +++ b/files/vi/glossary/dynamic_programming_language/index.html @@ -1,7 +1,8 @@ --- title: Ngôn ngữ lập trình động -slug: Tu-dien-thuat-ngu/Dynamic_programming_language +slug: Glossary/Dynamic_programming_language translation_of: Glossary/Dynamic_programming_language +original_slug: Tu-dien-thuat-ngu/Dynamic_programming_language ---

Ngôn ngữ lập trình động là ngôn ngữ lập trình trong đó các thao tác được thực hiện tại thời gian biên dịch có thể được thực hiện trong thời gian chạy. Ví dụ: trong JavaScript, có thể thay đổi loại biến hoặc thêm các thuộc tính hoặc phương thức mới vào một đối tượng trong khi chương trình đang chạy.

diff --git a/files/vi/glossary/falsy/index.html b/files/vi/glossary/falsy/index.html index c71e9cc197..7b39f3e98b 100644 --- a/files/vi/glossary/falsy/index.html +++ b/files/vi/glossary/falsy/index.html @@ -1,7 +1,8 @@ --- title: Falsy -slug: Tu-dien-thuat-ngu/Falsy +slug: Glossary/Falsy translation_of: Glossary/Falsy +original_slug: Tu-dien-thuat-ngu/Falsy ---

Giá trị falsy là giá trị được hiểu là false trong ngữ cảnh {{Glossary("Boolean")}}.

diff --git a/files/vi/glossary/general_header/index.html b/files/vi/glossary/general_header/index.html index e6ac4493a9..318407154d 100644 --- a/files/vi/glossary/general_header/index.html +++ b/files/vi/glossary/general_header/index.html @@ -1,9 +1,10 @@ --- title: General header -slug: Tu-dien-thuat-ngu/General_header +slug: Glossary/General_header tags: - C++ translation_of: Glossary/General_header +original_slug: Tu-dien-thuat-ngu/General_header ---

A general header is an {{glossary('Header', 'HTTP header')}} that can be used in both request and response messages but doesn't apply to the content itself. Depending on the context they are used in, general headers are either {{glossary("Response header", "response")}} or {{glossary("request header", "request headers")}}. However, they are not {{glossary("entity header", "entity headers")}}.

diff --git a/files/vi/glossary/head/index.html b/files/vi/glossary/head/index.html index c53ed73844..af4f9c9532 100644 --- a/files/vi/glossary/head/index.html +++ b/files/vi/glossary/head/index.html @@ -1,7 +1,8 @@ --- title: Head -slug: Tu-dien-thuat-ngu/Head +slug: Glossary/Head translation_of: Glossary/Head +original_slug: Tu-dien-thuat-ngu/Head ---

Head là một phần của một  văn bản {{glossary("HTML")}} chứa {{glossary("metadata")}} về văn bản đó, như tác giả, mô tả, và liên kết đến các tập tin {{glossary("CSS")}} hay {{glossary("JavaScript")}} được áp dụng vào văn bản HTML.

diff --git a/files/vi/glossary/hoisting/index.html b/files/vi/glossary/hoisting/index.html index b12a7f94cc..2f1f2a67c8 100644 --- a/files/vi/glossary/hoisting/index.html +++ b/files/vi/glossary/hoisting/index.html @@ -1,9 +1,10 @@ --- title: Hoisting -slug: Tu-dien-thuat-ngu/Hoisting +slug: Glossary/Hoisting tags: - JavaScript translation_of: Glossary/Hoisting +original_slug: Tu-dien-thuat-ngu/Hoisting ---

Hoisting là một thuật ngữ mà bạn sẽ không tìm thấy cách sử dụng trong bất cứ văn bản đặc tả quy chuẩn nào trước ECMAScript® 2015 Language Specification. Hoisting được nghĩ đến như một cách chung trong việc thực thi các ngữ cảnh (đặc biệt là giai đoạn tạo và thực thi) làm việc như thế nào trong JavaScript. Nhưng, hoisting có thể dẫn đến nhiều sự hiểu lầm. Ví dụ, hoisting dạy rằng định nghĩa biến và hàm được chuyển tới đầu đoạn mã của bạn, nhưng đây không hẳn là tất cả những gì xảy ra. Chuyện gì xảy ra khi các định nghĩa biến và hàm đó được lưu vào bộ nhớ trong suốt giai đoạn biên dịch, nhưng ở chính xác nơi bạn đã gõ nó trong đoạn mã của bạn?

diff --git a/files/vi/glossary/html/index.html b/files/vi/glossary/html/index.html index 68a5ba4c81..616d2ffed4 100644 --- a/files/vi/glossary/html/index.html +++ b/files/vi/glossary/html/index.html @@ -1,7 +1,8 @@ --- title: HTML -slug: Tu-dien-thuat-ngu/HTML +slug: Glossary/HTML translation_of: Glossary/HTML +original_slug: Tu-dien-thuat-ngu/HTML ---

HTML (Ngôn ngữ đánh dấu siêu văn bản), là một ngôn ngữ mang tính miêu tả chỉ dành riêng cho cấu trúc trang web.

diff --git a/files/vi/glossary/identifier/index.html b/files/vi/glossary/identifier/index.html index 36b044a73c..7ceace454b 100644 --- a/files/vi/glossary/identifier/index.html +++ b/files/vi/glossary/identifier/index.html @@ -1,7 +1,8 @@ --- title: Identifier -slug: Tu-dien-thuat-ngu/Identifier +slug: Glossary/Identifier translation_of: Glossary/Identifier +original_slug: Tu-dien-thuat-ngu/Identifier ---

Định danh là chuỗi ký tự trong mã nguồn để xác định {{glossary("variable")}}, {{glossary("function")}}, hoặc {{glossary("property")}}.

diff --git a/files/vi/glossary/index.html b/files/vi/glossary/index.html index 053ad9b274..ef14a9a45b 100644 --- a/files/vi/glossary/index.html +++ b/files/vi/glossary/index.html @@ -1,11 +1,12 @@ --- title: Từ điển thuật ngữ -slug: Tu-dien-thuat-ngu +slug: Glossary tags: - Index - Người mới - Từ điển translation_of: Glossary +original_slug: Tu-dien-thuat-ngu ---
{{LearnBox({"title":"Có thể bạn chưa biết"})}}
diff --git a/files/vi/glossary/jquery/index.html b/files/vi/glossary/jquery/index.html index 1477abfb66..9b9ea78ce0 100644 --- a/files/vi/glossary/jquery/index.html +++ b/files/vi/glossary/jquery/index.html @@ -1,7 +1,8 @@ --- title: jQuery -slug: Tu-dien-thuat-ngu/jQuery +slug: Glossary/jQuery translation_of: Glossary/jQuery +original_slug: Tu-dien-thuat-ngu/jQuery ---

jQuery là một {{Glossary("JavaScript")}} {{Glossary("Library")}} tập trung vào việc đơn giản hóa thao tác vơi {{Glossary("DOM")}}, gọi {{Glossary("AJAX")}}, và điều khiển {{Glossary("Event")}}.

diff --git a/files/vi/glossary/json/index.html b/files/vi/glossary/json/index.html index 8158b09c63..ec99e9294a 100644 --- a/files/vi/glossary/json/index.html +++ b/files/vi/glossary/json/index.html @@ -1,7 +1,8 @@ --- title: JSON -slug: Tu-dien-thuat-ngu/JSON +slug: Glossary/JSON translation_of: Glossary/JSON +original_slug: Tu-dien-thuat-ngu/JSON ---

JavaScript Object Notation (JSON) là một data-interchange format. Mặc dù không phải là một strict subset, JSON lại rất giống với một subset theo cú pháp của {{Glossary("JavaScript")}}.

diff --git a/files/vi/glossary/metadata/index.html b/files/vi/glossary/metadata/index.html index ff72a21192..4bf2499a8a 100644 --- a/files/vi/glossary/metadata/index.html +++ b/files/vi/glossary/metadata/index.html @@ -1,7 +1,8 @@ --- title: Metadata -slug: Tu-dien-thuat-ngu/Metadata +slug: Glossary/Metadata translation_of: Glossary/Metadata +original_slug: Tu-dien-thuat-ngu/Metadata ---

Metadata (Siêu dữ liệu) là — in its very simplest definition — dữ liệu mô tả dữ liệu. Chẳng hạn, tài liệu {{glossary("HTML")}} là dữ liệu, nhưng HTML có thể chứa metadata trong phần tử {{htmlelement("head")}} để mô tả tài liệu đó — như là ai viết nó, và tóm lược trang web.

diff --git a/files/vi/glossary/null/index.html b/files/vi/glossary/null/index.html index 4baec6b2e6..c5ae5f3e9c 100644 --- a/files/vi/glossary/null/index.html +++ b/files/vi/glossary/null/index.html @@ -1,7 +1,8 @@ --- title: 'Null' -slug: Tu-dien-thuat-ngu/Null +slug: Glossary/Null translation_of: Glossary/Null +original_slug: Tu-dien-thuat-ngu/Null ---

Trong khoa học máy tính, giá trị null đại điện cho một tham chiếu trỏ tới, thường là cố tình, {{glossary("object")}} hoặc địa chỉ không tồn tại hoặc không hợp lệ. Ý nghĩa của null tuỳ theo từng ngôn ngữ.

diff --git a/files/vi/glossary/operand/index.html b/files/vi/glossary/operand/index.html index 407d9c03d0..5971b6cf59 100644 --- a/files/vi/glossary/operand/index.html +++ b/files/vi/glossary/operand/index.html @@ -1,7 +1,8 @@ --- title: Toán hạng -slug: Tu-dien-thuat-ngu/Operand +slug: Glossary/Operand translation_of: Glossary/Operand +original_slug: Tu-dien-thuat-ngu/Operand ---

Toán hạng là một phần trong câu lệnh biểu diễn thao tác dữ liệu bởi {{glossary("operator")}}. Chẳng hạn, khi bạn cộng hai số, hai số đó là toán hạng và "+" là toán tử.

diff --git a/files/vi/glossary/php/index.html b/files/vi/glossary/php/index.html index f75d0f07e7..b09ede6365 100644 --- a/files/vi/glossary/php/index.html +++ b/files/vi/glossary/php/index.html @@ -1,7 +1,8 @@ --- title: PHP -slug: Tu-dien-thuat-ngu/PHP +slug: Glossary/PHP translation_of: Glossary/PHP +original_slug: Tu-dien-thuat-ngu/PHP ---

PHP (a recursive initialism for PHP: Hypertext Preprocessor) is an open-source server-side scripting language that can be embedded into HTML to build web applications and dynamic websites.

diff --git a/files/vi/glossary/primitive/index.html b/files/vi/glossary/primitive/index.html index b65302eab7..cc4a15e2b3 100644 --- a/files/vi/glossary/primitive/index.html +++ b/files/vi/glossary/primitive/index.html @@ -1,7 +1,8 @@ --- title: Primitive -slug: Tu-dien-thuat-ngu/Primitive +slug: Glossary/Primitive translation_of: Glossary/Primitive +original_slug: Tu-dien-thuat-ngu/Primitive ---

Trong {{Glossary("JavaScript")}}, một bản nguyên (giá trị nguyên thủy, giá trị sơ khai, kiểu dữ liệu sơ khai) là dữ liệu mà dữ liệu này không phải {{Glossary("object")}} và không có {{glossary("method","phương thức")}}. Có 7 kiểu dữ liệu bản nguyên: {{Glossary("string")}}, {{Glossary("number")}}, {{Glossary("bigint")}}, {{Glossary("boolean")}}, {{Glossary("null")}}, {{Glossary("undefined")}}, {{Glossary("symbol")}} (mới thêm vào trong {{Glossary("ECMAScript")}} 2015).

diff --git a/files/vi/glossary/responsive_web_design/index.html b/files/vi/glossary/responsive_web_design/index.html index ba3cae0d1c..4e46368fb9 100644 --- a/files/vi/glossary/responsive_web_design/index.html +++ b/files/vi/glossary/responsive_web_design/index.html @@ -1,11 +1,12 @@ --- title: Responsive web design -slug: Tu-dien-thuat-ngu/Responsive_web_design +slug: Glossary/Responsive_web_design tags: - Khả năng tiếp cận - Thiết kế - Thuật ngữ translation_of: Glossary/Responsive_web_design +original_slug: Tu-dien-thuat-ngu/Responsive_web_design ---

Responsive Web Design (RWD) (Thiết kế web linh hoạt) là khái niệm trong lập trình Web hướng tới tạo ra website có vẻ ngoài và cơ chế vận hành tối ưu trên tất cả thiết bị tính toán cá nhân, từ desktop (cố định) tới mobile (di động).

diff --git a/files/vi/glossary/svg/index.html b/files/vi/glossary/svg/index.html index d73e8f0d9d..e514deba43 100644 --- a/files/vi/glossary/svg/index.html +++ b/files/vi/glossary/svg/index.html @@ -1,7 +1,8 @@ --- title: SVG -slug: Tu-dien-thuat-ngu/SVG +slug: Glossary/SVG translation_of: Glossary/SVG +original_slug: Tu-dien-thuat-ngu/SVG ---

Scalable Vector Graphics (SVG) là một định dạng hình ảnh véc tơ 2D dựa trên cú pháp của {{Glossary("XML")}}.

diff --git a/files/vi/glossary/truthy/index.html b/files/vi/glossary/truthy/index.html index e9b5b23291..db73ea562d 100644 --- a/files/vi/glossary/truthy/index.html +++ b/files/vi/glossary/truthy/index.html @@ -1,7 +1,8 @@ --- title: Truthy -slug: Tu-dien-thuat-ngu/Truthy +slug: Glossary/Truthy translation_of: Glossary/Truthy +original_slug: Tu-dien-thuat-ngu/Truthy ---

Trong {{Glossary("JavaScript")}}, truthy là giá trị được hiểu là true trong ngữ cảnh {{Glossary("Boolean")}}. Tất cả mọi giá trị đều là truthy, trừ phi chúng được định nghĩa là {{Glossary("Falsy", "falsy")}} (tức là, ngoại trừ false, 0, "", null, undefined, và NaN).

diff --git a/files/vi/glossary/type_conversion/index.html b/files/vi/glossary/type_conversion/index.html index c3d2ca07c9..1b32be0968 100644 --- a/files/vi/glossary/type_conversion/index.html +++ b/files/vi/glossary/type_conversion/index.html @@ -1,7 +1,8 @@ --- title: Type Conversion -slug: Tu-dien-thuat-ngu/Type_Conversion +slug: Glossary/Type_Conversion translation_of: Glossary/Type_Conversion +original_slug: Tu-dien-thuat-ngu/Type_Conversion ---

Chuyển đổi kiểu (hay ép kiểu) tức là truyền dữ liệu từ kiểu dữ liệu này sang kiểu dữ liệu khác. Chuyển kiểu ngầm xảy ra khi bộ biên dịch tự động gán kiểu dữ liệu, song mã nguồn vẫn có thể thực hiện chuyển kiểu theo cách tường minh. Chẳng hạn, đoạn lệnh 5+2.0, số thực dấu phẩy động 2.0 được ép kiểu ngầm sang số nguyên, nhưng với lệnh Number("0x11"), xâu ký tự "0x11" được ép kiểu tường minh sang số 17.

diff --git a/files/vi/glossary/undefined/index.html b/files/vi/glossary/undefined/index.html index 6cad2c4b1b..5bc6e40c1d 100644 --- a/files/vi/glossary/undefined/index.html +++ b/files/vi/glossary/undefined/index.html @@ -1,7 +1,8 @@ --- title: undefined -slug: Tu-dien-thuat-ngu/undefined +slug: Glossary/undefined translation_of: Glossary/undefined +original_slug: Tu-dien-thuat-ngu/undefined ---

undefined là một giá trị nguyên thủy được gán tự động cho các biến vừa được khai báo hoặc cho các đối số chính thức không có đối số thực tế.

diff --git a/files/vi/glossary/xml/index.html b/files/vi/glossary/xml/index.html index f76d106d37..39b44b4290 100644 --- a/files/vi/glossary/xml/index.html +++ b/files/vi/glossary/xml/index.html @@ -1,7 +1,8 @@ --- title: XML -slug: Tu-dien-thuat-ngu/XML +slug: Glossary/XML translation_of: Glossary/XML +original_slug: Tu-dien-thuat-ngu/XML ---

eXtensible Markup Language (XML) là ngôn ngữ đánh dấu chung được W3C đặc tả. Ngành Công nghệ thông tin (IT) sử dụng nhiều ngôn ngữ dựa trên XML như là ngôn ngữ mô tả dữ liệu.

diff --git a/files/vi/learn/common_questions/how_does_the_internet_work/index.html b/files/vi/learn/common_questions/how_does_the_internet_work/index.html index fb9abacd43..34710ada60 100644 --- a/files/vi/learn/common_questions/how_does_the_internet_work/index.html +++ b/files/vi/learn/common_questions/how_does_the_internet_work/index.html @@ -1,7 +1,8 @@ --- title: Internet làm việc như thế nào? -slug: Learn/Common_questions/Internet_lam_viec_nh_the_nao +slug: Learn/Common_questions/How_does_the_Internet_work translation_of: Learn/Common_questions/How_does_the_Internet_work +original_slug: Learn/Common_questions/Internet_lam_viec_nh_the_nao ---
{{LearnSidebar}}
diff --git a/files/vi/learn/common_questions/set_up_a_local_testing_server/index.html b/files/vi/learn/common_questions/set_up_a_local_testing_server/index.html index 187215c53c..5381eef89c 100644 --- a/files/vi/learn/common_questions/set_up_a_local_testing_server/index.html +++ b/files/vi/learn/common_questions/set_up_a_local_testing_server/index.html @@ -1,7 +1,8 @@ --- title: Làm sao để thiết lập web mạng nội bộ? -slug: Learn/Common_questions/thiet_lap_web_mang_noi_bo +slug: Learn/Common_questions/set_up_a_local_testing_server translation_of: Learn/Common_questions/set_up_a_local_testing_server +original_slug: Learn/Common_questions/thiet_lap_web_mang_noi_bo ---

 

diff --git a/files/vi/learn/forms/index.html b/files/vi/learn/forms/index.html index 5b0215a43c..8076674a1f 100644 --- a/files/vi/learn/forms/index.html +++ b/files/vi/learn/forms/index.html @@ -1,6 +1,6 @@ --- title: HTML forms -slug: Learn/HTML/Forms +slug: Learn/Forms tags: - Beginner - Featured @@ -13,6 +13,7 @@ tags: - TopicStub - Web translation_of: Learn/Forms +original_slug: Learn/HTML/Forms ---
{{LearnSidebar}}
diff --git a/files/vi/learn/getting_started_with_the_web/installing_basic_software/index.html b/files/vi/learn/getting_started_with_the_web/installing_basic_software/index.html index 0350529f25..ffedc37faa 100644 --- a/files/vi/learn/getting_started_with_the_web/installing_basic_software/index.html +++ b/files/vi/learn/getting_started_with_the_web/installing_basic_software/index.html @@ -1,6 +1,6 @@ --- title: Cài đặt các phần mềm cơ bản -slug: Learn/Getting_started_with_the_web/Cài_đặt_các_phần_mềm_cơ_bản +slug: Learn/Getting_started_with_the_web/Installing_basic_software tags: - Công Cụ - Học Làm Web @@ -8,6 +8,7 @@ tags: - Thiết Lập - Trình Duyệt Web translation_of: Learn/Getting_started_with_the_web/Installing_basic_software +original_slug: Learn/Getting_started_with_the_web/Cài_đặt_các_phần_mềm_cơ_bản ---
{{LearnSidebar}}
diff --git "a/files/vi/orphaned/b\341\272\243n_k\303\252_khai_c\303\240i_\304\221\341\272\267t/index.html" "b/files/vi/orphaned/b\341\272\243n_k\303\252_khai_c\303\240i_\304\221\341\272\267t/index.html" index e7b696b80f..acf29145c6 100644 --- "a/files/vi/orphaned/b\341\272\243n_k\303\252_khai_c\303\240i_\304\221\341\272\267t/index.html" +++ "b/files/vi/orphaned/b\341\272\243n_k\303\252_khai_c\303\240i_\304\221\341\272\267t/index.html" @@ -1,6 +1,7 @@ --- title: Bản Kê Khai Cài Đặt -slug: Bản_Kê_Khai_Cài_Đặt +slug: orphaned/Bản_Kê_Khai_Cài_Đặt +original_slug: Bản_Kê_Khai_Cài_Đặt ---

Giới Thiệu

Một Bản Kê Khai Cài Đặt (Install Manifest) là một tập tin mà một ứng dụng XUL - được bật mở trình Quản lý Tiện ích - sử dụng để xác định các thông tin về tiện ích khi nó được cài đặt. Nó chứa các siêu dữ liệu (metadata) để nhận diện tiện ích, cung cấp thông tin về người đã tạo ra nó, nơi mà các thông thêm về nó có thể được tìm thấy, các phiên bản nào của ứng dụng nào mà nó tương thích, làm sao để nó luôn được cập nhật, và nhiều thứ khác.

diff --git a/files/vi/orphaned/dom_inspector/index.html b/files/vi/orphaned/dom_inspector/index.html index ec9b4e0dbb..b4e9660dac 100644 --- a/files/vi/orphaned/dom_inspector/index.html +++ b/files/vi/orphaned/dom_inspector/index.html @@ -1,5 +1,6 @@ --- title: DOM Inspector -slug: DOM_Inspector +slug: orphaned/DOM_Inspector +original_slug: DOM_Inspector ---

DOM Inspector (viết tắt là DOMi) là bộ công cụ dùng để kiểm tra, duyệt và chỉnh sửa  Document Object Model - dùng trong các trang web hoặc cửa sổ XUL. Hệ thống phân cấp DOM có thể điều hướng qua lại 2 cửa sổ cho phép xem tài liệu và các nút.

diff --git a/files/vi/orphaned/labs-tab/index.html b/files/vi/orphaned/labs-tab/index.html index 6cedf8e2d3..d99efd80f0 100644 --- a/files/vi/orphaned/labs-tab/index.html +++ b/files/vi/orphaned/labs-tab/index.html @@ -1,6 +1,7 @@ --- title: Labs-tab -slug: Labs-tab +slug: orphaned/Labs-tab +original_slug: Labs-tab ---

Quan tâm đến việc định hình tương lai của Web?

Mozilla Labs là một phòng thí nghiệm ảo, nơi bạn có thể tham gia với chúng tôi để tạo ra, thử nghiệm, xây dựng
sử dụng những cải tiến và công nghệ Web mới. Đóng góp của cộng đồng chúng tôi có sự đa dạng về nguồn gốc, nhưng chia sẻ tất cả các lợi ích chung trong việc trải nghiệm Web.

Để bắt đầu, hãy tìm hiểu về các dự án của chúng tôi sau đó góp phần vào dự án bằng cách tham gia những thảo luận với chúng tôi, thử nghiệm những thiết kế mới, khai thác mã nguồn hoặc
gửi phản hồi về sản phẩm.



Theo dõi những thông tin mới nhất về các dự án của chúng tôi trên Twitter tại @mozlabs.

diff --git a/files/vi/orphaned/learn/how_to_contribute/index.html b/files/vi/orphaned/learn/how_to_contribute/index.html index ca0f73fbc1..57950d842f 100644 --- a/files/vi/orphaned/learn/how_to_contribute/index.html +++ b/files/vi/orphaned/learn/how_to_contribute/index.html @@ -1,7 +1,8 @@ --- title: Cách đóng góp cho Khu vực học tập trên MDN -slug: Learn/Dong_gop_cho_khu_vuc_hoc_tap_tren_MDN +slug: orphaned/Learn/How_to_contribute translation_of: Learn/How_to_contribute +original_slug: Learn/Dong_gop_cho_khu_vuc_hoc_tap_tren_MDN ---
{{LearnSidebar}}
diff --git a/files/vi/orphaned/mdn/community/index.html b/files/vi/orphaned/mdn/community/index.html index 0242f58382..690dd2835e 100644 --- a/files/vi/orphaned/mdn/community/index.html +++ b/files/vi/orphaned/mdn/community/index.html @@ -1,6 +1,6 @@ --- title: Tham gia cộng đồng MDN -slug: MDN/Community +slug: orphaned/MDN/Community tags: - Hướng dẫn - MDN @@ -8,6 +8,7 @@ tags: - thông tin MDN - trang chính translation_of: MDN/Community +original_slug: MDN/Community ---
{{MDNSidebar}}
diff --git a/files/vi/orphaned/mdn/contribute/howto/create_an_mdn_account/index.html b/files/vi/orphaned/mdn/contribute/howto/create_an_mdn_account/index.html index 796e7df30b..2d645b68db 100644 --- a/files/vi/orphaned/mdn/contribute/howto/create_an_mdn_account/index.html +++ b/files/vi/orphaned/mdn/contribute/howto/create_an_mdn_account/index.html @@ -1,7 +1,8 @@ --- title: How to create an MDN account -slug: MDN/Contribute/Howto/Create_an_MDN_account +slug: orphaned/MDN/Contribute/Howto/Create_an_MDN_account translation_of: MDN/Contribute/Howto/Create_an_MDN_account +original_slug: MDN/Contribute/Howto/Create_an_MDN_account ---
{{MDNSidebar}}
diff --git a/files/vi/orphaned/mdn/contribute/howto/do_a_technical_review/index.html b/files/vi/orphaned/mdn/contribute/howto/do_a_technical_review/index.html index 61e3c1cda5..b59d67ad81 100644 --- a/files/vi/orphaned/mdn/contribute/howto/do_a_technical_review/index.html +++ b/files/vi/orphaned/mdn/contribute/howto/do_a_technical_review/index.html @@ -1,7 +1,8 @@ --- title: How to do a technical review -slug: MDN/Contribute/Howto/Do_a_technical_review +slug: orphaned/MDN/Contribute/Howto/Do_a_technical_review translation_of: MDN/Contribute/Howto/Do_a_technical_review +original_slug: MDN/Contribute/Howto/Do_a_technical_review ---
{{MDNSidebar}}
{{IncludeSubnav("/en-US/docs/MDN")}}
diff --git a/files/vi/orphaned/mdn/contribute/howto/do_an_editorial_review/index.html b/files/vi/orphaned/mdn/contribute/howto/do_an_editorial_review/index.html index 23410f87e7..e321f7cfa9 100644 --- a/files/vi/orphaned/mdn/contribute/howto/do_an_editorial_review/index.html +++ b/files/vi/orphaned/mdn/contribute/howto/do_an_editorial_review/index.html @@ -1,7 +1,8 @@ --- title: How to do an editorial review -slug: MDN/Contribute/Howto/Do_an_editorial_review +slug: orphaned/MDN/Contribute/Howto/Do_an_editorial_review translation_of: MDN/Contribute/Howto/Do_an_editorial_review +original_slug: MDN/Contribute/Howto/Do_an_editorial_review ---
{{MDNSidebar}}
{{IncludeSubnav("/en-US/docs/MDN")}}
diff --git a/files/vi/web/api/baseaudiocontext/createoscillator/index.html b/files/vi/web/api/baseaudiocontext/createoscillator/index.html index e0a786a181..1cef402134 100644 --- a/files/vi/web/api/baseaudiocontext/createoscillator/index.html +++ b/files/vi/web/api/baseaudiocontext/createoscillator/index.html @@ -1,7 +1,8 @@ --- title: AudioContext.createOscillator() -slug: Web/API/AudioContext/createOscillator +slug: Web/API/BaseAudioContext/createOscillator translation_of: Web/API/BaseAudioContext/createOscillator +original_slug: Web/API/AudioContext/createOscillator ---

{{ APIRef("Web Audio API") }}

diff --git a/files/vi/web/api/htmlorforeignelement/dataset/index.html b/files/vi/web/api/htmlorforeignelement/dataset/index.html index 44ce2c7393..ad2617ab56 100644 --- a/files/vi/web/api/htmlorforeignelement/dataset/index.html +++ b/files/vi/web/api/htmlorforeignelement/dataset/index.html @@ -1,6 +1,6 @@ --- title: HTMLElement.dataset -slug: Web/API/HTMLElement/dataset +slug: Web/API/HTMLOrForeignElement/dataset tags: - API - HTML DOM @@ -9,6 +9,7 @@ tags: - Thuộc tính - dataset translation_of: Web/API/HTMLOrForeignElement/dataset +original_slug: Web/API/HTMLElement/dataset ---
{{ APIRef("HTML DOM") }}
diff --git a/files/vi/web/api/navigator/sendbeacon/index.html b/files/vi/web/api/navigator/sendbeacon/index.html index a91adf05fd..1a48443fc9 100644 --- a/files/vi/web/api/navigator/sendbeacon/index.html +++ b/files/vi/web/api/navigator/sendbeacon/index.html @@ -1,6 +1,6 @@ --- title: Navigator.sendBeacon() -slug: Web/API/Navigator/sendBeacon-vi +slug: Web/API/Navigator/sendBeacon tags: - API - Beacon @@ -8,6 +8,7 @@ tags: - sendBeacon - web perfomance translation_of: Web/API/Navigator/sendBeacon +original_slug: Web/API/Navigator/sendBeacon-vi ---
Phương thức navigator.sendBeacon() gửi {{glossary("Asynchronous", "bất đồng bộ")}} 1 lượng nhỏ dữ liệu đến máy chủ (web server) thông qua giao thức {{Glossary("HTTP")}} .
diff --git a/files/vi/web/api/window/load_event/index.html b/files/vi/web/api/window/load_event/index.html index 130d6b9af0..ec1d576ff4 100644 --- a/files/vi/web/api/window/load_event/index.html +++ b/files/vi/web/api/window/load_event/index.html @@ -1,11 +1,12 @@ --- title: load -slug: Web/Events/load +slug: Web/API/Window/load_event tags: - DOM - Event - Sự kiện translation_of: Web/API/Window/load_event +original_slug: Web/Events/load ---

Sự kiện load có hiệu lực (được kích hoạt) khi các tài nguyên của một đối tượng hoặc các tài nguyên phụ thuộc vào đối tượng đó đã được tải nạp hoàn tất.

diff --git a/files/vi/web/css/css_box_model/introduction_to_the_css_box_model/index.html b/files/vi/web/css/css_box_model/introduction_to_the_css_box_model/index.html index 287d709494..88e2103617 100644 --- a/files/vi/web/css/css_box_model/introduction_to_the_css_box_model/index.html +++ b/files/vi/web/css/css_box_model/introduction_to_the_css_box_model/index.html @@ -1,11 +1,12 @@ --- title: Kiến thức cơ bản về CSS box model -slug: Web/CSS/CSS_Box_Model/Kien_thuc_co_ban_ve_css_box_model +slug: Web/CSS/CSS_Box_Model/Introduction_to_the_CSS_box_model tags: - CSS - CSS Box Model - Layout translation_of: Web/CSS/CSS_Box_Model/Introduction_to_the_CSS_box_model +original_slug: Web/CSS/CSS_Box_Model/Kien_thuc_co_ban_ve_css_box_model ---
{{CSSRef}}
diff --git a/files/vi/web/css/css_grid_layout/basic_concepts_of_grid_layout/index.html b/files/vi/web/css/css_grid_layout/basic_concepts_of_grid_layout/index.html index c1ebfbf5d5..07473396c2 100644 --- a/files/vi/web/css/css_grid_layout/basic_concepts_of_grid_layout/index.html +++ b/files/vi/web/css/css_grid_layout/basic_concepts_of_grid_layout/index.html @@ -1,9 +1,10 @@ --- title: Tổng quan về Bố cục Lưới -slug: Web/CSS/CSS_Grid_Layout/tong_quan_ve_grid_layout +slug: Web/CSS/CSS_Grid_Layout/Basic_Concepts_of_Grid_Layout tags: - ok translation_of: Web/CSS/CSS_Grid_Layout/Basic_Concepts_of_Grid_Layout +original_slug: Web/CSS/CSS_Grid_Layout/tong_quan_ve_grid_layout ---

Bố cục Lưới CSS đưa vào CSS một hệ thống lưới hai chiều. Các lưới có thể dùng để bố cục những vùng lớn trong trang hoặc những thành phần giao diện người dùng nhỏ. Bài viết này giới thiệu Bố cục Lưới CSS và hệ thống thuật ngữ nằm trong chi tiết kỹ thuật của Bố cục Lưới CSS Cấp 1. Những đặc trưng được thể hiện trong tổng quan này sẽ được giải thích chi tiết hơn trong phần còn lại của hướng dẫn.

diff --git a/files/vi/web/css/url()/index.html b/files/vi/web/css/url()/index.html index bcff92ebe2..cf6c32736c 100644 --- a/files/vi/web/css/url()/index.html +++ b/files/vi/web/css/url()/index.html @@ -1,8 +1,9 @@ --- title: url() -slug: Web/CSS/filter-function/url +slug: Web/CSS/url() translation_of: Web/CSS/url() translation_of_original: Web/CSS/filter-function/url +original_slug: Web/CSS/filter-function/url ---
{{cssref}}
diff --git a/files/vi/web/javascript/guide/grammar_and_types/index.html b/files/vi/web/javascript/guide/grammar_and_types/index.html index 64f63492d2..910d465526 100644 --- a/files/vi/web/javascript/guide/grammar_and_types/index.html +++ b/files/vi/web/javascript/guide/grammar_and_types/index.html @@ -1,7 +1,8 @@ --- title: Cú pháp lập trình -slug: Web/JavaScript/Guide/cu-phap-lap-trinh +slug: Web/JavaScript/Guide/Grammar_and_types translation_of: Web/JavaScript/Guide/Grammar_and_types +original_slug: Web/JavaScript/Guide/cu-phap-lap-trinh ---
{{jsSidebar("JavaScript Guide")}} {{PreviousNext("Web/JavaScript/Guide/Introduction", "Web/JavaScript/Guide/Control_flow_and_error_handling")}}
diff --git a/files/vi/web/javascript/guide/introduction/index.html b/files/vi/web/javascript/guide/introduction/index.html index f8fddcf666..84ada37f1c 100644 --- a/files/vi/web/javascript/guide/introduction/index.html +++ b/files/vi/web/javascript/guide/introduction/index.html @@ -1,10 +1,11 @@ --- title: Giới thiệu -slug: Web/JavaScript/Guide/Gioi-thieu +slug: Web/JavaScript/Guide/Introduction tags: - Guide - JavaScript translation_of: Web/JavaScript/Guide/Introduction +original_slug: Web/JavaScript/Guide/Gioi-thieu ---
{{jsSidebar("JavaScript Guide")}} {{PreviousNext("Web/JavaScript/Guide", "Web/JavaScript/Guide/Grammar_and_types")}}
diff --git a/files/vi/web/javascript/reference/errors/too_much_recursion/index.html b/files/vi/web/javascript/reference/errors/too_much_recursion/index.html index a4851c4f56..32084a7de0 100644 --- a/files/vi/web/javascript/reference/errors/too_much_recursion/index.html +++ b/files/vi/web/javascript/reference/errors/too_much_recursion/index.html @@ -1,11 +1,12 @@ --- title: 'InternalError: Quá nhiều đệ quy' -slug: Web/JavaScript/Reference/Errors/qua_nhieu_de_quy +slug: Web/JavaScript/Reference/Errors/Too_much_recursion tags: - JavaScript - Lỗi - Lỗi bên trong translation_of: Web/JavaScript/Reference/Errors/Too_much_recursion +original_slug: Web/JavaScript/Reference/Errors/qua_nhieu_de_quy ---
{{jsSidebar("Errors")}}
diff --git a/files/vi/web/javascript/reference/global_objects/array/sort/index.html b/files/vi/web/javascript/reference/global_objects/array/sort/index.html index 1d01c587e0..3b723bc8f9 100644 --- a/files/vi/web/javascript/reference/global_objects/array/sort/index.html +++ b/files/vi/web/javascript/reference/global_objects/array/sort/index.html @@ -1,7 +1,8 @@ --- title: Array.prototype.sort() -slug: Web/JavaScript/Reference/Global_Objects/Array/Sắp_xếp +slug: Web/JavaScript/Reference/Global_Objects/Array/sort translation_of: Web/JavaScript/Reference/Global_Objects/Array/sort +original_slug: Web/JavaScript/Reference/Global_Objects/Array/Sắp_xếp ---
{{JSRef}}
diff --git a/files/vi/web/javascript/reference/global_objects/error/index.html b/files/vi/web/javascript/reference/global_objects/error/index.html index a9733ce5b0..c1e957c6f0 100644 --- a/files/vi/web/javascript/reference/global_objects/error/index.html +++ b/files/vi/web/javascript/reference/global_objects/error/index.html @@ -1,11 +1,12 @@ --- title: Lỗi -slug: Web/JavaScript/Reference/Global_Objects/loi +slug: Web/JavaScript/Reference/Global_Objects/Error tags: - JavaScript - Lỗi - Tham chiếu translation_of: Web/JavaScript/Reference/Global_Objects/Error +original_slug: Web/JavaScript/Reference/Global_Objects/loi ---
{{JSRef}}
-- cgit v1.2.3-54-g00ecf