- vừa được xem lúc

Phỏng vấn Javascript - Điều kiện (a==1 && a==2 && a==3) có thể đúng hay không?

0 0 14

Người đăng: Hàn Lập Đạo tổ

Theo Viblo Asia

Series các bài viết ngắn chia sẻ Tips Javascript giúp code nhanh và kiến thức phỏng vấn Javascript.

Meta Crew

Câu hỏi

Nếu ta dùng if với điều kiện (a==1 && a==2 && a==3) thì có thể đúng hay không? Câu trả lời là có đối với Javascript. Đáp áp của câu hỏi như sau:

const a = { i: 1, valueOf: function () { return this.i++; }
} if(a == 1 && a == 2 && a == 3) { // true console.log('Hello World!');
}

Chạy thử đoạn code trên Console và bạn sẽ nhận được kết quả 'Hello World!'.

Vậy làm thế nào?

Hai từ khóa để ta hiểu được tại sao biểu thức trên lại đúng là:

  • Loose Equality (==)
  • Object’s valueOf() function

Loose Equality

Trong JS khi ta thực hiện so sánh hai biến với == thì hai biến đó được chuyển về dạng common type trước khi so sánh. Đối với object thì công việc đó được thực hiện với hàm valueOf(). Ví dụ:

const a = { i: 1 } a == 1 // => a.valueOf() == 1 => { i: 1 } == 1

Ta có thể viết lại hàm valueOf() để trả về giá trị ta muốn:

const a = { i: 1, valueOf: function () { return this.i; }
} a == 1 // => a.valueOf() == 1 => 1 == 1 => true

Vậy để biểu thức đầu bài có thể đúng, ta chỉ việc viết lại hàm valueOf() thích hợp:

const a = { i: 1, valueOf: function () { return this.i++; }
}

Mỗi lần ta dùng == thì hàm valueOf() được gọi và giá trị i tăng từ 1 lên 2 và 3. Nên biểu thức a == 1 && a == 2 && a == 3 đúng trong JS.

Frontend VN

Theo dõi FB của Frontend VN để cập nhật kiến thức và tips về FE mỗi ngày 🥰.

Bình luận

Bài viết tương tự

- vừa được xem lúc

Array trong Javascript

Xin chào mọi người. Hy vọng sẽ được thảo luận cùng anh em. Không để chờ lâu bắt đầu luôn nào. Để chạy thử ví dụ các bạn có thể vào https://jsfiddle.

0 0 25

- vừa được xem lúc

Blog#173: Introduction to Advanced JavaScript Concepts - Advanced JavaScript Part 1

Hi, I'm Tuan, a Full-stack Web Developer from Tokyo . JavaScript is an essential language for web development, and learning advanced concepts can significantly improve your programming skills.

0 0 22

- vừa được xem lúc

Blog#174: 🤔Understanding Asynchronous JavaScript: 🔄Callbacks, 🤞Promises, and 🤝Async/Await

Hi, I'm Tuan, a Full-stack Web Developer from Tokyo . 1. Introduction to Asynchronous JavaScript. What is Asynchronous JavaScript.

0 0 28

- vừa được xem lúc

Blog#175: 🧐Mastering JavaScript's Execution Context and Closures🚀

Hi, I'm Tuan, a Full-stack Web Developer from Tokyo . 1. Understanding Execution Context. A Quick Overview.

0 0 25

- vừa được xem lúc

Blog#177: 🤔MAYBE YOU DON'T KNOW - 👌Using Node-Postgres in Node.js Express✨

Hi, I'm Tuan, a Full-stack Web Developer from Tokyo . In this article, we'll walk you through a step-by-step guide on using node-postgres with Node.

0 0 29

- vừa được xem lúc

Blog#176: 💪The Power of JavaScript Functional Programming🚀

. The main goal of this article is to help you improve your English level. I will use Simple English to introduce to you the concepts related to software development.

0 0 23