JS基础知识总结

1.JavaScript基本类型:
          基本数据类型:number,string,boolean,null,undefined
          引用数据类型:function,object,array

 2.null和undefined区别:
           undefined:表示被定义了,但没赋值
           null:表示空对象(表示赋值了,但内容为空)

3.如何判断JavaScript数据类型:
          typeof:不能识别null  识别undefined时 返回undefined
          instanceof:不能用于判断原始数据类型的数据    可以用来判断对象的类型
          Symbol.hasInstance:
          Symbol.toStringTag:Object.prototype.toString
          Array.isArray:判断数组

4、简述创建函数的几种方式?
          1.函数声明 function(){}
          2.函数表达式  let a = function(){}
          3.函数对象方式    let b = new Function()

5、Javascript 创建对象的几种方式?
         1.简单对象的创建  使用对象字面量的方式{}
         2.用 function 来模拟 class
              2.1 创建一个对象 相当于 new 一个类的实例(无参构造函数)
              2.2 也可使用有参构造函数来实现
         3.使用工厂方式来创建(Object 关键字)
         4.使用原型对象的方式 prototype 关键字
         5.混合模式(原型和构造函数)
         6.动态原型的方式(可以看作是混合模式的一种特例)

6、请指出 JavaScript 宿主对象和原生对象的区别?
          原生对象:独立于宿主环境的 ECMAScript 实现 提供的对象
                           包含:Object ,Function ,Array ,String ,Boolean ,Number ,.....等
          内置对象:开发者不必明确实例化内置对象,它已被内部实例化了
                           同样是 独立于宿主环境 ,而 ECMA-262 只定义了两个内置对象,即 Global 和 Math
          宿主对象:B0M 和 DOM 都是宿主对象。因为其对于不同的 宿主 环境所展示的内容不同,其实说白了就是,ECMAScript 官方未定义的对象都属于宿主对象,因为其未定义的对象大多数是自己通过 ECMAScript 程序创建的对象

7、JavaScript 内置的常用对象有哪些?并列举该对象常用的方法?
        对象及方法:Arguments 函数参数集合
                            Arguments[] 函数参数的数组
                            Arguments  一个函数的参数和其他属性
                            Arguments.callee  当前正在运行的函数
                            Arguments.length  传递给函数的参数的个数
        Array 数组:  length  属性 动态获取数组长度
                           join()   将一个数组转成字符串,返回一个字符串
                           reverse()   将数组中各元素顺序颠倒
                           delete   运算符 只能删除数组元素的值,而所占空间还在,总长度没变(arr.length)
                           shift()    删除数组中的第一个元素,返回删除的那个值,并将长度减 1.
                           pop()    删除数组中的最后一个元素,返回删除的那个值,并将长度减 1.
                           unshift()   往数组前面添加一个或多个数组元素,长度要改变
                           push()    往数组结尾添加一个或多个数组元素,长度要改变
                           concat()   连接数组
                           slice()     返回数组的一部分
                           sort()    对数组元素进行排序
                           splice()   插入,删除或替换数组的元素
                           toString()    将数组转换成一个字符串
                           forEach    遍历所有元素
                           every     判断所有元素是否都符合条件
                           sort      排序
                           map       对元素重新组装,生成新数组
                           filter      过滤符合条件的元素 
          String 字符串对象
                    split()  将一个字符串转成数组
                    indexOf()  返回一个子字符串在原始字符串中的索引值(从左往右查找) 如没找到,则返回 -1
          Boolean 布尔对象
                   Boolean.toString() 将布尔值转换成字符串
          Date 日期时间
          Error 异常对象
          Function 函数构造器
          Math 数学对象
          Number 数值对象
          Object  基础对象

8. === 和 == 的区别:
       ===:全等 判断等号两边的值和类型是否相等
         ==: 等值符  只判断值是否相等

9.JavaScript 中什么情况下会返回 undefined 值?
       1.访问声明,但是没有初始化的变量
       2.访问不存在的属性
       3.访问函数的参数没有被显示的传递值
       4.访问任何被设置为 undefined 值的变量
       5.没有定义 return 的函数隐式返回
       6.函数 return 没有显示的返回任何内容

10.如何区分数组和对象?
        1.Array.isArray
        2.instanceof
        3.constructor
        4.Object.prototype.toString.call

11.多维数组降维的几种方法
        1.数组字符串化
        2.递归
        3.Array.prototype.flat()
        4. 使用 stack 无限反嵌套多层嵌套数组
        5.使用 reduce concat 和递归 无限反嵌套多层嵌套数组

12、怎么判断两个对象相等?
         1.判断两个对象是否指向同一内存
         2.使用 Object.getOwnPropertyNames 获取对象所有键名数组
         3.判断两个对象的键名数组是否相等
         4.遍历键名,判断键值是否都相等

13、列举三种强制类型转换和两种隐式类型转换?
         强制:转化成字符串 toString()  String()
                   转化成数字 Number()  parseInt() parseFloat()
                   转化成布尔类型  Boolean()
         隐式:拼接字符串  + - * / % ==

14、什么是类数组(伪数组),如何将其转化为真实的数组?
           伪数组:有数组三要素(下标,元素,长度) 但是不能使用数组的方法
           伪数组转为真数组方法:1.array.from()

15、如何遍历对象的属性?
          1.遍历自身非继承属性 Object.keys() 方法
          2.遍历自身的所有属性  Object.getOwnPropertyNames()
          3.遍历自身可继承的属性  for in

16、如何使用原生 JavaScript 给一个按钮绑定两个 onclick 事件?
             addEventListener

17、JavaScript 中的作用域、预解析与变量声明提升?
            作用域:就是变量的有效范围。在一定的空间里可以对数据进行读写操作,这个空间就是数据的作用域
               1.全局作用域:最外层函数定义的变量拥有全局作用域,即对任何内部函数来说,都是可以访问的
               2.局部作用域:一般在固定的代码片段可以访问,函数外无法访问
               3.块级作用域:代码块可以划分变量的作用域
           预解析:1.把变量的声明提升到当前作用域的最前面,只会提升声明,不会提升赋值
                        2.把函数的声明提升到当前作用域的最前面,只会提升声明,不会提升调用
           变量提升:定义变量的时候,变量的声明提升到当前作用域的最前面
           函数提升:JavaScript 解析器首先会把当前作用域的函数声明提升到当前作用域的最前面    

18、变量提升与函数提升的区别?         
           函数提升的优先级大于变量提升的优先级

19、什么是作用域链?
           作用域链:当函数在一个环境中执行时,会创建变量对象的一个作用域链
                           由子级作用域返回父级作用域中寻找变量,就叫做作用域链

20、如何延长作用域链?
          1.try-catch 语句的 catch块 会创建一个新的变量对象
          2.with 语句  会将指定的对象添加到作用域链中

21、判断一个值是什么类型有哪些方法?
           1.typeof  (对于数组,null,对象来说,会统一返回 object)
           2.instanceof
           3.Object.prototype.toString

22、src 和 href 的区别是?
           src:指向外部资源位置,指向的内容将会嵌入到文档中当前标签所在位置
           href:指向网络资源所在位置

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值