Sunday, September 17, 2017

Javascript syntax

Values (giá trị)

Có 2 loại gía trị trong JS:
  1. Fixed value (các gía trị đã fix) còn được gọi là Literal
    1. number: khai báo chỉ được phép sử dụng số và dấu chấm thập phân
      1. tất cả một gía trị kiêu number đều là số thực 64 bit
      2. NaN: typeof NAN tra về kiểu number
      3. NaN có ý nghĩa là số không hợp lệ
      4. Infinity và -Infinity có nghĩa là gía trị nằm ngoài gioi hạn của kiểu number
    2. string: khai báo sử dụng nháy kép " hoặc nháy đơn '
      1. thuộc tính length để biết độ dài của string
      2. sử dụng escapse character \  => để chèn những ký tự đặc biệt vào string: var s = 'It\'s alright';
    3. boolean: chỉ có 2 giá trị true false
      1. sử dụng hàm Boolean(x) để xác định true false
      2. các toán tử so sánh ==  === >   <
    4. undefined: có giá trị là undefined
    5. object: 
      1. kiểu dữ liệu mảng cũng là 1 object ["a",1,2,true,false,undefined,1e-4]
      2. kiểu null cũng là 1 object: typeof null sẽ trả về object
    6. function: typeof function myFunc(){} sẽ trả về function
  2. Variable value (các gía trị có thể thay đổi) còn được gọi là Variable
    1. khai báo sử dụng từ khóa var và định danh (id): var x =6;
    2. gía trị mặc định khi không gán gía trị cho x là undefined
    3. khai báo định danh cho biến: NÊN sử dụng Lower Camel Case (firstName, lastName,interCity)
    4. JS sử dụng kiểu dữ liệu động (biến x ở trên có thể gán bất kỳ giá trị của bất kỳ KDL nào mà không gây lỗi)
    5. biến có 2 loại phạm vi: local và global
      1. biến được khai báo trong 1 function là local (var x=9;)
      2. biến khai báo mà không sd từ khóa var là biến global (x=9;) bất kể nó đươc khai báo ở trong một hàm

Operator (toán tử)

  • 7 loai: + - * / % ++ --
  • toán tử gán =
  • so sánh:
    • == equal to
    • === equal value and equal type
    • != not equal
    • !==  not equal value or not equal type
    • variablename = (condition) ? value1:value2 
  • logic:
    • && and
    • || or
    • ! not
  • type
    • typeof X: trả về kiểu của variable
    • instanceof trả về true nếu kiểu của đối tượng là đúng
  • thứ tự ưu tiên các toán tử:
    • nhân chia trước, cộng trừ sau (phép nhân và phép chia cùng thứ tự ưu tiên, phép cộng và phép trừ cùng thứ tự ưu tiên)
    • trong 1 biểu thức nếu các toán t ử có cùng thứ tự ưu tiên => thực hiện biểu thức từ trái sang phải. (Vd: 6/2*3 trả về 3*3, không trả về 6/6)
    • toán tử ( và ) là có thứ tự ưu tiên cao nhất

Expressions (biểu thức)


  • cộng chuỗi : "str1"+"str2" thực ra là nối chuỗi
  • trừ chuỗi: "str1"-"1" trả về NaN  (typeof NAN trả về number )
  • cộng số: 5+6 trả về 11
  • cộng chuỗi và số sẽ trả về chuỗi
    • "5"+ 2 + 3 sẽ trả về "523"
    •  2 + 3 + "5" sẽ trả về "55"

Keywords (từ khóa)

Để định nghĩa hành động sẽ được JS thực hiện


Let this long package float, 
Goto private class if short.
While protected with debugger case,  
Continue volatile interface.
Instanceof super synchronized throw, 
Extends final export throws.  

Try import double enum?  
- False, boolean, abstract function, 
Implements typeof transient break!
Void static, default do,  
Switch int native new. 
Else, delete null public var 
In return for const, true, char
…Finally catch byte.

Comments

  1. sử dụng double slashes // code
  2. sử dụng /* code */ 

Identifiers (định danh)

sử dụng để đặt tên cho
  • biến variable
  • từ khóa keyword
  • hàm function
  • nhãn label
Quy tắc đặt tên:
  • ký tự đầu tiên: chữ, dấu $, dấu _
  • các ký tự sau: chữ, dấu $, dấu _ , số
(để gíup JS phân biệt được identifier và number)

JavaScript is Case Sensitive

Vì thế mà JS sẽ không xem VAR hay Var là một từ khóa như var

Statement (câu lệnh) 

sử dụng dấu ; để ngăn cách các câu lệnh
sử dụng {} để mô tả 1 code block

Function

Cú pháp:
function name(parameter1, parameter2, parameter3) {
    code to be executed

 return something; (có thể không có return cũng được)
}

Gọi hàm:
name(argument1,argument2,argument3);
Gọi ra nội dung hàm:
name; 

Object

Gán biến person cho một object
var person = {
    firstName: "John",
    lastName : "Doe",
    id       : 5566,
    fullName : function() {
       return this.firstName + " " + this.lastName;
    }
};
person.firstName;
person["firstName"];
person.fullName(); sẽ trả về "John Doe"
person.fullName; sẽ trả về định nghĩa hàm function() { return this.firstName + " " + this.lastName; }

so sánh 2 đối tượng (x==y) và (x===y) luôn trả về false (do x và y luôn khác gía trị, mặc dù cùng kiểu là object)

Event

<element event='some JavaScript'>
 Các loại event phổ biến:

Event Description
onchange An HTML element has been changed
onclick The user clicks an HTML element
onmouseover The user moves the mouse over an HTML element
onmouseout The user moves the mouse away from an HTML element
onkeydown The user pushes a keyboard key
onload The browser has finished loading the page
Có thể thay đổi nôij dung của chính đối tượng hiện tại sử dụng: this.innerHTML


Array

khai báo
var cars=['volvo','toyota','chervolet'];
truy nhập
cars[0] cars[1] hoặc cars
typeof cars trả về kiểu object
cars.length trả về độ dài của mảng

phân biệt array và object
array sử dụng numbered indexes
object sử dụng named indexes

để giup phân biệt array và object trong code, có 3 cách
1. sự dụng hàm Arrays.isArray(cars);
2. tạo hàm mới
function isArray(x){return x.constructor.toString().indexOf("Array") > -1;}
3. sư dụng cars instanceof Array;

Một số array function:
pop() push() => biến array thành stack, thêm bơt phần tử vào cuối array
shift() unshift() => thêm bớt phần tử vào đầu array
slice(start,remove_nunber,insert_elements); => để thêm và xóa phần tử vào giua array
arr1.concat(arr2,arr3); nối2 mảng

Sắp xếp mảng
sort() se sắp xếp theo thứ tự alphabet
sort(function(a,b){return a-b;}) sẽ sd một hàm compare để sắp xếp
reverse() đảo ngược lại thứ tự các thành phần trong array

Conditions

if(dk1){}
elseif(dk2){}
else{//th còn lại}

switch(val):
case 1: break;
case 2: break;
default:...

switch (new Date().getDay()) {
    case 4:
    case 5:
        text = "Soon it is Weekend";
        break;
    case 0:
    case 6:
        text = "It is Weekend";
        break;
    default:
        text = "Looking forward to the Weekend";
}

Loops

for
for (statement 1; statement 2; statement 3) {
    code block to be executed
}

s1: câu lệnh được thực hiện trước khi thực hiện vòng lặp
s2: câu lệnh điều kiện để thực hiện lăp
s3: câu lệnh được thực hiện sau mỗi vòng lặp 

for (i = 0; i < 5; i++) {
    text += "The number is " + i + "<br>";
}


for in
var person = {fname:"John", lname:"Doe", age:25};
var text = "";
var x;
for (x in person) {
    text += person[x]; // trả về John Doe 25

}
kiểm tra điều kiện condition trước khi bắt đầu vòng lặp
 while (condition) {
    code block to be executed
}
 thực hiện vòng lặp 1 lần, rồi kiểm tra điều kiện condition trước khi thực hiện mỗi vòng lặp mới
do {
    code block to be executed
}
while (condition);

break; // nhảy ra khỏi vòng lặp
continue; // nhảy đến lần lặp tiếp theo

Type conversion


5 kiểu dữ liệu có chứa giá tri
number
string
boolean
function
object
3 kiểu dữ liệu trả về object với toán tử typeof
Object
Array
Date
2 kiểu dữ liệu không chứa giá trị
null
undefined

toán tử typeof
typeof "John"                 // Returns "string" typeof 3.14                   // Returns "number" typeof NaN                    // Returns "number" typeof false                  // Returns "boolean" typeof [1,2,3,4]              // Returns "object" typeof {name:'John', age:34 // Returns "object"typeof new Date()             // Returns "object"typeof function () {}         // Returns "function" typeof myCar                  // Returns "undefined" * typeof null                   // Returns "object"  
typeof undefined                    // Returns "undefined"
 vì thế không thể sử dụng toán tử typeof để kiểm tra 1 đối tượng là Object hay Array. mà phải sử dụng thuộc tính constructor


"John".constructor                // Returns function String()  {[native code]} (3.14).constructor                // Returns function Number()  {[native code]} false.constructor                 // Returns function Boolean() {[native code]} [1,2,3,4].constructor             // Returns function Array()   {[native code]} {name:'John',age:34}.constructor  // Returns function Object()  {[native code]} new Date().constructor            // Returns function Date()    {[native code]} function () {}.constructor        // Returns function Function(){[native code]}
kiểm tra 1 đối tượng có phải là Array không
function isArray(myArray) {
    return myArray.constructor.toString().indexOf("Array") > -1;
}
hoặc
function isArray(myArray) {
    return myArray.constructor === Array;
}
 


Error

try {
    Block of code to try

    throw something;// có thể thêm throw vào trong code
}
catch(err) {
    Block of code to handle errors
}
finally {
    Block of code to be executed regardless of the try / catch result


JS có một  error object được build sẵn, có 2 thuộc tính sau
name: loại lỗi
message: nội dung lỗi

có các loại lỗi chuẩn sau
Error NameDescription
EvalErrorAn error has occurred in the eval() function
RangeErrorA number "out of range" has occurred
ReferenceErrorAn illegal reference has occurred
SyntaxErrorA syntax error has occurred
TypeErrorA type error has occurred
URIErrorAn error in encodeURI() has occurred
 

No comments:

Post a Comment