1.变量类型
JS 中使用 typeof 能判断哪些数据类型:能识别所有值类型(undefined string number boolean symbol),能识别函数,可返回Function,能判断是否是引用类型(object array null),但是全部判断为object。
2.变量计算
数据类型转换的场景:字符串拼接, ==,if语句和逻辑运算
0 ‘’ undefined null NaN false在数据类型转换时,都可以转换为false
== 运算符的使用场景: 判断某个值obj.a == null 相当于判断这个值obj.a === null || obj.a === undefined
3.js中的内置函数-数据封装类对象
Object,Array,Boolean,Number,String,Function,Date,RegExp,Error
4.如何理解json
是一个js数据对象同时也是一种数据格式
5.null和undefined的区别
类型不一样:undefined为undefined ,null为object
转化为值时不一样:undefined为NaN ,null为0
6.如何对比JS中两个对象是否相等
方法一:通过JSON.stringify(obj)来判断两个对象转后的字符串是否相等
优点:用法简单,对于顺序相同的两个对象可以快速进行比较得到结果
缺点:这种方法有限制就是当两个对比的对象中key的顺序不是完全相同时会比较出错
方法二:
getOwnPropertyNames该方法可以将Object对象的第一层key获取到并返回一个由第一层key组成的数组。
优点:相对方法一进行了优化,可以应对不同顺序的Object进行比较,不用担心顺序不同而对比出错
缺点:从方法中可以看到只能获取到第一层的key组成的数组,当对象是复合对象时无法进行多层对象的比较
方法三:
先判断俩者是不是对象,是对象后俩者长度是否一致,判断俩个对象的所有key值是否相等相同,判断俩个对象的相应的key对应的值是否相同,来一个递归判断里面的对象循环1-4步骤
7.深拷贝浅拷贝
浅拷贝只复制指向某个对象的指针,而不复制对象本身,新旧对象还是共享同一块内存。但深拷贝会另外创造一个一模一样的对象,新对象跟原对象不共享内存,修改新对象不会改到原对象。
8.深拷贝的方式
8.1JSON.parse(JSON.stringfy(obj))
这种方式的弊端
如果obj里面有时间对象,则JSON.stringify后再JSON.parse的结果,时间将只是字符串的形式。而不是时间对象;
如果obj里有RegExp、Error对象,则序列化的结果将只得到空对象;
如果obj里有函数,undefined,则序列化的结果会把函数或 undefined丢失;
如果obj里有NaN、Infinity和-Infinity,则序列化的结果会变成null
JSON.stringify()只能序列化对象的可枚举的自有属性,例如 如果obj中的对象是有构造函数生成的,则使用JSON.parse(JSON.stringify(obj))深拷贝后,会丢弃对象的constructor;
如果对象中存在循环引用的情况也无法正确实现深拷贝;
8.2递归实现深拷贝