## 基本数据类型 - String - Number - undefined - Obejct - boolean ## ==与=== ==会进行类型转换后再进行比较,而===不会转换直接比较 ## 内置对象有哪些 - Object - Array - Boolean - Number - String - Function - Date - RegExp - Error ## Number类型转换 原始类型值 ```js Number(324) // 324 Number('324') // 324 Number('324abc') // NaN Number('') // 0 Number(true) // 1 Number(false) // 0 Number(undefined) // NaN Number(null) // 0 parseInt('42 cats') // 42 parseInt('a42 cats') // NaN parseInt('4a2 cats') // 4 parseInt(' 42 cats') // 42 Number('42 cats') // NaN Number(' 42') // 42 ``` 对象 ``` Number({a: 1}) // NaN Number([1, 2, 3]) // NaN Number([5]) // 5 ``` 第一步,调用对象自身的valueOf方法。如果返回原始类型的值,则直接对该值使用Number函数,不再进行后续步骤。 第二步,如果valueOf方法返回的还是对象,则改为调用对象自身的toString方法。如果toString方法返回原始类型的值,则对该值使用Number函数,不再进行后续步骤。 第三步,如果toString方法返回的是对象,就报错。 ## String数据类型转换 ``` String(123) // "123" String('abc') // "abc" String(true) // "true" String(undefined) // "undefined" String(null) // "null" String({a: 1}) // "[object Object]" String([1, 2, 3]) // "1,2,3" ``` ## Boolean数据类型转换 ``` Boolean(undefined) // false Boolean(null) // false Boolean(0) // false Boolean(NaN) // false Boolean('') // false Boolean(false); // false Boolean(new Boolean(false)); // true //其他的都是 true ``` 对象的布尔值为true。 ## 自动转换 预期什么类型的值,就调用该类型的转换函数。 ``` //转换为boolean if && || ! ?: //转换成字符串 //包含字符串相加 //转换成数值 //除了加法运算符(+)有可能把运算子转为字符串,其他运算符都会把运算子自动转成数值。 '5' - '2' // 3 '5' * '2' // 10 true - 1 // 0 false - 1 // -1 '1' - 1 // 0 '5' * [] // 0 false / '5' // 0 'abc' - 1 // NaN null + 1 // 1 undefined + 1 // NaN ``` 特殊运算 ``` {}+{} // "[object Object][object Object]" {}+[] // 0 []+{} // "[object Object]" []+[] // "" ```