zoukankan      html  css  js  c++  java
  • 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. 区别如下图:


  • 相关阅读:
    Java创建和解析Json对象
    Tyche 2191 WYF的递推式
    Tyche 2147 旅行
    Tyche 2317 Color
    洛谷 P1092 虫食算
    洛谷 P3951 小凯的疑惑
    BZOJ 1800 [Ahoi2009]fly 飞行棋
    BZOJ 1034 [ZJOI2008]泡泡堂BNB
    洛谷 P2151 [SDOI2009]HH去散步
    Android开发环境配置
  • 原文地址:https://www.cnblogs.com/ymlo/p/15749843.html
Copyright © 2011-2022 走看看