JS面试知识点分享(一)

JavaScript有哪些数据类型,它们的区别是?


JS的八种数据类型:undefined、null、boolean、number、String、object、ES6新增了一种数据类型:(Symbol)这种类型的对象永不相等,即便创建的时候传入相同的值也不相等
主要用于解决属性名冲突问题

谷歌也出现了一种: Biglnt 指的是安全存储,操作大整数

所以js数据类型包含了以上八种 undefined String Object Number Null Boolean Symbol bigInt

栈:基本数据类型:undefined、null、boolean、number、string

堆:引用数据类型,(对象,数组和函数)object array function

 1. 这五种基本类型可以直接访问,他们是按照值进行分配的,存放在栈内存中的简单数据段,数据大小确定,内存空间大小可以分配

 2.引用类型即存放在堆内存中的对象,变量实际保存的是一共指针,这个指针指向另一个位置


 null和undefined区别:


 null 只有一个值,是null,不存在的对象,表示一个空对象指针

undefined只有一个值,是undefined。没有初始化。undefined是从null中派生出来的

简单理解就是:undefined是没有定义的,null是定义了但是为空!


数据类型检测的方式有哪些?


 1.typeof 检测数据类型的运算符

typeof value 返回值首先是一个字符串,里面包含了对应的数据类型: number、string、boolean、undefined、object、function

只能判断原始值 number、string,判断引用类型 object null 这些结果都是object,判断不了

2.instanceof  检测某一个实例是否属于某一个类 检测是原型

判断不了基本数据类型 number、string,可以判断引用数据类型 object array function

3. constructor(慎用!)

constructor这个属性存在构造函数的原型链上的属性,指向构造函数,可以通过直接访问查看构造函数上的__proto__直接查看所属类型。

4.Object.prototype.toString.call( ) (推荐!!!)


判断数组的方式有哪些?


 1. instanceof

2. 使用Array对象的isArray方法判断

3. Object.prototype.toString.call( )


 typeof和null的结果是什么


 typeof和null的结果:object


instanceof操作符的实现原理及实现


instanceof判断构造函数的prototype属性是否出现在对象的原型链中

用于测试构造函数的prototype属性,是否出现在对象的原型链中的任何位置。


new操作符的实现原理?


1. 创建一个新的空对象

2. 设置原型,将对象的原型设置为函数的prototype对象

3. 让函数的this指向这个对象,执行构造函数的代码(为这个新对象添加属性)

4. 判断函数的返回值类型,如果是值类型,返回创建的对象,如果是引用类型,返回引用类型的创建对象

  function factory() {
        let newObject = null;
        let constructor = Array.prototype.shift.call(arguments);
        let result = null;
        // 判断参数是不是一个函数
        if (typeof constructor !== 'function') {
            console.log('typeof error');
            return;
        }
        // 新建一个空对象,对象是原型是构造函数的prototype对象
        newObject = Object.create(constructor.prototype);
        // 将this指向新建对象 并执行函数
        result = constructor.apply(newObject, arguments);
        // 判断返回对象
        let flag = result && (typeof result === 'Object' || typeof result === 'function');
        // 判断返回结果
        return flag ? result : Object
    }

数组有哪些原生方法?


pop:删除并返回数组最后一个元素(改变原数组);

push:返回添加完成后的数组的长度(改变原数组);

shift:移除并返回数组的第一个元素(改变原数组);

unshift:在数组头部插入一个元素

slice:slice(下标,个数)返回裁剪后的数组(不改变原数组);

splice:插入,删除或替换数组的元素

concat:合并数组返回组合数组(不改变原数组);

join:将数组用标识符链接成字符串返回拼接好的字符串(不改变原数组);

reverse:翻转数组(改变原数组);

toString:将数组转换成一个字符串;

split:把字符串分割开,以数组方式储存;

forEach:主要用于遍历数组;

every:主要用于检查数组中每个元素是否符合函数的条件,如果其中有一个不符合,则返回false;;

indexOf:主要用于在数组中查找元素,并把元素的位置返回来。;

转自:https://blog.csdn.net/weixin_47002866/article/details/118180068


 什么是BOM和DOM ?  


 1.dom是文档对象模型,可以把浏览器当成一个容器,是对里面的内容进行操作的

 2.bom是浏览器对象模型,是对浏览器本身进行操作 核心对象是window

 3. 区别如下图:


原文地址:https://www.cnblogs.com/ymlo/p/15749843.html