x 和 y 如果是同类型,js比较他们的值或者对象值,其他情况就会返回false
toNumber 方法对不同类型返回的结果如下:
值类型 | 结果 |
undefined | NaN |
null | 0 |
布尔值 | 如果是true,返回1;若为false,返回0 |
数字 | 数字对应的值 |
字符串 | 将字符串解析成数字,如果字符串包含字母,返回NaN; 如果是由数字字符组成,转换成数字 |
对象 | Number (toPrimitive(obj)) |
toPrimitive 方法对不同类型返回的结果如下:
值类型 | 结果 |
对象 | 如果对象的valueOf 方法的结果是原始值,返回原始值;如果对象的 toString 方法返回原始值,就返回这个值,其他情况都返回一个错误 |
一些小例子:
console.log('singledog'? true:false); //true
console.log('singledog' == true)//false---因为布尔值被toNumber转化成数字1,'singledog' 用
//toNumber 转成NaN(因为字符串内有字母),判断 NaN == 1
console.log('singledog' == false)//false ---因为 最终判断 NaN == 0 ,所以false
=== 操作符 ,比较两个值类型不同,返回false,若类型相同则按照以下表格判断
类型x | 类型y | 结果 |
数字 | x 和 y 数值相同,但不是NaN | true |
字符串 | x和y是相同的字符 | true |
布尔值 | x和y同时为 true 或者同时为 false | true |
对象 | x 和 y 引用同一个对象 | true |
比如:
let person1 = { name: 'Pony '};
let person2 = { name: 'Pony '};
console.log(person1 === person2) //false 因为这是两个不同的对象
**各种数值类型转换成 布尔值:**
undefined 和 null 转换成 布尔值都是 false
布尔值: true 是 true ,false 是 false;
数字: +0, -0 和NaN 都是转换成 false,其他的数字都是true
字符串: 空字符串转换成 false,其他的字符串都是true
对象: 转换成布尔值都是 true
例子:
```
function testTrue(val){
return val ? console.log('true') : console.log('false);
}
testTrue(true); // true
testTrue(false); // false
testTrue(new Boolean(false));// true ----对象转换成布尔值始终为true
testTrue(‘ ’); //false ----空字符串false
testTrue('false'); //true
testTrue(new String(' ')); //true 创建的是字符串对象,对象皆 true
testTrue(1); //true
testTrue(-1); // true
testTrue(NaN); //false
testTrue(new Number(NaN)); // true 创建的是 数字对象,true
testTrue(0); // false
testTrue({}); // true 对象皆为true
let obj = {
name: ' Pony '
};
testTrue(obj);// true
testTrue(obj.name); // true
testTrue(obj.age); //false 因为obj.age不存在
```
至于类型转换,可以查看网上的教程:JavaScript类型转换