隐式类型转换

数字自动转字符串,“+”

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"



猜你喜欢

转载自blog.csdn.net/qq_37746973/article/details/81010057