类型转化
定义: Js中的类型是针对值来说,而不是针对变量,值就是所谓的42, ‘abc’, false 等能用js 操作的数据。在js 中说某某某是什么数据类型,其实是说的这些值是什么类型。主要分为两种类型:
- 基本数据类型: number Boolean string null undefined
- 引用型数据类型: array object function 等
**判断一个数据是什么类型的,一般使用typeof()来判断
一. 其他类型转化为number类型
- 转化规则:
- 一般数字字符转化的都是数字;
- 空字符串和纯空格字符串转化为0;
- 其他字符转化的是NaN (NaN不能进行运算, 如果运算要么是NaN,要么是false );
- true 转化为1, false转化为0 .
- 其他类型隐式转为number类型实例:
- 发生隐式转化相当于触发了Number( )函数;
var num = 12; //--> 12
var str = `123`; //--> 123
var str1 = `非字符字符`; //--> NaN
var str2 = ` `; //--> 0
var str3 = ``; //--> 0
var boo1 = true; //--> 1
var boo2 = false; //--> 1
- 运算时发生隐式转化(触发了Number ( ) )的具体步骤:
var res = `234` - 1; // 233 触发隐式转换Number()
// 234 - 1
// 233
var res1 = `非数字字符` - 1; // NaN
// `NaN` - 1 ( 由于NaN不能进行运算,所以结果为NaN )
// NaN
var arr1 = [1, 2, 3] - 1 // NaN (由于','不是数字字符,转化为NaN)
// `1,2,3` - 1
// NaN - 1
// NaN
var arr2 = [1] - 1 // 0
// `1` - 1
// 1 - 1
// 0
var arr3 = [] // 0
// `` = 0
总结:
如果是引用型数据类型运算,先转化为字符串,再转其他类型,最后在运算;
基本类型数据之间的相互转化只转一次, 引用类型转基本类型 先变字符串 再变其他.
二. 其他类型转化为string类型
- 转化规则:
- 一般基本数据类型都会转化为自身的字符串类型;
- 引用型数据类型空数组转化为空字符串;
- 非空数组转化为其数组对应的字符串
- 注意: 无论是空对象还是非空对象,转化的都是’[object Object]’
- 其他类型隐式转为string类型实例:
- 发生隐式转化相当于触发了String( )函数;
console.log(String(123)); // --> '123'
console.log(String(true)); // -->'true'
console.log(String(``)); //-->''
console.log(String(undefined)); // -->'undefined'
console.log(String(null)); // -->'null'
console.log(Number(String([]))); //-->'0'
console.log(String([1,2,3])); // -->'1,2,3'
console.log(String({})); //-->'[object Object]'
console.log(String({name:`qwe`})); //-->'[object Object]'
- 运算时引用型数据类的隐式转化:
var res = [123,12]+{}
// `123,12`+`[object object]`
// `123,12[object object]`;
console.log(res);
三. 其他类型转化为Boolean类型
- 转化规则:
- 基本数据类型: 0 false null undefined ‘’ NaN 转化为false;
- 引用型数据类型: 数组 对象 函数转化为true;
- 什么情况下会隐式转化为布尔类型?
个别情况关系运算符 和 比较运算符 例如 : > < >= <== == !=
- 其他类型隐式转为Boolean类型实例:
- 发生隐式转化相当于触发了Boolean( )函数;
console.log(Boolean(false)); // false
console.log(Boolean(0)); // false
console.log(Boolean(``)); // false
console.log(Boolean(undefined)); // false
console.log(Boolean(NaN)); // false
console.log(Boolean(null)); // false
console.log(Boolean([])); // true
console.log(Boolean({})); // true
console.log(Boolean(function(){})); // true