N 问

1. parseInt

['1', '2', '3'].map(parseInt) what & why ?

//parseInt('1',0) 第二个参数表示要转换的进制,范围2-36,默认为10
//0,相当于不传,即10进制
[1, NaN, NaN];

2、隐式转换

(a == 1 && a == 2 && a == 3) === true; a = ?

解决方式:

  • toString / valueOf: valueOf的优先级高于toString
  • Object.defineProperty / Proxy
  • 数组 join
const a = {
  i: 0,
  toString() {
    return ++this.i;
  },
  valueOf() {
    return ++this.i;
  }
};
console.log(a == 1 && a == 2 && a == 3); // true
//以上示例中,会先触发valueOf方法,valueOf如果返回的不是原始值,会继续触发toString方法
let i = 0;
Object.defineProperty(global, "a", {
  get() {
    return ++i;
  },
});
const a = [1, 2, 3];
a.join = a.shift;

3、小数取整

上次更新:
贡献者: Chris-Wen