前端面试题-js基础-变量类型和计算-坐标南京

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递归实现深拷贝


你可能感兴趣的:(前端面试题-js基础-变量类型和计算-坐标南京)