0

Bắt Đầu với Javascript (P3)

Trong phần trước chúng ta đã tìm hiểu về một số cú pháp cơ bản và khai báo biến. Trong phần này chúng ta sẽ tìm hiểu về các kiểu dữ liệu và literals trong javaScript.

1. Data structures and types

Data types

Các tiêu chuẩn ECMAScript mới nhất xác định bảy loại dữ liệu:

Sáu kiểu dữ liệu nguyên thủy:

  • Boolean: true và false.
  • null: là từ khóa đặc biệt biểu thị một giá trị null. Bởi vì JavaScript là trường hợp nhạy cảm, null là không thể giống Null, NULL, hoặc bất kỳ biến khác.
  • undefined một thuộc tính cao nhất mà giá trị là không xác định.
  • Number: là kiểu số ví dụ: 42 hoặc 3.14159.
  • String: kiểu chuỗi ví dụ: "Howdy"
  • Symbol (trong ECMAScript 2015): là một kiểu dữ liệu mà trường hợp là unique và immutable.

Và Object

Mặc dù số lượng kiểu dữ liệu ít nhưng nó đủ để bạn có thể thực hiện các chức năng cho ứng dụng của mình. Objects and functions là 2 yếu tố cơ bản khác trong ngôn ngữ. Bạn có thể nghĩ về các object như nơi chứa các giá trị đc đặt tên và các functions như các phương thức mà ứng dụng của bạn cần thực hiện.

Data type conversion

JavaScript là một ngôn ngữ dynamically typed. Điều đó có nghĩa là bạn không phải xác định kiểu dữ liệu của một biến khi bạn khai báo, và các kiểu dữ liệu được chuyển đổi tự động khi cần thiết trong quá trình thực thi script. 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 cho cùng một biến một giá trị string, ví dụ:

answer = 'Thanks for all the fish...';

Vì javaScript là ngôn ngữ kiểu tự động, nên ví dụ trên không hề sinh ra một error nào.

Trong biểu thức liên quan đến các giá trị số và string với toán tử (+), javascript sẽ chuyển đổi giá trị số thành các chuỗi. Hãy xem ví dụ sau:

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

Trong các lệnh liên quan đến các toán tử khác, javaScript không thể chuyển đổi các giá trị số thành chuỗi. Ví dụ:

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

Converting strings to numbers

Trong trường hợp một giá trị đại diện cho một số trong bộ nhớ như là một chuỗi, có những phương thức để chuyển đổi:

parseInt sẽ chỉ trả lại toàn bộ số, vì vậy việc sử dụng nó là giảm bớt cho số thập phân. Ngoài ra, một phương pháp hay nhất cho parseInt là luôn luôn bao gồm tham số radix. Tham số radix được sử dụng để chỉ định hệ thống số nào sẽ được sử dụng.

Một phương pháp khác để lấy ra một số từ một chuỗi là với toán tử + (unary plus):

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

2. Literals

Bạn sử dụng các ký tự biểu diễn cho các giá trị trong JavaScript. Đây là các giá trị cố định, chứ không phải các biến, mà bạn thực sự cung cấp trong script của bạn. Phần này mô tả các loại literals sau đây:

  • Array literals
  • Boolean literals
  • Floating-point literals
  • Integers
  • Object literals
  • RegExp literals
  • String literals

Array literals

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

Ví dụ sau tạo ra mảng coffees với ba phần tử và chiều dài là ba:

var coffees = ['French Roast', 'Colombian', 'Kona'];

Nếu một mảng được tạo ra bằng cách sử dụng một chữ trong một script cấp cao, JavaScript sẽ diễn giải mảng mỗi khi nó đánh giá biểu thức chứa mảng literal. Ngoài ra, một literal được sử dụng trong một hàm được tạo ra mỗi lần chức năng được gọi.

Khi mà một mảng có các dấu phẩy xen vào, ví dụ mảng fish dưới đây:

var fish = ['Lion', , 'Angel'];

Mảng trên có 2 phần tử có giá trị và một phần tử rỗng. fish[0] = "Lion", fish[1] sẽ là undefined, và fish[2] = "Angel".

Nếu dấu phẩy đc thêm vào cuối thì nó sẽ đc bỏ qua. Ví dụ sau mảng sẽ có 3 phần tử:

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

Trong ví dụ sau, chiều dài của mảng là bốn, và myList [0] và myList [2] đang thiếu.

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

Trong ví dụ sau, chiều dài của mảng là bốn, và myList [1] và myList [3] đang thiếu. Chỉ dấu phẩy cuối cùng được bỏ qua.

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

Boolean literals

Kiểu boolean có 2 giá trị: true và false

Integers

Số nguyên có thể được thể hiện bằng chữ số thập phân (base 10), hệ thập lục phân (base16), bát phân (base 8) và nhị phân (base 2).

  • Số nguyên phân số thập phân bao gồm một chuỗi các chữ số không có số 0 đứng đầu.
  • Bắt đầu 0 trên một chữ số nguyên, hoặc dẫn 0o (hoặc 0O) cho biết nó là trong bát phân. Số nguyên Octal chỉ có thể chứa các chữ số 0-7.
  • Bắt đầu 0x (hoặc 0X) cho thấy là hệ thập lục phân. Số nguyên thập lục phân có thể bao gồm các chữ số (0-9) và các chữ cái a-f và A-F.
  • Bắt đầu 0b (hoặc 0B) chỉ ra là hệ nhị phân. Các số nguyên nhị phân có thể bao gồm các chữ số chỉ bằng 0 và 1.

Ví dụ:

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

Object literals

Sau đây là một ví dụ của một object literal. Phần tử đầu tiên của đối tượng Car định nghĩa một thuộc tính, myCar, và gán cho nó một chuỗi mới "Saturn"; Phần tử thứ hai, thuộc tính getCar, được gán trực tiếp kết quả gọi hàm (carTypes ("Honda")); Phần tử thứ ba, thuộc tính special, sử dụng một biến hiện có (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

Ngoài ra, bạn có thể sử dụng một chữ số hoặc chuỗi ký tự cho tên của một thuộc tính hoặc lồng một đối tượng bên trong cái khác. Ví dụ sau sử dụng điều này:

var car = { manyCars: {a: 'Saab', 'b': 'Jeep'}, 7: 'Mazda' };

console.log(car.manyCars.b); // Jeep
console.log(car[7]); // Mazda

Tên thuộc tính của object có thể là string bất kỳ, bao gồm string rỗng. Nếu tên thuộc tính sẽ không là một định danh JavaScript hợp lệ hoặc số, nó phải được đặt trong dấu ngoặc kép. Tên thuộc tính không phải là số nhận dạng hợp lệ cũng không thể được truy cập như là một thuộc tính dấu chấm (.), Nhưng có thể được truy cập và đặt bằng ký hiệu 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!

RegExp literals

Một regex literal là một mẫu kèm theo giữa các dấu gạch chéo. Dưới đây là một ví dụ về một cú pháp regex literal.

var re = /ab+c/;

String literals

Một chuỗi ký tự là không hoặc nhiều ký tự được bao gồm trong dấu ngoặc kép (") hoặc đơn ('). Chuỗi phải được phân cách bởi dấu ngoặc kép cùng loại, có nghĩa là, hoặc là cả hai dấu ngoặc đơn hoặc cả hai dấu ngoặc kép. Sau đây là ví dụ về chuỗi ký tự:

'foo'
"bar"
'1234'
'one line \n another line'
"John's cat"

Bạn có thể gọi bất kỳ phương thức của String object nào từ một chuỗi ký tự. JavaScript tự động chuyển đổi từ string thành một đối tượng string tạm thời để gọi phương thức sau đó loại bỏ đối tượng đó. Bạn cũng có thể sử dụng thuộc tính String.length với một chuỗi string. ví dụ:

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

Using special characters in strings

Ngoài các ký tự bình thường, bạn cũng có thể bao gồm các ký tự đặc biệt trong các chuỗi, như thể hiện trong ví dụ sau.

'one line \n another line'

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

Column 1 Column 2
\0 Null Byte
\b Backspace
\f Form feed
\n Dòng mới
\r Carriage return
\t Tab
\v Tab dọc
' Dấu phẩy hoặc trích dẫn đơn
" Dấu ngoặc kép
\ Ký tự dấu gạch chéo ngược
\XXX Ký tự được mã hóa Latin-1 xác định tối đa ba chữ số thập phân XXX giữa 0 và 377. Ví dụ: \ 251 là trình tự bát phân
\xXX Ký tự được mã hoá Latin-1 xác định bởi hai số thập lục phân XX giữa 00 và FF. Ví dụ: \ xA9 là dãy số thập lục phân
\uXXXX Ký tự Unicode được chỉ định bởi bốn chữ số thập lục phân XXXX. Ví dụ: \ u00A9 là chuỗi Unicode
\u{XXXXX} Cho ví dụ: \u{2F804}

Escaping characters

Đối với các ký tự không được liệt kê trong bảng, dấu gạch chéo ngược trước đó sẽ bị bỏ qua nhưng cách sử dụng này không được dùng nữa và cần tránh.

Bạn có thể chèn dấu ngoặc kép bên trong một chuỗi bằng cách sử dụng dấu gạch chéo ngược. Đây được gọi là thoát khỏi dấu ngoặc kép. 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 mã trên là:

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

Để bao gồm một dấu gạch chéo ngược trong một chuỗi, bạn phải thoát khỏi ký tự dấu gạch chéo ngược. Ví dụ, để chỉ định đường dẫn tập tin c: \ temp vào một chuỗi, sử dụng như sau:

var home = 'c:\\temp';

Bạn cũng có thể thoát khỏi các ngắt dòng bằng cách trước bằng dấu gạch chéo ngược. Dấu gạch chéo ngược và ngắt dòng đều được gỡ bỏ 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ể đóng lại bằng cách thêm dòng thoát thoát và thoát dòng thoát ở cuối mỗi dòng:

var poem = 
'Roses are red,\n\
Violets are blue.\n\
Sugar is sweet,\n\
and so is foo.'

Trên đây là một số kiết thức cơ bản. Cảm ơn bạn đã theo dõi bài viết. Mong rằng nó có thể giúp ich cho bạn!

Tham Khảo: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Grammar_and_types


All rights reserved

Viblo
Hãy đăng ký một tài khoản Viblo để nhận được nhiều bài viết thú vị hơn.
Đăng kí