2021整理面试知识点

1.null和undefined的区别

null:代表空对象指针。现在没有,将来可能会有

undefined:空,未定义。现在没有,将来也不会有(js中独有的数据类型)

区别

1)两者类型不一样

console.log(typeof null)  // Object

console.log(typeof undefined)  // undefined

2)转成数值结果不一样

console.log(Number(null))  // 0

console.log(Number(undefined))  // NaN

null出现情况:

--某个元素找不到;

--对象彻底销毁的时候为null(对象销毁,给复合数据类型赋值null,清除当前变量占用的内存)

undefined出现情况:

--变量未赋值

--函数默认返回值

--严格模式下this为undefined

--简单类型加上属性为undefined

2.js中检测数据类型的集中方式

1)typeof

一元运算符,用来检测数据类型。只可以检测:string、undefined、object、Boolean、function、number

对基本数据类型是没问题的,引用数据类型不起作用(无法细分对象)

2)instanceof

二元运算符,用来检测某个对象是不是另一个对象的实例。

只能用来判断对象和函数,不能判断字符串和数字

例:

let arr = [1, 2, 3]

console.log(arr instanceof Array)  // true

3)constructor

js中所有对象都继承于Object,constructor是其中一个属性,默认指向实例的构造函数(可以修改)。

例:

function fs() {}

let f = new fs

console.log(f.constructor === fs)  // true

console.log(f.constructor.name)  // fs

4)[拓展] Object.prototype.toString.call

js中,Object.prototype.toString()判断某个对象值属于哪种内置类型

例:

let dt = new Date

console.log(Object.prototype.toString.call(dt)) // [Object Date]

let arr = [1, 2, 3]

console.log(Object.prototype.toString.call(arr))  // [Object Array]

let fs = function() {}

console.log(Object.prototype.toString.caal(fs))  // [Object Function]

3.css3实现单行文本溢出显示省略号

100px;

white-space: nowrap;

text-overflow: ellipsis;

overflow: hidden;

4.[了解]正则常用的修饰符与元字符

https://www.cnblogs.com/theblogs/p/9943070.html

5.闭包

什么是闭包?

闭包是一种保护机制,保护私有作用域中的私有变量不受全局变量的污染。

js中,函数套函数,子函数使用父函数中的参数或者变量,且子函数被外界所引用(没有释放)。此时父函数的参数或变量不会被浏览器垃圾回收机制所回收,这时候父级便形成了闭包环境。

例:

function fs () {

  let a = 10

  return function() {

    a++

    console.log(a)

  }

}

let f = fs()

console.dir(f)

闭包特点:

1)函数套函数

2)子函数访问父函数的参数或者变量

3)子函数被外界所使用着,没有释放

闭包应用场景:

1)存储父函数的变量或者参数

2)保护私有变量不受外界干扰

闭包缺点:

相对于普通函数更消耗内存,使用不当容易造成内存泄漏;所以一般尽量避免使用闭包。

6.es6箭头函数

=> 箭头函数是es6新增的函数表达式。(低版本浏览器不兼容)

影响this的作用域。

例:

let fn = a => {

  return a

}

let fn  = a => a

箭头函数需要注意的点:

1)箭头函数不能new(不能当做构造函数),否则报错

2)this指向不再是Window,而是父级(指向可变)

3)不可以使用arguments,在函数体内不存在;如果需要使用,rest参数代替

7.改变this指向的三种方法(call、apply、bind)

共同点:

三者都可以改变this指向。若第一参数为null/undefined,this默认指向window。

区别:

call、apply可以自动执行,bind不会自动执行,需要手动调用

call、bind可以有无数个参数,apply只能传两个参数,第二个参数一定要为数组

1)call(无数个参数)

参1:this指向

参2:实参

使用之后会立即执行该函数。

例:

function fx(a, b, c) {

  console.log(this, a+b+c)  // window, NaN

}

fx()

fx.call(document, 1, 2, 3)  // #document, 6

2)apply(两个参数)

参1:this指向

参2:数组(实参)

使用之后会立即执行该函数。

例:

function fx(a, b, c) {

  console.log(this, a+b+c)  // window, NaN

}

fx()

fx.apply(document, [1, 2, 3]) // #document, 6

3)bind(无数个参数)

参1:this指向

参2:实参

返回值是一个新函数,新函数需要重新调用,不会自动执行。

function fx(a, b, c) {

  console.log(this, a+b+c)  // window, NaN

}

let fxx = fx.bind(document, 1, 2, 3)

fxx()  // #document, 6

8.

9.

原文地址:https://www.cnblogs.com/candy-xia/p/14822273.html