zoukankan      html  css  js  c++  java
  • 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.

  • 相关阅读:
    NanoProfiler
    NanoProfiler
    Open Source Cassandra Gitbook for Developer
    Android Fragment使用(四) Toolbar使用及Fragment中的Toolbar处理
    Android Fragment使用(三) Activity, Fragment, WebView的状态保存和恢复
    Android Fragment使用(二) 嵌套Fragments (Nested Fragments) 的使用及常见错误
    Android Fragment使用(一) 基础篇 温故知新
    Set up Github Pages with Hexo, migrating from Jekyll
    EventBus源码解析 源码阅读记录
    Android M Permission 运行时权限 学习笔记
  • 原文地址:https://www.cnblogs.com/candy-xia/p/14822273.html
Copyright © 2011-2022 走看看