JS数据类型

数据类型

JS数据类型分为5种基本数据类型,1种引用(复杂)数据类型。

基本数据类型

  1. Number
  • 其中NaN是Number类型的一种值,NaN(数字型值):“not a number”,不是一个数,NaN是数字类型的值。0除以0为NaN。在数学运算中,如果不能得到数字,结果往往都是NaN。NaN不等于NaN
  1. String:加号拼接字符串
  2. Boolean
  3. Null:typeof null为object
  4. Undefined:又是值又是一种类型,这种类型只有undefined一个值

注意:typeof null的结果为object(js最初的版本中使用的是32位系统,为了性能考虑地位存储变量的类型信息,000开头表示为对象类型,然而null为全0,故而null被判断为对象类型)

基本数据类型之间的转换

其他值---->数字

  1. Number()函数
    字符串---->数字:纯数字字符串能变为数字,不是纯数字的字符串将转为NaN,空字符串变为0
    布尔值---->数字:true为1,false为0
    undefined---->数字:NaN
    null---->数字:0
  2. parseInt()函数:将字符串转为整数
    parseInt将自动截掉第一个非数字字符之后的所有字符以及文字,如果字符串不是以数字开头,直接转为NaN,parseInt不四舍五入
  3. parseFloat()函数:将字符串转为浮点数
    parseInt/parseFloat(true/false)为NaN,因为这两个函数本质上是将字符串变为数字,布尔值会被隐式转换为字符串,字符串true、false在parseInt/parseFloat中得到的结果为NaN

其他值---->字符串

  1. String():科学计数法和非10进制数字会被转换为10进制的字符串
    在这里插入图片描述
  2. toString()方法(更常用)

其他值---->布尔值

  1. Boolean()函数
    数字---->布尔值:0和NaN转为false,其他为true
    字符串---->布尔值:空字符串为false,其他为true
    undefined---->布尔值:false
    null---->布尔值:false
    注意:4/0为Infinity

引用数据类型

  1. object
    • object
    • json
    • array
    • function

基本数据类型与引用类型的区别

基本数据类型与引用类型有5种区别,分别为:

  1. 值不同,基本数据类型是简单的数据段;引用数据类型是那些可能由多个值构成的对象
  2. 访问机制不同,基本数据类型是按值访问的;引用数据类型是按引用访问的
  3. 对属性的支持不同,基本数据类型不能动态添加属性;引用数据类型可以动态添加
  4. 内存分配不同,基本数据类型存储在栈内存;引用数据类型存储在堆内存,相当于一个指针指向内存地址
  5. 参数传递不同,ECMAScript中所有函数的参数都是按值来传递的。基本数据类型只是把变量里的值传递给参数,之后参数和这个变量互不影响;引用数据类型传递是内存地址,所以对函数里面参数的修改会引起外部的变化

判断数据类型的方法

  1. typeof:返回值为表示类型的字符串
typeof null   //'object'
typeof []   //'object'
typeof {}   //'object'
typeof NaN  //‘number’

typeof 对对象类型的值的类型不能作出准确判断,能准确判断出基本数据类型的值

  1. instanceof:A instanceof B判断A是否为B的实例,如果是,则返回 true,不是则返回 false。instanceof检测的是原型,内部机制其实就是判断对象 A 的原型链中是否有B的原型。
'123' instanceof String //false
1 instanceof Number //false
true instanceof Boolean //false
new String('123') instanceof String //true
NaN instanceof Number //false

由于undefined和null没有构造函数,所以使用 instanceof 会报错。instanceof无法判断基本数据类型。

  1. constructor
(new Error()).constructor == Error //true
[].constructor = Array //true
undefined.constructor == undefined //报错
null.constructor == null //报错
NaN.constructor == Number //true

constructor判断undefined和null会报错

  1. Object.prototype.toString.call()
    在这里插入图片描述
    Object.prototype.toString.call()是判断数据类型最准确的方法
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值