类型和类型强制转换

前言

靓仔,你知道JavaScript的内置类型有几种吗?
你晓得如何正确安全地使用类型间强制转换吗?
对于JavaScript语法/句法中的微妙细节,你的熟悉程度又如何呢?

类型

首先要了解JavaScript的内置类型有如下几种:

  1. null
  2. undefined
  3. boolean
  4. number
  5. string
  6. symbol
  7. object
    除了对象以外,其他都是基本类型

原生函数

常用原生函数有:

  1. String()
  2. Number()
  3. Boolean()
  4. Array()
  5. Object()
  6. Function()
  7. RegExp()
  8. Date()
  9. Error()
  10. Symbel()

强制类型转换

将值从一种类型转换为另一种类型通常陈伟类型转换,这时显示的情况;影视的情况称为强制类型转换,并且强制类型转换只返回标量基本类型,不会返回对象或函数;
(类型转换发生在静态类型语言的编译阶段,而强制类型转换则发生在动态类型语言的运行时)

抽象操作和转换规则


ToString

抽象操作ToString,它负责处理非字符串到字符串的强制类型转换
基本类型值的字符串化规则为:null转换为"null",undefined转换为"undefined",true转换为"true"。数字的字符串化则遵循通用规则。
对普通对象来说,除非自行定义,否则toString()(Object.prototype.toString())返回内部属性[[class]]的值,如"[object Object]"


ToNumber

抽象操作ToNumber,true转换为1,false转换为0.undefined转换为NaN,null转换为0.
ToNumber对字符串的处理基本遵循数字常量的相关规则。处理失败返回NaN。
对于对象会首先被转换为相应的基本类型值,如果返回的是非数字的基本类型值,则再遵循以上规则将其强制转换为数字


ToBoolean

假值:
undefined
null
false
+0、-0、NaN
""
其他的都转换为true

==和=====的坑

==允许再相等比较重进行强制类型转换,而===不允许。
并且对于==相等比较,有如下规则:

  1. 字符串和数字之间的比较
    如果Type(x)是数字,Type(y)是字符串,则返回x == ToNumber(y)的结果
    如果Type(x)是字符串,Type(y)是数字,则返回ToNumber(x) == y的结果
  2. 其他类型和布尔类型之间的比较
    如果Type(x)是布尔类型,则返回ToNumber(x) == y的结果
    如果Type(y)是布尔类型,则返回x == ToNumber(y)的结果
  3. null和undefined之间的相等比较
    在==中null和undefined相等(也与自身相等),除此之外与其他值都不相等
  4. 对象与非对象之间的相等比较
    如果Type(x)是字符串或数字,Type(y)是对象,则返回x == ToPrimitive(y)的结果
    如果Type(x)是对象,Type(y)是字符串或数字,则返回ToPrimitive(x) == y的结果

最后还有一点少见的情况就不给予阐述了,怕太多了看着烦。
就给出两个很原则有效地避免出错。
如果两边的值中有true或者false,千万不要用==
如果两边的值中有[]、""或者0,尽量不要使用==。

posted @ 2021-09-12 14:32  卿六  阅读(165)  评论(0编辑  收藏  举报