标签:web func convert var function 报错 top 参数 --
一、if()中的布尔判断
if ( Expression ) 表达式会通过ES5定义的ToBoolean方法强制把Expression 转换成布尔值。
| 数据类型 | 转换结果 |
| Undefined | false |
| Null | false |
| Boolean | 不变 |
| Number | +0, ?0, or NaN 转换为false; 其他的转换为true. |
| String | 空字符串或长度为0的字符串转换为false; 其他的转换为true. |
| Object | true |
示例:
var trutheyTester = function(expr) { return expr ? "truthey" : "falsey"; } trutheyTester({}); //truthey (an object is always true) trutheyTester(false); //falsey trutheyTester(new Boolean(false)); //truthey (an object!) trutheyTester(""); //falsey trutheyTester(new String("")); //truthey (an object!) trutheyTester(NaN); //falsey trutheyTester(new Number(NaN)); //truthey (an object!)
二、==
会对不同类型的数据进行强制转换以比较,记住两点即可:
| Type(x) | Type(y) | Result |
| x和y是同一种数据类型 | 和===判断原则一样一样 | |
| null | Undefined | true |
| Undefined | null | true |
| Number | String | x == toNumber(y) |
| String | Number | toNumber(x) == y |
| Boolean | (any) | toNumber(x) == y |
| (any) | Boolean | x == toNumber(y) |
| String or Number | Object | x == toPrimitive(y) |
| Object | String or Number | toPrimitive(x) == y |
| otherwise… | false | |
toNumber()的转换规则:
| 形式参数类型 | 结果 |
| Undefined | NaN |
| Null | +0 |
| Boolean |
true -->1; false-->+0; |
| Number | 不变 |
| String | “abc” -> NaN “123” -> 123 |
| Object |
1. Let primValue be ToPrimitive(input argument, hint Number). |
ToPrimitive()转换规则:
| 形式参数 | 结果 |
| Object | (在做相等判断进行强制转换时)先调用valueOf(),没有返回值再调用toString(),还没有返回值则报错。 |
| otherwise… | 不变 |
示例:
[0] == true;
1 //EQUALITY CHECK... 2 [0] == true; 3 4 //HOW IT WORKS... 5 //convert boolean using toNumber 6 [0] == 1; 7 //convert object using toPrimitive 8 //[0].valueOf() is not a primitive so use... 9 //[0].toString() -> "0" 10 "0" == 1; 11 //convert string using toNumber 12 0 == 1; //false!
“potato” == true;
//EQUALITY CHECK... "potato" == true; //HOW IT WORKS... //convert boolean using toNumber "potato" == 1; //convert string using toNumber NaN == 1; //false!
“potato” == false;
//EQUALITY CHECK... "potato" == false; //HOW IT WORKS... //convert boolean using toNumber "potato" == 0; //convert string using toNumber NaN == 0; //false!
object with valueOf;
//EQUALITY CHECK... crazyNumeric = new Number(1); crazyNumeric.toString = function() {return "2"}; crazyNumeric == 1; //HOW IT WORKS... //convert object using toPrimitive //valueOf returns a primitive so use it 1 == 1; //true!
object with toString;
//EQUALITY CHECK... var crazyObj = { toString: function() {return "2"} } crazyObj == 1; //HOW IT WORKS... //convert object using toPrimitive //valueOf returns an object so use toString "2" == 1; //convert string using toNumber 2 == 1; //false!
三、===
值和类型都必须严格相等:
| 数据类型 | 值 | 结果 |
| 二者类型不同 | false | |
| Undefined or Null | true | |
| Number | 二者值相等,除了NaN | true |
| String | 二者包含相同的字符 | true |
| Boolean | 二者都是true或false | true |
| Object | 二者引用自同一个对象 | true |
| otherwise… | false | |
参考资料:
1. 《Truth, Equality and JavaScript 》:https://javascriptweblog.wordpress.com/2011/02/07/truth-equality-and-javascript/
JavaScript if(x),==和===解析(翻译整理)
标签:web func convert var function 报错 top 参数 --
原文地址:http://www.cnblogs.com/wuyanshun/p/6837954.html