* 创建一个变量值两种方式
* 1.字面量
* 2.构造函数
* 对于基本类型来说,第一种方式创建的是 值类型,第二种方式创建的是 引用类型,但是不论哪一种类型都是当前类的一个实例。
* 把一个对象转换为字符串、数字:
1.先调用其valueOf这个方法,如果返回了对应的原始值(值类型), 接下来会基于原始值进行相关的操作
2.如果没有对应的原始值,才去调用toString
3.Number、String、Boolean、Symbol、BigInt这些类的原型上都有自己的valueOf方法,可以获取原始值[[PrimitiveValue]]
4.基本上数据类型的类的原型上都有自己的toString,但是只有基本类型所属类的原型上才有valueOf,引用类型只有Object的原型上才有valueOf(Date比较特殊,它的原型上也有valueOf)
let obj1 = {};
let obj2 = new Object();
let arr1 = [10];
let arr2 = new Array(10);
let n1 = 10;
let n2 = new Number(10);
console.log(n2 + 10); // => 20
let arr = [10];
console.log(arr + 10); // => "1010"
// 补充:对象转Number,Number函数
const obj = {
valueOf() {
// return 'aaa'
// return [11, 22]
return {name: '哈哈'}
},
toString() {
return 33
}
}
console.log(obj.valueOf())
console.log(obj.toString())
// 返回基本数据类型,则结果是NaN,说明此时不会去调用toString;返回引用类型,则结果是33,说明此时会去调用toString
console.log(Number(obj))