JavaScript 数据类型总结及相关面试题

JavaScript数据类型

  • 基本数据类型
  • number
    • NaN
    • Infinity
  • string
  • boolean
  • null
  • undefined
  • symbol
    • static Symbol
    • Symbol.prototype
  • bigint
  • 引用数据类型
  • object
    • 普通对象
    • 数组对象
    • 正则对象
    • 日期对象
    • Math数学函数对象
    • JSON对象
    • Set
    • Map
  • function
    • 普通函数
    • 箭头函数
    • 构造函数
    • 生成器函数
    • 匿名函数
    • 自调用函数

数据类型检测

  • typeof 检测数据类型的逻辑运算符
  • instanceof 检测是否为类的实例
  • constructor 检测构造函数
  • Object.prototype.toString.call 检测数据类型
typeof [value] 返回当前值的数据类型,返回的数据类型是字符串
  • 返回的结果都是字符串
  • 局限性:
    • typeof null => “object” 类型
    • typeof 不能细分对象类型(检测普通对象或数组对象等都是返回"object")
  • 原理:
    • 所有的数据类型值在计算机中都是按照“二进制”进行存储
    • null的二进制值是“000000”
    • 只要是对象都是以“000”开始的
    • typeof检测时是按照计算机存储的二进制值来检测的,所以检测null时也是返回“object”
把其它数据类型转换为数字的方法:
  • 强转换(基于底层机制转换) Number(value)
    • 一些隐式转换是基于Number完成的
      • isNaN(‘12px’) 先把其它类型值转换为数字再检测
      • 数学运算 “12px” - 13
      • 字符串 == 数字 两个等于号比较很多时候也是要把其它类型值转换为数字
  • 弱转换(基于额外的方法转换)parseInt(value)/parseFloat(value)

数据类型转换及面试题:

  • typeof
let a = typeof typeof typeof [12,23]
console.log(a) //"string"
/* 步骤分析
 * typeof [12,23]  => "object"
 * typeof "object" => "string"
 * typeof "string" => "string"
*/
  • NaN 跟任何值都不相等,包括它自己,与任何值相加都是NaN
let res = parseFloat("left:200px");
if(res === 200){
   
	alert(200);
}else if(res === NaN){
   
	alert(NaN)
}else if(typeof res === "number"){
   
	alert("number")
}else{
   
	alert("Invalid Number")
}
//结果:字符串number => 'number'
  • 类型转换规则
  • parseInt/parseFloat 处理的值是字符串,先从字符串左侧开始查找有效数字字符(遇到非有效数字字符则停止查找) 如果处理的值不是字 符串,需要先转换为字符串然后再开始在开始查找
  • parseInt([value],[radix])传2个参数的转换规则:
    • [radix]表示是一个进制,不写或者写0默认都是按照10进制处理,(特殊情况:如果value是以0x开头则默认是16进制)
    • 进制有一个取值范围:2-36之间,如果不在这个范围内,则转换结果一定是NaN
    • 把value看做是radix进制,最后把radix进制转换为10进制
  • Number 直接调用浏览器最底层的数据类型检测机制来完成
    + true 1 flase 0
    + null 0 undefined NaN
    + 字符串中必须保证都是有效数字才会转换为数字,否则都是NaN
  • == 两个等号比较时
    + 对象==字符串,对象转换为字符串
    + null == undefined 返回true (===返回false),但是和其它值都不相等
    + 0 == null 返回false null和undefined在进行等号比较时不进行数据类型转换
    + 其余两边不同都转换为数字
  • === 三个等号比较时:两边类型一致,值也一致才相等,类型不一样直接不对等,不会转换
  • 0 NaN null undefined “” 转换为布尔类型都是false,其余的都是true
  • 对象类型参与运算规则
  • 大括号与运算符结合:
    + 大括号在运算符前面并且没有小括号处理优先级,则不认为是数学运算,加了小括号后才会运算
    + 如果大括号出现在运算符后面则认为是数学运算
  • 普通对象toString()是调用Object.prototype.toString()用来检测数据类型的,返回’[object Obj
  • 2
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值