数字自动转字符串,“+”
JavaScript会自动把数字转换成字符的,不管数字在前还是字符串在前
需要注意, “+”的运算方向是从左到右的
1 + 2 + "3"; // "33"
1 + "2" + 3; // "123"
字符串转为数字
var b = 20;
console.log(b-'10'); // 减法 输出 10
console.log(b*2); // 乘法 输出 40
console.log(b/2); // 除法 输出 10
console.log(b%2) // 求余 输出 0
数字与Boolean相加
3 + true; // 4
"++"和 “--”类型转换
var c = '10';
c++;
alert(c); // 输出 11
var d = '10';
d--;
alert(d); // 输出 9
比较运算符
alert('10' == 10) // 输出 true
alert('10' == '10') // 输出 true
“!”运算符
alert(!true); // 输出false
alert(!100); // 输出false
alert(!'Web前端开发'); // 输出 false
运算符其他之前的转换NaN
alert('Web前端开发'-10) // 输出NaN
JavaScript提供了isNaN来检测某个值是否为NaN,但是,这也不太精确的,因为,在调用isNaN函数之前,本身就存在了一个隐式转换的过程,它会把那些原本不是NaN的值转换成NaN的,如下:
isNaN("foo"); // true
isNaN(undefined); // true
isNaN({}); // true
isNaN({ valueOf: "foo" }); // true
对象是可以转换成原始值的,最常见的方法就是把它转换成字符串,如下:
"the Math object: " + Math; // "the Math object: [object Math]"
"the JSON object: " + JSON; // "the JSON object: [object JSON]"
类似的,对象也是可以转换成数字的,他是通过valueOf函数的,当然,你也是可以自定义这个valueOf函数的,如下
"J" + { toString: function() { return "S"; } }; // "JS"
2 * { valueOf: function() { return 3; } }; // 6
如果,一个对象同时存在valueOf方法和toString方法,那么,valueOf方法总是会被优先调用的,如下
var obj = {
toString: function() {
return "[object MyObject]";
},
valueOf: function() {
return 17;
}
};
"object: " + obj; // "object: 17"