當使用 條件判斷語句(if...else) 以及 布爾操做符(!、&&、||) 時,會調用Boolean()進行隱式類型轉換編碼
![]; // !Boolean([]); ------------> false !2; // false !null; // !Boolean(null); ------------> true !undefined; // true !0; // true if([]) consolo.log('true'); // if(Boolean([])) ... -----------> true
2 * '5'; // 10 2 * '5a'; // 2 * Number('5a') --------> 2 * NaN ------------> NaN
// num: 數值操做數 str: 字符串 obj: 對象 num + 非字符串操做數(NaN/undefined/null/false/true) = num + Number(非字符串操做數) num + str = 'numstr'; // 1 + 2 + '3' = '33' str + NaN = 'strNaN'; // '1' + NaN = '1NaN' str + null = 'strnull'; // '1' + null = '1null' str + true = 'strture'; obj + num = obj.toString() + num; // Math + 123 = '[object Math]123' obj + str = obj.toString() + str; // Math + '123' = '[object Math]123'
1 - '2' = -1; 1 - '123a' = NaN; // 1 - Numer('123a') 1 - Math = NaN; // 1 - Math.valueOf() 1 - true = 0;
4 > '2'; // true 4 > '2a'; // false 4 > Math; // false 4 > true; // true 'ab' > 'a' // true
// true 123 == '123'; 1 == true; '123' == new String(123); 123 == new String(123); null == undefined; // false null == 0; 2 == true; new String(123) == new String(123);
全等操做符不會轉換操做數spa
123 === '123'; // false null === undefined; // false
你能說說下面結果是什麼以及緣由嗎?code
[] == 0; // 1.?? {} == 0; // 2.?? 0 == {}; // 3.?? [] == {}; // 4.??
根據相等操做符的規定,當一個操做數爲對象另外一個不是時,會調用對象的valueOf()對象
[] == 0; ---------> [].valueOf() -----> '' -----> Number('') ----> 0
當兩個操做數都爲對象則會比較它們是否指向同一塊區域,而[]和{}是兩個獨立的對象,因此爲false。blog