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)