美文网首页
1、js基础知识点

1、js基础知识点

作者: _daraDu | 来源:发表于2018-12-27 16:17 被阅读0次

    1、原始类型(基本类型)有哪些?null是对象吗?

    number、string、null、undefined、Boolean、symbol(ES6新增)
    原始类型储存的是值,是没有函数可以调用的。'1'.tostring()做了隐式转换,转换为了String类型,就是字符串的对象包装类型,所以可以调用tostring()函数

    null不是对象,虽然typeof null 会输出object,但是这是js的一个悠久bug。在js最初版本中使用的是32位系统,为了性能考虑使用低位储存变量的类型信息,000开头的是对象。而null表示为全零,所以将它错误的判断为object。虽然现在的内部类型代码判断已经改变,但是这个bug一直流传下来

    2、对象类型(引用类型)与原始类型有什么区别?函数参数是对象会发生什么问题?

    对象类型储存的是个地址,原始类型储存的是值

    3、typeof 是否能正确判断类型?instanceof 能正确判断对象的原理是什么?

    typeof能判断除null之外的所有基本类型
    instanceof正确判断对象是因为内部机制通过原型链来判断的
    valueof()返回对象的原始值

    4、如何正确判断this的指向?箭头函数的this是什么?

    function foo(){
      console.log(this.a)  //this--->window
    }
    a=1
    foo()
    
    const obj = {
      a:2,
      foo:foo
    }
    obj.foo() //this--->obj
    
    const c =new foo()  //---> c
    
    • 对于直接调用foo函数的,不管foo()位于什么位置,this指向都是window
    • 对于obj.foo(),谁调用了foo(),this指向就是谁。所以这种情况下this就是obj
    • 对于new的方式来说,this被永远绑定在了c上,不会被任何方式改变
      但是可能会发生多个规则同时出现的情况,这时候不同的规则之间会根据优先级最高的来决定 this 最终指向哪里。
      new的方式优先级>bind/apply()/call() >obj.foo() > foo()
      箭头函数的this一旦绑定,就不会被任何方式改变

      this指向流程图,图中流程只针对单个规则: this指向流程图

    相关文章

      网友评论

          本文标题:1、js基础知识点

          本文链接:https://www.haomeiwen.com/subject/nrtrlqtx.html