面试例题

如何实现 a==1 && a==2 && a==3 返回true?

let a = {
  i: 1,
  toString: function () {
    return a.i++;
  }
}
a == 1 && a == 2 && a == 3


let a = [1,2,3];
a.toString = a.shift;
console.log(a == 1 && a == 2 && a == 3); // true


Object.defineProperty(this, 'a', {
    get: function () {
        return this.value = this.value ? (this.value += 1) : 1
    }
})
console.log(a===1 && a===2 && a===3) //true


let a = new Proxy({ i: 0 }, {
    get: (target, name) => name === Symbol.toPrimitive ? () => ++target.i : target[name],
});
console.log(a == 1 && a == 2 && a == 3);    // true

位运算符

  • 位运算符只对整数部分有效

什么是可迭代对象

JSON.stringfy

  • 首先明确 stringfy 可以接受3个参数. value, repalce, space
  • repalce 可以为函数或数组, 如果为函数时, 被序列化的值的每个属性都会经过该函数的转换和处理. 如果为数组时, 则被序列化的值只有包含在数组中的属性才会被序列化
  • space 指定缩进用的空白字符串,用于美化输出(pretty-print);如果参数是个数字,它代表有多少的空格;上限为10。该值若小于1,则意味着没有空格;如果该参数为字符串(当字符串长度超过10个字母,取其前10个字母),该字符串将被作为空格;如果该参数没有提供(或者为 null),将没有空格。
以往
JSRUN前端笔记, 是针对前端工程师开放的一个笔记分享平台,是前端工程师记录重点、分享经验的一个笔记本。JSRUN前端采用的 MarkDown 语法 (极客专用语法), 这里属于IT工程师。