JavaScript数据类型转换总结

个人github博客 github.com/zhuanyongxi…git

数据类型的转换

在JS中,引用数据类型转换为原始数据类型转换只有三种状况:github

  • 转换为布尔值;
  • 转换为数字;
  • 转换为字符串。

换一种方式来表达,在JS中,全部的数据均可以去转(注意这里的用词,是“转”,不是“转成”)布尔值、数字和字符串(并不必定能成功)。数组

转成布尔值函数

很是简单,除了undefined、null、“”、NaN、0、-0、false以外,全都是true。ui

转成字符串spa

也很是的简单,须要注意的有四个:数组、对象、函数、symbol。code

其实重要的就是数组和对象。对象

function fn() {
  console.log("Hello World");
}
console.log(String([1, 2]));	// "1,2"
console.log(String({}));	// "[object Object]"
console.log(String(fn));	
// "function a() {window.runnerWindow.proxyConsole.log(\"Hello World\");}"
console.log(String(Symbol('foo')));	// "Symbol(foo)"
复制代码

转成数字blog

在JS中,转数字比较复杂。经常使用的转换数字的方法有:Number、parseInt和parseFloat。其中Number在转字符串的时候若是遇到有非数字的东西,会返回NaN,因此也被称为强制转换。另外两个是从左到右一位一位的转换,因此也被成为非强制转换。内存

Number方法

与一元操做符+的效果相同。即Number("1")+"1"相同。

  • Boolean,true和false分别是1和0;
  • 数字返回数字;
  • null返回0;
  • undefined返回NaN;
  • Symbol会抛错;
  • 若是是字符串:
    1. 空字符串转为0;
    2. 只包含数字的状况,Number会消除前导的0,好比“001”,转换以后就是1。浮点格式与整数相同。
    3. 若是字符串包含除数字之外的其余字符(字符串开头能够有正负号),都会转为NaN。
  • 若是是对象,先转成字符串,再把字符串转成数字。

若是是四则运算,字符串的优先级最高,数字第二。意思就是若是相加的遇到了字符串,则不是字符串的转化为字符串,若是没有字符串,有一个数字,则不是数字的转化为数字。

数据类型的比较(隐式转换)

  1. NaN与任何值都不相等,包括它本身。
  2. 对象与对象比较,比较的是否是指向同一个内存地址
  3. 对象与字符串比较,对象先转化为字符串,而后作比较
  4. 对象与布尔类型值比较,两边都要先转为数字(false是0,true是1)。对象类型的值先隐式调用toString方法,在隐式调用Number方法
  5. 对象与数字比较,对象转化为数字再比较(先隐式调用toString方法,再隐式调用Number方法将对象转化为数字)
  6. 数字与布尔类型值比较,就是进行数字的比较
  7. 数字与字符串的比较,把字符串转化为数字,再比较
  8. 布尔与布尔,两边都转化为数字再比较
  9. null与undefined比较,true
  10. null、undefined与其余类型比较,结果都是false,由于他们俩没有toString方法

简化版

  1. 只要有数字和布尔值的,都转换成数字进行比较;
  2. 对象与对象比较,比较的是否是指向同一个内存地址;
  3. 对象与字符串比较,对象先转化为字符串,而后作比较;
  4. null、undefined、NaN与其余类型比较,null和undefined除了本身以外,相互比较也是相等的,此外与其余类型比较,结果都是false,由于他们俩没有toString方法。其中NaN与任何比较都是false(包括本身)。
// 1,
1 == "1"; // true
1 == true;  // true

// 2,
var obj1 = {}
var obj2 = {}
var obj3 = obj1
obj1 == obj2 // false
obj1 == obj3 // true

// 3,
{} == "{}" // false,对象{}转化为字符串是"[object Object]"

// 4,
null == null // true
undefined == undefined // true
null == undefined // true
"" == null // false
NaN == NaN // false

复制代码
相关文章
相关标签/搜索