js隐式转换

7 阅读1分钟

隐式转换

当对象与原始值进行比较的时候,

  1. 优先比较valueOf
  2. 如果valueOf返回的是基础类型,则进行比较,反之则尝试toString方法
  3. 如果二者都返回对象,则抛出错误
      let obj = {
            toString() {
                console.log("调用了tostring");
                return 1
            },
            valueOf() {
                console.log("先调用了valueof");
                return {}
            }
        }
        console.log(obj == 1); //true

变量提升函数提升

对于同名标识符,变量声明不会覆盖函数声明,但变量赋值会覆盖

console.log(s);
var s = 2;
function s() {}
console.log(s);

转化后

function s() {}
var s; //未赋值,发现已经有同名函数声明,跳过
console.log(s);
s = 2;
console.log(s);
//result: [Function: s]2