Geek-James/Blog

1.JS数据类型及数据类型转换

Geek-James opened this issue · 0 comments

数据类型

  • string
  • boolean
  • number
  • object
  • function
  • symbol(符号(ES6新增))

对象类型

  • Object
  • Date
  • Array
  • RegExp 正则
  • Function

不包含任何值的数据类型

  • null
  • undefined

JavaScript 数据类型图

JavaScript 数据类型图

typeof 操作符

可以通过typeof来查看 JavaScript 变量的数据类型。

constructor 属性

constructor 属性返回所有 JavaScript 变量的构造函数。

JavaScript 类型转换

js变量可以转换为新变量或其他数据类型

转换方式
  • 通过使用js函数转换
  • 可以通过js自身自动转换
Number 转 String
  • String()
  • toString()
  • toExponential() 把对象的值转换为指数计数法。
  • toFixed() 把数字转换为字符串,结果的小数点后有指定位数的数字。
  • toPrecision() 把数字格式化为指定的长度。
boolean 转 String
  • String()
  • toString()
string 转 Number
  • Number()
  • parseFloat() 解析一个字符串,并返回一个浮点数。
  • parseInt() 解析一个字符串,并返回一个整数。

自动转换类型

  • 当 JavaScript 尝试操作一个 "错误" 的数据类型时,会自动转换为 "正确" 的数据类型。
5 + null    // 返回 5         null 转换为 0
"5" + null  // 返回"5null"   null 转换为 "null"
"5" + 1     // 返回 "51"      1 转换为 "1"  
"5" - 1     // 返回 4         "5" 转换为 5
  • 一元运算符 +
    Operator + 可用于将变量转换为数字:
var y = "5";      // y 是一个字符串
var x = + y;      // x 是一个数字
  • 日期显示转换为数字
    一元运算符 + 的另一个常见用途是将日期(Date)对象强制类型转换为数字,返回结果为Unix时间戳。
var time = new Date()
+time
显式解析数字字符串

解析字符串中的数字和将字符串强制类型转换为数字的返回结果都是数字。但是解析和转换两者之间还是有明显的差别。比如:

var a = "42"
var b = "42px"

Number(a)   //42
parseInt(a) //42

Number(b)   //NaN
parseInt(b) //42

解析允许字符串中含有非数字字符,解析按从左到右的顺序,如果遇到非数字字符就停止。而转换不允许出现非数字字符,否则会失败返回NaN。

解析字符串中的浮点数可以使用parseFloat()函数。从ES5开始parseInt()默认转换为十进制数,除非指定第二个参数作为基数。

null和undefined之间的相等比较

在 == 中null和undefined相等,这也就是说在==中null和undefined是一回事,可以相互进行隐式强制类型转换。

  • 掌握“抽象相等比较算法”,读者可以自行推倒为什么[]==![]返回true。

  • ""、"\n"(或者" "等其他空格组合)等空字符串被ToNumber强制类型转换为0。

ToPrimitive(转换为原始值)

ToPrimitive 运算符接受一个值,和一个可选的 期望类型 作参数。ToPrimitive 运算符把其值参数转换为非对象类型。如果对象有能力被转换为不止一种原语类型,可以使用可选的 期望类型 来暗示那个类型。根据下表完成转换

注意:null是唯一一个用typeof检测会返回object的基本类型值(注意‘基本’两字)

具体的原因:

不同的对象在底层都表示为二进制
在JavaScript中二进制前三位为0的话都会被判断为object类型
null的二进制表示全是0,自然前三位也是0
所以 typeof null === “object”

参考网站: