kiến thức Javascript cho người mới bắt đầu

Thím ơi cái này có cách nào cập nhật được chiều cao, cân nặng không? Mình mới học tới array và object muốn thử áp dụng nhưng chỉ hiện ở console.log còn function không chạy. :)

JavaScript:
const bmi = {
  firstName: ["Mark", "John"],
  lastName: ["Miller", "Smith"],
  mass: [78, 92],
  height: [1.69, 1.95],
  calcBMI: function () {
    this.bmiMark = this.mass[0] / this.height[0] ** 2;
    this.bmiJohn = this.mass[1] / this.height[1] ** 2;
    return;
  },
  getSummary: function () {
    this.result = `${this.firstName[0]}'s BMI: ${Math.floor(
      this.bmiMark
    )}, is ${this.bmiMark > this.bmiJohn ? "higher" : "lower"} than ${
      this.firstName[1]
    }'s BMI: ${Math.floor(this.bmiJohn)}.`;
    return;
  },
};

bmi.calcBMI();
bmi.getSummary();
// console.log(bmi.bmiMark, bmi.bmiJohn);
console.log(bmi.result);

bmi.mass.pop();
bmi.mass.push(130);
console.log(bmi.mass);

console.log(bmi.result);
 
Thím ơi cái này có cách nào cập nhật được chiều cao, cân nặng không? Mình mới học tới array và object muốn thử áp dụng nhưng chỉ hiện ở console.log còn function không chạy. :)

JavaScript:
const bmi = {
  firstName: ["Mark", "John"],
  lastName: ["Miller", "Smith"],
  mass: [78, 92],
  height: [1.69, 1.95],
  calcBMI: function () {
    this.bmiMark = this.mass[0] / this.height[0] ** 2;
    this.bmiJohn = this.mass[1] / this.height[1] ** 2;
    return;
  },
  getSummary: function () {
    this.result = `${this.firstName[0]}'s BMI: ${Math.floor(
      this.bmiMark
    )}, is ${this.bmiMark > this.bmiJohn ? "higher" : "lower"} than ${
      this.firstName[1]
    }'s BMI: ${Math.floor(this.bmiJohn)}.`;
    return;
  },
};

bmi.calcBMI();
bmi.getSummary();
// console.log(bmi.bmiMark, bmi.bmiJohn);
console.log(bmi.result);

bmi.mass.pop();
bmi.mass.push(130);
console.log(bmi.mass);

console.log(bmi.result);
Thím thử console.log(bmi.calcBMI()) rồi xem, kiểu gì cũng ra undefined, vì thìm có return ra gì đâu. Khi không gắn value cho biến thì type + value của biến đó mặc định là undefined, tương tự function k return ra gì thì mặc định giá trị nó trả về là undefined
 
Last edited:
5. Toán tử
Ở bài này chúng ta sẽ học về toán tủ, kiến thức bài này khá là cơ bản nhưng áp dụng rất nhiều trong code. "Toán tử''- cụm từ này chắc các bác đã từng nghe, nó xuất hiện khá nhiều trong toán học. Vì sao ở trên e nói là đơn giản? Vì nó chỉ là phép tính cơ bản trong lập trình, ví dụ như cộng trừ 2 biến, chia lấy dư,...
Trong bài này chúng ta chỉ học về 4 loại toán tử :
  • Toán tử số học
  • Toán tử gán
  • Toán tử so sánh
  • Toán tử logic
Còn có 1 loại là toán tử điều kiện, e sẽ nói ở phần 8.Câu lệnh điều kiện

Nào bây giờ ta đến với loại thứ nhất là toán tử số học
cac-loai-toan-tu-so-hoc-trong-javascript.jpg

Nhìn vào bảng trên chắc hẳn các bác đã biết use ra sao rồi đúng k? E sẽ chỉ nói về 2 cái cuối toán tử ++ và -- và bổ sung thêm 1 toán tử số học đc update ở phiên bản ES6. Ở ngôn ngữ nào cũng vậy, nếu bác nào k học kĩ 2 toán tử này sẽ rất hay có sai lầm.
Hai toán tử trên có tên gọi khác là "Tiền tố, hậu tố''. Có tên gọi như vậy vì có 2 cách đặt toán tử, thứ nhất là đặt phía trước biến ++a ( tiền tố) và đặt sau biến(hậu tố) a++
Để dễ hiểu, e sẽ nói chi tiết toán tử ++ còn toán tử -- thì tương tự.
Trước hết, ta cần hiểu ++ nghĩa là gì? Toán tử ++ đơn giản chỉ là cộng thêm biến thêm 1 đơn vị
Ví dụ
1664819884634.png

Từ ví dụ trên, ta thấy a++ hay ++a đều tăng biến a thêm 1 đơn vị, vậy sự khác nhau giữa tiền tố và hậu tố là gì mà khiến nhiều người hay mắc sai lầm như vậy.
1664853170550.png

Trên đây e có 2 đoạn code, đều nhận giá trị đầu vào(input) như nhau. Ở dòng thứ 3 mỗi đoạn, khi ta log a ra thì đều cho ra 1 kết quả là 6. Ở dòng cuối đều thực hiện phép là sử dụng toán tử ++ rồi trù cho biến b nhưng kết quả thu đc lại khác nhau. Từ đó, ta thấy đc sự khác nhau giữa tiền tố và hậu tố sẽ xuất hiện trong các phép tính biểu thức.
+ Tiền tố: thực hiện toán tử ++ trước khi thực hiện biểu thức tính toán. Trong toán học có thứ tự ưu tiên các phép toán, thì thằng tiền tố này nó đứng đầu, thực hiện cộng 1 giá trị( value) trước rồi làm gì thì làm
+ Hậu tố: Trái ngược lại với thằng anh là tiền tố, thằng em này nó chẳng có ý nghĩa gì trong biểu thức. Nhưng khi kết thúc biểu thức, giá trị của a sẽ đc cộng thêm 1.
Nói tóm lại, nếu lấy các phép tính biểu thức làm trung gian thì thằng tiền tố sẽ thực hiện cộng 1 giá trị trước, còn thằng hậu sẽ cộng 1 giá trị sau khi kết thúc biểu thức.
Tương tụ với toán tử --, toán tử này các bác tự code và trải nghiệm

Ở phiên bản ES6, chúng ta đc update thêm 1 toán tử là toán tử **, đấy là toán tử để tính lũy thừa của 1 biến. Các bác tự hiểu nó như dấu ^ trong toán học ấy ( 5 * *3 = 5^3). Có 2 cách để use toán tử này
1664853914436.png

Bổ sung: Em quên mất ở toán tử số học này còn phép toán cộng chuỗi(string). Thiếu xót thì bổ sung thôi chứ skip thì vô tâm quá.
1664854274295.png

Ở bài string e có nói, trong js khoảng trắng cũng là 1 kí tự, nên ở firstName sau giá trị Truong e có để trắng 1 kí tự, đó là lí do vì sao khi log ra ta đc các kết quả ở dòng 3, 4, 5 nó cách nhau.
+ Cộng string với string cho ta kết quả như cộng 2 number, cái này k có gì để nói
+ Đối với cộng string với number ( hay ngược lại), trước khi thực hiện phép cộng thì sẽ chuyển kiểu number sang string rồi cộng như 2 string với nhau. Như trong sinh học về gen, thằng string có gen mạnh hơn number, khi 2 thằng này kết hợp với nhau ( cộng) thì ta đc kết quả sẽ mang gen thằng trội là thằng string( ở đây ta nói là kiểu dữ liệu - type)

Tiếp theo, ta sẽ đến với loại toán tử thứ 2 là toán tử gán
cac-loai-toan-tu-gan-trong-javascript.jpg

Phần này e cũng chẳng có gì nói nhiều, những điều cần học ở trên img hết. Ở ES6 có update toán tử *, nên phép gán sẽ có thêm phép *=, cái này e đã lấy ví dụ ở trên.

Loại thứ 3 là toán tử so sánh
cac-loai-toan-tu-so-sanh-trong-javascript.jpg

Cũng giống như trong toán học, lập trình cũng có so sánh bằng, hơn, kém, khác. Về 2 cái toán tử so sánh bằng e đã nói rất kĩ ở bài 4. String và Number , sự khác nhau của 2 cái đó, vì sao lại tách riêng 2 cái mà k gộp làm 1.
Trong lập trình hay đời sống cũng , khi so sánh khác(phủ định 1 cái gì đó) ta dùng dấu !. Thật sự đoạn này cũng chẳng có gì nói sâu cả, các bác cứ nhìn theo bảng rồi code lại thì mới hiểu + nhớ lâu đc. Lập trình học mỗi lí thuyết thì chẳng khác nào nước đổ.

Loại cuối cùng là toán tử logic
cac-loai-toan-tu-logic-trong-javascript.jpg


Phần này chỉ có 3 toán tử cần phải học là && (và), || (hoặc), !(phủ định).
Toán tử && : Nếu tất cả cả các biểu thức đúng return về true
Toán tử ||: Chỉ cần ít nhất 1 biểu thức đúng sẽ return về true

Bài này e nghĩ sẽ end ở đây thôi, e có tìm hiểu thêm mà cũng chẳng thấy có gì để nói sâu. Ở ES6 nó còn update thêm 1 vài toán tử mà e chưa nói, nhưng e nghĩ chưa cần học vội. Nếu bác nào muốn nghiên cứu thêm thì có thể lên gg. IT là ngành tài liệu mở mà

 

Attachments

  • 1664818335562.png
    1664818335562.png
    7.2 KB · Views: 78
  • 1664851496524.png
    1664851496524.png
    9.4 KB · Views: 71
Last edited:
Thím ơi giải thích ngắn gọn giùm mình 3 cái này với.
  • First-class functions
  • Higher-order function
  • Pure functions and side-effects
  • First-class functions: Nhận 1 đối số
  • Higher-order function: Nhận 1 tham số là hàm, kiểu na ná callback
    Hàm A nhận 1 đối số, hoặc không
    Hàm B nhận hàm A làm tham số
    A đc gọi là first-class fn
    B gọi là higher-order fn
  • Pure functions: Đầu vào cùng 1 giá trị, run bao nhiêu lần thì hàm vẫn trả ra 1 giá trị như nhau
  • side-effects: Cái này e cũng k chắc có đúng lắm hay không, nó như tác dụng phụ ấy, nó làm sai lệch đi 1 cái gì đó, ở đây là hàm. Dẫn tới 1 loại kết quả k như ý.
Em nghĩ 2 cái đầu cũng k cần học làm gì, hiểu callback là đc.
 
Học xong Javascript ES6 và thêm 1 khóa NodeJs nữa ghi vào CV xong nộp lên ÍT việc mà không 1 cty nào nó gọi nghĩ nó chán
 
  • First-class functions: Nhận 1 đối số
  • Higher-order function: Nhận 1 tham số là hàm, kiểu na ná callback
    Hàm A nhận 1 đối số, hoặc không
    Hàm B nhận hàm A làm tham số
    A đc gọi là first-class fn
    B gọi là higher-order fn
  • Pure functions: Đầu vào cùng 1 giá trị, run bao nhiêu lần thì hàm vẫn trả ra 1 giá trị như nhau
  • side-effects: Cái này e cũng k chắc có đúng lắm hay không, nó như tác dụng phụ ấy, nó làm sai lệch đi 1 cái gì đó, ở đây là hàm. Dẫn tới 1 loại kết quả k như ý.
Em nghĩ 2 cái đầu cũng k cần học làm gì, hiểu callback là đc.
Thím cho em hỏi 2 câu
  1. Hai cách viết ở cái hình, kiểu nào đúng hơn
  2. Hiện giờ với function, loop(for/while), if/switch: có thể xắp xếp 1 Array lộn xộn thành thứ tự từ lớn tới nhỏ được không? code ở dưới :(



JavaScript:
const bmi = {
  firstName: ["Mark", "John"],
  lastName: ["Miller", "Smith"],
  mass: [78, 92, 99],
  height: [1.69, 1.95, 1.85],
  calcBMI: function () {
    for (i = 0; i < this.mass.length; i++) {
      this.bmiMark = Math.trunc(this.mass[i] / this.height[i] ** 2);
      // this.bmiJohn = Math.trunc(this.mass[i] / this.height[i] ** 2);
      this.bmiResult.push(this.bmiMark);
    }
    return this.bmiResult;
  },
  bmiResult: [],
  // FIXME
  // getSummary: function () {
  //   this.bmiSummary = `${this.firstName[0]}'s BMI: ${this.bmiMark[i]}, is ${
  //     this.bmiMark > this.bmiJohn ? "higher" : "lower"
  //   } than ${this.firstName[1]}'s BMI: ${Math.floor(this.bmiResult[i++])}.`;
  //   return this.bmiSummary;
  // },
  // sortBMI: function () {
  //   if (this.bmiResult[i] > this.bmiResult[i]) {
  //     ketQua.unshift(this.bmiResult);
  //   }
  //   return;
  // },
};

// bmi.mass.pop();
// bmi.mass.push(10);

bmi.calcBMI();
console.log(bmi.bmiResult);
 
Thím cho em hỏi 2 câu
  1. Hai cách viết ở cái hình, kiểu nào đúng hơn
  2. Hiện giờ với function, loop(for/while), if/switch: có thể xắp xếp 1 Array lộn xộn thành thứ tự từ lớn tới nhỏ được không? code ở dưới :(



JavaScript:
const bmi = {
  firstName: ["Mark", "John"],
  lastName: ["Miller", "Smith"],
  mass: [78, 92, 99],
  height: [1.69, 1.95, 1.85],
  calcBMI: function () {
    for (i = 0; i < this.mass.length; i++) {
      this.bmiMark = Math.trunc(this.mass[i] / this.height[i] ** 2);
      // this.bmiJohn = Math.trunc(this.mass[i] / this.height[i] ** 2);
      this.bmiResult.push(this.bmiMark);
    }
    return this.bmiResult;
  },
  bmiResult: [],
  // FIXME
  // getSummary: function () {
  //   this.bmiSummary = `${this.firstName[0]}'s BMI: ${this.bmiMark[i]}, is ${
  //     this.bmiMark > this.bmiJohn ? "higher" : "lower"
  //   } than ${this.firstName[1]}'s BMI: ${Math.floor(this.bmiResult[i++])}.`;
  //   return this.bmiSummary;
  // },
  // sortBMI: function () {
  //   if (this.bmiResult[i] > this.bmiResult[i]) {
  //     ketQua.unshift(this.bmiResult);
  //   }
  //   return;
  // },
};

// bmi.mass.pop();
// bmi.mass.push(10);

bmi.calcBMI();
console.log(bmi.bmiResult);
1.Chẳng có cái nào tốt, hay hơn cái nào cả. Tùy vào từng case chọn cái phù hợp mà áp dụng
2. Dùng 2 lần if cũng có thể sắp xếp mảng. Sort thì có rất nhiều cách sắp xếp, nhưng chọn cách nào tối ưu nhất. Đề cử thím đọc thêm vào hashMap()
 
Back
Top