JS 隐式类型转换
// 1.
const a = {
i: 1,
toString: function () {
return a.i++;
}
}
if (a == 1 && a == 2 && a == 3) {
console.log('hello world!');
}
// 2.
({} + {}) = ?
// 3.
2 * {} = ?
1.数据类型
1.基础数据类型:
Undefined,Null,Boolean,Number,String,Symbol
2.复杂数据类型:
Object
其他形式划分:
值类型: undefined, null, string, number, boolean
引用类型: object, array, function
2.三种类型转换
1.将值转换为基础数据类型(ToPrimitive(input, PreferredType),)
- input为Date类型, 则PreferredType标记为string, 先进行toString, 后valueOf, 最后抛出TypeError, 执行过程中结果为基础类型则返回
- input为其他类型, 则PreferredType标记为number, 先进行valueOf, 后toString, 最后抛出TypeError, 执行过程中结果为基础类型则返回
2.将值转换为number(ToNumber,Object.prototype.valueOf())
3.将值转换为string(ToString,Object.prototype.toString())
- 1.valueOf会转换Number, Boolean, String这几种构造函数创建的值为原始值; Date会被转换为毫秒; 其他返回本身
- toNumber: undefined => NaN、null => +0、boolean => true/1, false/0、number => number、string => number/NaN、obj => toPrimitive(input, number)(valueOf) => ToNumber
- 2.toString转换如下:
var num = new Number('123sd');
num.toString(); // 'NaN'
var str = new String('12df');
str.toString(); // '12df'
var bool = new Boolean('fd');
bool.toString(); // 'true'
var arr = new Array(1,2);
arr.toString(); // '1,2'
var d = new Date();
d.toString(); // "Wed Oct 11 2017 08:00:00 GMT+0800 (中国标准时间)"
var func = function () {}
func.toString(); // "function () {}"