// 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

  1. 其他形式划分:
    值类型: undefined, null, string, number, boolean
    引用类型: object, array, function

  2. ps: javascript数据类型和数据结构js数组和对象部分

2.三种类型转换

1.将值转换为基础数据类型(ToPrimitive(input, PreferredType),)

  1. input为Date类型, 则PreferredType标记为string, 先进行toString, 后valueOf, 最后抛出TypeError, 执行过程中结果为基础类型则返回
  2. input为其他类型, 则PreferredType标记为number, 先进行valueOf, 后toString, 最后抛出TypeError, 执行过程中结果为基础类型则返回

2.将值转换为number(ToNumber,Object.prototype.valueOf())
3.将值转换为string(ToString,Object.prototype.toString())

  • 1.valueOf会转换Number, Boolean, String这几种构造函数创建的值为原始值; Date会被转换为毫秒; 其他返回本身
  1. 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 () {}"

文章参考