blueRoach
blueRoach
let a = 1, b = 2 return [a, b] = [b, a]
``` Array.prototype.shuffle = function () { let _this = this for(let i = _this.length - 1; i >= 0; i--){ let randomIndex = Math.floor(Math.random() * (_this.length - 1)) let temp...
``` function deepClone(obj){ if(typeof obj !== 'object'){ return new Error('Error arguments') } let target = Array.isArray(obj) ? [] : {} for(let key in obj){ if(obj && obj.hasOwnProperty(key)){ if(typeof obj[key] ===...
``` function isPalindrome (st){ let tem = st.replace(/[^a-zA-Z0-9]/g, '').toLowerCase() return tem == tem.split('').reverse().join('') } ```
``` function change12(number){ if(!typeof number){ new Error('not number') } return number ? 0 : 1 } ```
``` /** * \f 匹配换页字符。 * \n 匹配换行字符。 * \r 匹配回车符字符。 * \t 匹配制表字符。 * \v 匹配垂直制表符。 */ function deleteTN(str){ return str.replace(/[\t\n]+/g, '') } ```
- 是一个类数组,有下标有length - arguments.callee指向函数本身,但是严格模式下禁用此属性 - 转换为数组的方法 [...arguments] Array.from(arguments) [].slice.call(arguments)
回调函数是,一个函数作为另一个函数的参数,当某个特定的条件发生,作为参数的函数就被执行。 比如向服务器发送一个请求,服务器返回一个code,前端根据这个code来反应是否成功响应 ``` function a(b){ setTimeout(b, 1000) } function b(){ console.log(1) } a(b) ```
call、apply和bind作用都是为了改变this的指向 call、apply会立即执行此函数,两者等价,第一个参数一致。apply第二个参数是数据,call是接受一个参数列表 bind是返回一个新的函数。第二个参数也是一个参数列表
对一个实例new做了以下4件事 1. 生成一个空对象 2. 将此对象的原型对象(__proto__)指向实例的原型(prototype) 3. 将此对象的this指向实例 4. 返回一个此对象 实现方法,楼上大佬的 ``` function _new(fn, ...arg){ let obj = Object.create(fn.prototype) // Object.create 1.创建一个对象 2.将参数对象指向生成对象的原型(__proto__) 3.返回该对象 let obj1 = fn.apply(obj, arg) return obj1...