JS的数据类型

原始(Primitive)类型

在 JS 中,存在着 6 种原始值,分别是:

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

首先原始类型存储的都是值,是没有函数可以调用的。但注意有的基本类型会在调用函数时被强制转换!例如:‘1’.toString()。

原始类型中存在的一些坑:

  1. JS 的 number 类型是浮点类型的,在使用中会遇到某些 Bug,比如 0.1 + 0.2 !== 0.3 ,因为所有的小数都只是一个近似值。

  2. string 类型是不可变的,无论你在 string 类型上调用何种方法,都不会对值有改变。

  3. 对于 null 来说,很多人会认为他是个对象类型,其实这是错误的。虽然 typeof null 会输出 object。那是因为在 JS 的最初版本中使用的是 32 位系统,为了性能考虑使用低位存储变量的类型信息,000 开头代表是对象,然而 null 表示为全零,所以将它错误的判断为 object

对象(Object)类型

对象类型和原始类型不同的是,原始类型存储的是,对象类型存储的是地址(指针)。当我们将变量赋值给另外一个变量时,复制的是原本变量的地址(指针),若修改其中一个,则另一个也是相同的变化。

若函数参数是对象的话:

  • 首先,函数传参是传递对象指针的副本

  • 到函数内部修改参数的属性这步,原本的对象值也会发生相应的改变

类型判断之 typeof vs instanceof

typeof 对于原始类型来说,除了 null 都可以显示正确的类型。typeof 对于对象来说,除了函数都会显示 object,所以说 typeof 并不能准确判断变量到底是什么类型。

typeof null //“object”

typeof console.log // ‘function’

想判断一个对象的正确类型,这时候可以考虑使用 instanceof,因为内部机制是通过原型链来判断的。但instanceof 也不是百分之百可信的,特别是当存在多个frame或多个window之间的交互时,instanceof所给出的结果有可能是错误的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值