Proxies were introduced in ES6 to allow you to provide custom functionality to basic operations that can be performed on an Object. For example, get is a basic Object operation. Here, the console.log() statement performs a get operation on the object obj to get the value of the key val.
Full article