1、js基础知识点

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指向流程图
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容