JS数据类型

JS中的7+2中数据类型及区别

基础数据类型

  • number
  • string
  • boolean
  • null
  • undefined
  • symbol
  • bingint

引用数据类型

  • object
  • function

数据类型检测

  • typeof 检测数据类型的逻辑运算符
  • instanceof 检测是否为某个类的实例
  • constructor 检测构造函数
  • Object.prototype.toString.call 检测数据类型

tyoeif [value] 返回当前的数据类型 “数据类型”
返回的结果都死字符串
局限性

  • typeof null = "object"
  • tyoeof undefined = "undefined"
  • typeof 不能细分对象类型(检测普通对象或者数组对象都是"object")

number类型

  • NaN:不是一个有效数字,属于number类型,NaN != NaN,他和谁都不相等 typeof NaN = "number"
  • isNaN(值):检测这个值是否为无效数字,如果不是有效数字返回TRUE,是有效数字返回FALSE
  • infinity: 无穷 属于number类型

把其他数据类型转换为数字的方法

  • 强转换(基于底层机制转换的)Number([value]
    一些隐式转换都死基于Number完成的
    • isNaN('12px')先把其他类型转换为数字在检测
    • 数学运算 '12px' - 13
    • 字符串 == 数字
    • true 1 false 0
    • null 0 undefined NaN
    • 字符串中必须保证都是有效数字才会转换为数字,否则都是NaN
  • parseInt处理的值是字符串,从字符串的左侧开始查找有效数字字符(遇到非有效数字字符则停止查找),如果处理的值不是字符串,需要先转换为字符串然后再开始查找。

+运算符

再两边出现字符串(或者对象)的情况下,加号一定是字符串拼接 ,对象本身是要转换为数字进行运算的,只不过转换数字的过程中,需要先转换为字符串,才能转化为数字,而一旦转换为字符串,就变为字符串拼接了

console.log(100 + true + 21.2 + null + undefined +"Lemon" + [] + null + 9 + false)

->NaNLemonnull9false

  • 100 + 1(true) + 21.2 + 0(null) -> 122.2 number
  • 122.2 + NaN(undefined) -> NaN number
  • NaN + 'Lemon' + '' + 'null' + '9' + 'false' -> >NaNLemonnull9fa;se

比较运算符

  • == 在进行比较的时候,如果左右两边数据类型不一致,则需要先默认转换为一致的数据类型,然后在进行比较
  • === 绝对相等,两边类型一致,值也一致才相等,类型不一样,直接不对等,不会转换

== 规则

  • 对象 == 字符串 对象转换为字符串
    [10] == '10' true
  • null == undefined(三个等于号不相等),但是和其他任何的值都不想等
    0 == null false 0在内存中开辟空间, null没有在内存中开辟空间
    NaN和谁(包括自己)都不相等
    剩下的情况都转换为数字在做比较

把其他类型转换为布尔型遵循的规则

只有

  • 0
  • NaN
  • null
  • undefined
  • ""
    这五个值是false(仅限JS引擎)
原文地址:https://www.cnblogs.com/xiaoxu-xmy/p/13633528.html