判断变量的数据类型基本数据类型(Sring,Number,Undefined,Null,Boolean)使用typeof判断,console.log(typeof'123')=>String,其中null不能用typeof来判断数据类型,因为typeof的判断依据是将数据转换成二进制,如果前三位是000,则判断为Object类型,null表示空,而二进制000000将被判断为Object。数据insanceof类型,通过instanceof来判断变量是否是某种类型的数据,判断依据是变量的结构体原型。限制比较多,变量必须通过构造原型让a=newString()来声明,而且还要求在同一个全局窗口下。最准确的判断方式是Object.prototype.toString.call,通过查找原型链来获取变量的数据类型。数组常用方法(abc默认为字符串类型)[a,b,c].join(','),将数组转为字符串使用,使用,分隔元素。'a,b,c''a,b,c'.split(','),将字符串按字符分割成数组。[a,b,c][a,b].push('c'),将元素添加到数组的最后一个。[a,b,c][a,b].unshift('c'),将元素添加到数组的最前面。[c,a,b][a,b,c].pop(),取出数组的最后一个元素。移除数组[a,b]的结果,该方法将返回移除元素'c'[a,b,c].shift(),删除数组的第一个元素。移除数组[b,c]的结果,该方法将返回移除元素'a'[a,b,c].reverse(),反转数组中元素的顺序。反转[c,b,a][b,a,c].sort()后,对数组中的元素进行排序,排序的结果,[a,b,c][a].concat([b,c]),链接两个数组,结果为[a,b,c][a,b,c].splice(2,1),用于添加或删除数组中的元素,该方法会改变原来的数组,参数的原则是包头不包尾,原数组运算后[a,b]。这个方法可以有第三个参数,可以在删除的位置插入一个新的元素,[a,b,c].splice(2,1,250),运行后原数组会变成[a,b,250][a,b,c].slice(1,3)用于提取数组中对应的元素。方法执行后返回[b,c]。该方法不会改变普通的原数组遍历方法(abc默认String类型)forEach遍历时可以直接操作原数组,但要注意操作原数组可能会造成死循环,该方法没有返回值。map在遍历数组时,不能直接对数组本身进行操作,map执行后会返回一个值。过滤器在遍历数组时,会根据条件过滤数组的元素,返回满足条件的元素。find遍历数组时,会返回代码块中满足条件的元素为真,只返回第一个满足条件的元素。findIndex和find一样,都会返回第一个满足条件的元素的下标。some遍历数组,根据判断条件进行模糊判断,为真则返回一个布尔值。(可用于性能优化)Every遍历数组,根据判断条件进行模糊判断,为假则返回一个布尔值。(可用于优化性能)reduce遍历数组进行累加计算array.reduce((temp,element,subscript,originalarray)=>{},recordvalue)temp是循环中用来记录数据变化的值,并且每次循环都会改变,每次遍历都会先访问记录值并将记录值赋值给temp,然后运行代码块;如果参数中没有记录值,reduce在遍历时会从数组的第二个元素开始遍历,并将数组的第一个元素作为记录值。记录值会在第一次遍历数组时赋给temp对象的深拷贝和浅拷贝由于内存地址的源数据发生变化,这就是浅拷贝。浅拷贝就是拷贝内存地址。深拷贝:深拷贝是将所有引用类型的值复制到一个新的内存地址,不跟随源数据变化。深拷贝是一种常见的拷贝数据值的深拷贝方式:JSON.parse(JSON.stringfy(Obj)):将对象数据转为字符串,然后通过JSON.parse转为引用类型。【缺点:undefined和函数不能用这种方式深拷贝】最安全的深拷贝是用递归的方式判断this的指向。问题this是代码执行到语句'this'的上下文[executedWhenbindingthistopointto]es6箭头函数代码块有这个穿透能力,指向声明的上下文,不能改变[bindingtopointtowhendeclaring]直接声明varobj={obj1:{obj2:{obj3:()=>{console.log('this',this)}}}}输出时,this指向窗口,箭头函数指向声明时的上下文。改变this点的三种方法详见:apply:call:bind:
