JS基础题目

1、js基本数据类型:string、number、boolean、null、undefined、bigint、symbol 引用数据类型 object

2、typeof 能区分数据类型,返回结果有 string、number、boolean、undefined、object、function、symbol

instanceof 只能判断引用类型(array、object、function),无法判断基本数据类型(string、number、boolean),判断对象的原型链上是否存在构造函数的原型,常用来判断A是否是B的实例, 返回结果只有true 、false

3、隐式类型转换:

加法: 一方有string,另一方也会被转成string;一方有number,另一方为原始值类型,则将原始值类型转换为number;一方有number,另一方为引用类型,双方都转为string

- * / 都会将非number 转为number

==:NaN 不等于任何类型, null == undefined,null 、undefined与任何类型进行比较结果都为 false,boolean 与 其他类型进行比较 boolean转换为number, string和number进行比较, string转换为 number

4、事件循环机制:代码开始执行时,script会作为宏任务开始执行,执行过程中,同步任务会立刻执行,异步任务会根据任务类型分为宏任务和微任务,分别注册到宏任务和微任务队列中,同步任务执行完,会去微任务队列执行,微任务队列执行完(包括微任务产生的新的微任务)会去宏任务列表执行第一个宏任务,宏任务执行完,去执行微任务列表......

    宏任务和微任务分类    

5、call 、apply、 bind

      call 和 apply 的第一个参数相同,就是指的上下文,call 可以有多个参数,第一个参数后面的所有参数就是需要传入的值,apply只有两个参数,第二个参数是一个数组,数组里可以存放需要传入的值。

      call和apply是立刻执行,bind会绑定上下文的函数,不会立刻执行,bind和call的参数一致

6、防抖和节流:防抖是在高频操作之后只会执行最后一次,节流是每隔一段时间执行一次,将高频操作改为低频操作

7、arguments:arguments是一个类数组对象,用来存储实际传递给函数的参数

8、DOM、BOM

DOM(document object modal):文档对象模型,提供操作页面元素的方法和属性

BOM(browser object modal):浏览器对象模型,提供操作浏览器的方法和属性

BOM的核心是window, window对象包含属性:document、frames、history、location、navigator、screen

document根节点包含子节点:forms、images、layers、links、anchors等

BOM包含了DOM(对象),浏览器提供出来给予访问的是BOM对象,从BOM对象再访问到DOM对象,从而js可以操作浏览器以及浏览器读取到的文档。

9、事件委托:像一个ul 下面有一万个li的时候,点击li标签如何捕捉到哪个li出发的点击事件?监听ul上的点击事件,由于冒泡机制,点击了li会冒泡到ul,就会出发ul上的点击事件,在通过target就可以获取到实际触发的li。

function colorChange(e){                
    var e=e||window.event;//兼容性的处理         
    if(e.target.nodeName.toLowerCase()==="li"){                    
        box.innerHTML="该颜色为 "+e.target.innerHTML;                
    }                            
}            
color_list.addEventListener("click",colorChange,false)

10、查询某个对象是否有某个属性的方法

    对象的hasOwnProperty(),判断自有属性是否存在

11、判断数据类型的方法:Object.prototype.toString.call()

12、构造函数和普通函数的区别:

       调用方式不同,构造函数通过new 来创建实例,普通函数可以直接调用

       this指向不同,构造函数this指向它的创建对象,普通函数严格模式下指向undefined,非严格模式下指向的是window

13、this指向

  • 默认绑定:this严格模式下指向undefined,非严格模式下指向的是全局对象window
  • 隐式绑定:满足XXX.fn()的格式,fn的this指向的是XXX。如果存在链式调用,this永远指向最后调用它的那个对象。
  • 显示绑定:通过call、apply、bind来改变this指向
  • new绑定:通过new来调用构造函数,构造函数this指向它的创建对象
  • 箭头函数的this:箭头函数没有this,他的this是通过作用域链查询到外部作用域的this

14、原型和原型链

15、js继承

  • 原型链继承
function Parent () {
    this.name = 'kevin';
}

Parent.prototype.getName = function () {
    console.log(this.name);
}

function Child () {

}

Child.prototype = new Parent();

var child1 = new Child();

console.log(child1.getName()) // kevin

缺点:1、引用类型的属性被所有实例共享(parent属性被child实例共享)例如:

function Parent () {
    this.names = ['kevin', 'daisy'];
}

function Child () {

}

Child.prototype = new Parent();

var child1 = new Child();

child1.names.push('yayu');

console.log(child1.names); // ["kevin", "daisy", "yayu"]

var child2 = new Child();

console.log(child2.names); // ["kevin", "daisy", "yayu"]

        2、在创建child实例是不可以向parent传递参数

  • new构造函数
function Parent () {
    this.names = ['kevin', 'daisy'];
}

function Child () {
    Parent.call(this);
}

var child1 = new Child();

child1.names.push('yayu');

console.log(child1.names); // ["kevin", "daisy", "yayu"]

var child2 = new Child();

console.log(child2.names); // ["kevin", "daisy"]

优点:1、避免了引用类型属性被所有实例共享

           2、可以在Child中向Parent传参

缺点:方法在构造函数定义,每次创建实例都会创建一遍方法

Object.getPrototypeOf()方法可以用来从子类上获取父类。

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值