【JS】数据类型

数据类型

原始类型(值引用)(保存在栈中)

  1. Number:浮点数,存在精度误差问题

  2. BigInt:精度更大

  3. String:采用UTF-16 格式存储,但是对 UTF-16 的支持是不完整的

只支持两字节的字符,不支持四字节的字符

  1. Boolean

    • 只有undefinednull0NaN‘’ 会转为false

      • 注意:[]{} 是会转为true

      • if 等流控制语句会自动给进行布尔值的转换

  2. Symbol

  3. Undefined

    • 只声明但未赋值的变量(不建议,声明和初始化建议一起执行)
    • 不存在的变量
    • 函数没有return
  4. Null:空对象指针

    • 建议使用 null 来初始化变量

引用类型(地址引用)(保存在堆中)

  • 对象:键名是字符串类型
  • 数组
  • 函数
  • JSON
  • Date
  • Error

判断数据类型

typeof

  • 两个特殊的情况:

    • typeof null 结果为Object
    • typeof 函数 结果为function
  • js在存储时,二进制的头3位用于标记数据类型

    • Object000
    • null表示空值所以也为000

instanceof

  • 作用:检测构造函数的 prototype 属性是否出现在某个实例对象的原型链上。

  • 实例对象 instanceof 构造函数

【面试题】

为什么?

Object instanceof Function //true
Function instanceof Object //true
  • js自带的构造函数都是由Function()实例化生成的,所以都继承于Function.prototype
  • 对象都继承于Object.prototype

Object.prototype.toString

Object.prototype.toString.call(this);
  • 原理:调用后,会查找this对象的[[Class]]属性的值,并与[object]进行字符串拼接

包装函数

  • 原始类型没有方法或属性,通过包装函数可以实现

  • 包装函数:会将原始类型暂时转为引用类型,使其能调用相应的方法

    let num=10
    num.toString() //'10'
    
  • 与引用类型的区别:生命周期不同,包装后的引用类型只在其所在的那行代码中有效,也就是说在包装后会变回其最初的原始类型

    let b=Boolean(false)
    b instanceof Boolean //false
    b instanceof Object  //false
    //b在包装后会变回其最初的原始类型,instanceof 左侧只有是引用类型才好使
    typeof b  //'boolean'
    
  • Object() :根据参数类型,实例化其包装函数

    let obj = Object("some text");
    console.log(obj instanceof String); // true 实例化了
    
  • nullundefined没有包装函数


数据类型的转换

  • 强制转换:内部会有valueOf()toString()的运用(Date比较特殊,相反)

  • 自动转换:预期什么类型的值,就调用该类型的函数。

    • 如果该位置既可以是字符串,也可能是数值,那么默认转为数值
Object.prototype.toString()返回值
Object“[object 数据类型]”
Array“元素,元素,…”
Function“函数源码”
Date“日期”
Number返回字符串,参数代表进制,默认十进制
其他原始类型“值”
Object.prototype.valueOf()返回值
Object在堆中的值,{…}
Array在堆中的值,[…]
Function函数源码(没有function开头)
Date1970 年 1 月 1 日开始的毫秒数
原始类型对应的值

BigInt

BigInt数据类型精度范围更大,解决js的精度问题,必须添加后缀n

  • BigInt 不能与普通数值进行混合运算
  • 开头不能使用+
  • BigInt 与字符串混合运算时,会先转为字符串,再进行运算
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值