转自别人的解释
输出以下代码运行结果
1 + "1"
2 * "2"
[1, 2] + [2, 1]
"a" + + "b"
1 + "1"
加性操作符:如果只有一个操作数是字符串,则将另一个操作数转换为字符串,然后再将两个字符串拼接起来
所以值为:“11”
如果操作数是数字加undefined
,那么结果就是NAN
如果操作数是两个字符串,就执行字符串相连操作
2 * "2"
乘性操作符:如果有一个操作数不是数值,则在后台调用 Number()将其转换为数值
所以值为4
[1, 2] + [2, 1]
Javascript中所有对象基本都是先调用valueOf方法,如果不是数值,再调用toString方法。2与2之间没有逗号,可以直接相连。
所以两个数组对象的toString方法相加,值为:"1,22,1"
"a" + + "b"
后边的“+”将作为一元操作符,如果操作数是字符串,将调用Number方法将该操作数转为数值,如果操作数无法转为数值,则为NaN。第一个+
操作符则会承担连接字符串作用。
所以值为:"aNaN"
9.22二更
关于tosring(),valueOf()
方法
var obj={
valueOf(){
return 'value'
},
toString(){
return 'string'
},
get getname(){
return 'getting'
}
}
alert(obj) //string
console.log(obj) //{ valueOf: [Function: valueOf],toString: [Function: toString],get: [Function: get] }
几个问题:
1.为什么alert
和console.log
输出不一样?
console.log() 可以打印任何类型的数据。而 alert() 只能输出string,如果alert输出是对象会自动调用 toString() 方法。如果想 console.log() 输出的与alert相同,需要调用 toString()。
网友评论