• JS进阶面试题整理(仅仅整理我做错的题)


        前几天看到掘金博客一篇文章,找到了这个JavaScript进阶问题列表:现在把地址贴出来,想找工作或者想要巩固自己JS的同学可以参考

                  该文档会不定时更新

         一、箭头函数

        箭头函数相当于匿名函数,并且简化了函数的定义。它最大的有点是解决了this执行环境造成的一些问题。最常见的就是在setTimeout和setInterval中使用this造成的问题

        在“use strict” 严格模式下,没有直接的调用者的函数中this是指向window的,这个是约定俗成的。在“use strict”严格模式下,没有直接的挂载者的话,this指向是undefined;在非严格模式下,this指向的是函数的执行上下文

      二、普通函数  

        普通函数,this是JS的一个关键词,它是函数执行过程中自动生成的一个内部对象,是指的当前对象,只在当前函数内部使用。

         this对象是在运行时基于函数执行的环境来说的,在全局调用时,this指向window。当函数作为某个对象的方法被调用的时候,this指向这个对象

        在上述的代码中,

    const shape = {
        radius:10,
        diameter(){
            return this.radius * 2
        },
        perimeter:()=>2*Math.PI * this.radius
    }
    shape.diameter()
    shape.perimeter()

       函数diameter的值是一个常规函数,但是permeter的值是一个箭头函数;考点在于普通常规函数和箭头函数的区别

     函数diameter中,this指向的是shape这个对象,所以shape.diameter()这个函数输出来的是20

    函数perimeter中,this指向是window,在window中,没有radius这个变量,所以这个函数输出的是undefined

    ================================================================================================

     2、一元操作符将Boolean类型转为数字类型;true转化为Number类型是1

    console.log(+true)//1
    console.log(-true)//-1

     3、下面哪句话是对的?

    const bird = {
      size: 'small'
    }
    
    const mouse = {
      name: 'Mickey',
      small: true
    }
    • A: mouse.bird.size是无效的
    • B: mouse[bird.size]是无效的
    • C: mouse[bird["size"]]是无效的
    • D: 以上三个选项都是有效的

    解析:考点:点语法和括号语法

    在 JavaScript 中,所有对象的 keys 都是字符串(除非对象是 Symbol)。尽管我们可能不会定义它们为字符串,但它们在底层总会被转换为字符串。

    当我们使用括号语法时([]),JavaScript 会解释(或者 unboxes)语句。它首先看到第一个开始括号 [ 并继续前进直到找到结束括号 ]。只有这样,它才会计算语句的值。

    mouse[bird.size]:首先计算 bird.size,这会得到 smallmouse["small"] 返回 true

    然后使用点语法的话,上面这一切都不会发生。mouse 没有 bird 这个 key,这也就意味着 mouse.bird 是 undefined。然后当我们使用点语法 mouse.bird.size 时,因为 mouse.bird 是 undefined,这也就变成了 undefined.size。这个行为是无效的,并且会抛出一个错误类似 Cannot read property "size" of undefined

     三、class基础语法

        学习链接: http://es6.ruanyifeng.com/#docs/class

     题目: 

    class Chameleon {
                  static colorChange(newColor) {
                    this.newColor = newColor
                    return this.newColor
                  }
    
                  constructor({ newColor = 'green' } = {}) {
                    this.newColor = newColor
                  }
    }
    
     const freddie = new Chameleon({ newColor: 'purple' })
     freddie.colorChange('orange')//TypeError

    colorChange是一个静态方法,静态方法被设计为只能被创建它们的构造器使用(也就是 Chameleon),并且不能传递给实例。因为 freddie 是一个实例,静态方法不能被实例使用,因此抛出了 TypeError 错误。

    如果静态方法包含this关键字,这个this指的是类,而不是实例。

     四、函数

    function bark() {
      console.log('Woof!')
    }
    
    bark.animal = 'dog'
    
    
    A: 正常运行!
    B: SyntaxError. 你不能通过这种方式给函数增加属性。
    C: undefined
    D: ReferenceError

    解析:Javascript中函数也是对象(除了基本类型之外其他都是对象)

     函数是一个特殊的对象,是可以拥有属性的对象,且属性可以被调用

    function Person(firstName, lastName) {
      this.firstName = firstName;
      this.lastName = lastName;
    }
    const member = new Person("Lydia", "Hallie");
    Person.getFullName = function () {
      return `${this.firstName} ${this.lastName}`;
    }
    console.log(member.getFullName());

    A: TypeError
    B: SyntaxError
    C: Lydia Hallie
    D: undefinedundefined

    这个例子告诉我们,不可以像给常规对象添加属性,如果想要一次性给所有实例添加特性,要使用原型。

    修改结果:

    Person.prototype.getFullName = function () {
      return `${this.firstName} ${this.lastName}`;
    }

     

     

  • 相关阅读:
    内存映射文件原理探索(转载)
    虚拟内存原理
    CSAPP-链接
    CSAPP-程序优化
    CSAPP-过程调用,数据存储,缓冲区溢出
    【数学,方差运用,暴力求解】hdu-5037 Galaxy (2014鞍山现场)
    【贪心+一点小思路】Zoj
    【几何模板加点小思路】hdu-4998 Rotate
    【背包问题】【出来混总是要还的...】总结+入门练手题
    【优先队列】【最近连STL都写不出来了/(ㄒoㄒ)/~~】hdu_5360/多校#6_1008
  • 原文地址:https://www.cnblogs.com/bllx/p/11981998.html
Copyright © 2020-2023  润新知