JavaScript-02
隐式转换的部分笔记
隐式转换
原始类型:undefined、string、number、Boolean、null、symbol
对象类型:object
-基本类型的转换
1.字符串加数字,数字就会转成字符串。数字加数字或字符串加字符串不需要转换。
只要运算过程中有字符串,结果就是字符串
var a = 1 + 2 + '3'//'出现了字符串'
console.log(a, typeof a); // '33' string
var b = 1 + 2 + 3;
console.log(b, typeof b); // 6 number
2.数字减字符串,字符串转成数字。如果字符串不是纯数字就会转成NaN。字符串减数字也一样。两个字符串相减也先转成数字。
let res = '2' - 3;
console.log(res, typeof res);//-1 number
let res2 = '2' - '3';
console.log(res2, typeof res2);//-1 number
let res3 = '2' - 'a';
console.log(res3, typeof res3);//NaN number
-理解一个Array加上number或string会得什么(object + number或string会得什么)
1、如果输入的值已经是一个原始值,则直接返回它
2、否则,如果输入的值是一个对象,则调用该对象的valueOf()方法,
如果valueOf()方法的返回值是一个原始值,则返回这个原始值。
3、否则,调用这个对象的toString()方法,如果toString()方法返回的是一个原始值,则返回这个原始值。
4、抛出TypeError异常。(基本不会出现)
let a = [4,3,2,1]
let res = a.valueOf()// 首先不是原始值,则进行[4,3,2,1] object
let res2 = res.toString()//4,3,2,1 string
//前面两步只是为了知道如何得到下面的结果的
let test = a + 100;//字符串和数字相加,转换成字符串
console.log(test,typeof test);//4,3,2,1100 string ---1100就是 1 拼接上100
object + number或string会得什么(不知道[object Object]怎么来的)
let obj = {
name:'KOBE',
no: 24
}
//现在想知道 obj + 111 = [object Object]111
//和上面步骤相同
console.log(obj.valueOf());//{ name: 'KOBE', no: 24 } object不是原始类型
console.log(obj.valueOf().toString())//[object Object] 是string
//所以
let res = obj + 111//也就是字符串加数字 结果为:[object Object]111
例子:
[]+{}; //[object object]
按照上面的步骤转换,可以得到预想的结果
{}+[]; //0
但是这里和预想的不一样,是因为这里被浏览器解析成了{}; 剩下+[ ]就成了一元运算。[ ]的原值是””, 将””转化成Number结果是0。