JS基础知识(一)

1.原始类型

在JS中存在6种原始类型,分别是:

  • boolean
  • null
  • underfined
  • string
  • number
  • symbol
    首先原始类型存储的都是值,是没有函数可以调用的,比如underfined.toString()。
    但’1’.toString()却可以使用,是因为’1’被强制转换成了String类型也就是对象类型(包装类型),所以可以调用toString函数。

2.对象类型

对象类型和原始类型有什么不同之处呢?函数参数是对象会发生什么问题呢?

  • 对象类型与原始类型的不同之处在于,原始类型存储的使值,而对象类型存储的是地址(指针),当你创建一个对象类型的时候,计算机会在内存中帮我们开辟一个空间来存放值,但我们需要找到这个空间,这个空间会拥有一个地址。
  • 函数参数是对象的情况
  • typeof vs instanceof:typeof是否能正确判断类型?instanceof能正确判断对象的原理是什么?
    typeof对于原始类型来说,除了null都可以显示正确的类型,typeof对于对象来说,除了函数都会显示object,所以typeof并不能准确判断变量到底是什么类型。
    如果我们想判断一个对象的正确类型,这时候可以使用instanceof,因为内部机制是通过原型链来判断的。对于原始类型来说,想直接通过instance来判断类型是不行的。
  • 类型转换
    在JS中类型转换只有三种情况,分别是:
    1.转换为布尔值
    2.转换为数字
    3.转换为字符串
  • this
    1.作为普通函数的this,直接指向window
    2.作为构造函数的this,指向实例化的对象
    3.作为对象属性的函数内的this,指向调用这个函数的对象
    4.作为箭头函数的this,this至取决于包裹箭头函数的第一个普通函数的this。另外对箭头函数使用bind这类函数是无效的。
    5.对于bind、apply、call这类改变上下文的API,对于这些函数来说,this取决于第一个参数,如果第一个参数为空,那么this指向window。
    以上就是this的规则了,但是可能会发生多个规则同时出现的情况,这时候不同的规则之间会根据优先级最高的来决定this最终指向哪里。
    首先,new方式的优先级最高,接下来是bind这些函数,然后是obj.foo()这种调用方式,最好是foo这种调用方式,同时,箭头函数的this一旦被绑定,就不会再被任何其他方式所改变。

你可能感兴趣的:(Javascript)