一.JS有几种方法判断变量类型
简单的四种
1.typy of 常用于基本数据类型 用法:type of "John"
2.instance of 判断对象是否是指定的类型(常用于引用数据),数据判断正确返回TRUE,判断不正确返回FALSE,用法 [ ] instance of array
3.Constructor(用于应用数据类型) :获取实例的构造函数判断和某个类是否相同,不会把原型链的其他类带进来,避免原型链的干扰
4.Object.prototype.toString.call() : (所有数据都可以使用)用法:Object.prototype.toString.call(obj) == '[object Array]' 返回该数据类型的字符串。
二.VUE2.0双向绑定原理与缺陷
VUE响应式指的是:组件data变化,会立刻触发视图更新
原理:VUE采用 数据劫持结合发布者--订阅者 的方式来实现数据的响应式,通过Object.defineProperty()来劫持各个属性的setter、getter,在数据变动时发布消息给订阅者,触发响应的监听回调。
Object.defineProperty缺点:
1.一次性递归到底开销很大,如果数据很大,大量的递归导致调用栈溢出
2.不能监听对象的新增属性和删除属性 (需通过Vue.set())
3.无法监听数组变化(下标)
三.数组去重
1.利用对象的Key
遍历数组,每次判断对象中是否存在该属性,不存在就push进新数组,并且把数组元素作为key,设置一个值,存在对象中,最后返回新数组。缺点:占用空间较多。
2.利用set类型数据无重复项
new一个Set,set会自动删除重复项,最后将Set转为数组返回。
优点:效率高,代码简单,缺点:兼容性较差
3.filter+indexOf
利用Array自带filter返回arr.indexOf(num) = index 的 num。
原理:indexof返回最先找到的数字索引,如【1,1】第二个1就会返回索引值为0。
优点:去重时插入到元素的操作,可扩展性强。
4.从头遍历Array,若元素之前出现过,则将其挪到最后,继续遍历,直到处理完所有元素,之后将挪到最后的元素抛弃。
优点:直接操作Array,占用内存少。
四. map、forEach
区别:map有返回值,可以开辟新空间,返回出来一长度和原数组一致的数组,即便数组元素是undefined或null ; forEach:默认无返回值,返回结果均为undefined,可以通过在函数体内部使用索引修改数组元素。
加分项:map比foreach处理速度更快,而且返回一个新的数组,方便链式调用其他数组新方法,比如filter、reduce