js 知识

js 加法 1:两个都是原始类型  若一个是字符串 则另一个转变为字符串 若一个是原始类型 则按原始类型转number

            2:若不是原始类型,则按对象[Symbol.toPrimitive]   valueOf() toString() 依次转换

var obj = {
  a: 2,
  [Symbol.toPrimitive]: function () {
    console.log('toPrimitive')
    return this.a + 1
  },
  valueOf() {
    console.log('valueof')
    return this.a
  },
  toString(){
    console.log('ssssss')
    return 'sss'
  }
}
console.log(obj + 4)

 

所有循环都可以改为递归函数

const arr = [6, 3, 2, 4, 5]
function arrSum(arr, i = 0) {
  if (i >= arr.length) {
    return 0
  }
  return arr[i] + arrSum(arr, i + 1)
}
//console.log(arrSum(arr))

function arrSum1() {
  let sum = arr[0];
  let i = 1;
  function _m() {
    if (i === arr.length) {
      return 0
    }
    sum += arr[i]
    i++
    _m()
  }
  _m()
  return sum
}

解析原理:其实是调用[Symbol.iterator]返回一个迭代器

const arr1 = [6, 3, 2]
inteor = arr1[Symbol.iterator]()
console.log(inteor.next().value)//6
console.log(inteor.next().value)//3
console.log(inteor.next().value)//2

 

Object.prototype[Symbol.iterator] = function () {
  return Object.values(this)[Symbol.iterator]()
}
const [a, b] = {
  a: 22, b: '444a11a'
}

console.log(a,b)

 

posted @ 2024-08-29 17:21  howhy  阅读(3)  评论(0编辑  收藏  举报