JS數據類型及其詳解

1、基本數據類型

  • 數字類型 number
  • 字符串類型 string
  • 布爾類型 boolean
  • 空指針對象 null
  • 未定義undefined
  • ES6新增的symbol

2、引用數據類型

  • 對象 object
{}普通對象
[]數組對象
Math數學函數對象
Data日期對象
類數組對象
實例對象
......
  • 函數function(函數也是對象)

3、Number數據類型詳解

number包含:常規數字(整數、小數、負數和零)、NaN和infinity

3.1 什麼是NaN?

NaN: not a number不是一個有效數字,可是它是屬於數字類型的。javascript

注意:NaN和誰都不相等,包括和本身也不相等;因此咱們不能使用是否和NaN相等來判斷一個數是不是非有效數字。java

isNaN的檢測機制: isNaN是用來檢測一個數字是否爲非有效數字,是非有效數字則返回true,不是非有效數字則返回false(不是非有數字就等同因而有效數字)既然使用類檢測數字的,那麼isNaN機制在運做的時候就首先要驗證檢測的值是否爲數字類型,若是不是,瀏覽器會調用Number()這個方法將其轉換爲數字,而後在進行檢測。面試

// NaN和誰都不相等,包括它本身
console.log(NaN==NaN) //=> false
console.log(NaN==10); //=> false

//=> isNaN的檢測機制
console.log(isNaN(6)); //=> false
console.log(isNaN('JavaScript')); //=> true
/*
*    1. 要檢測的值不是數字類型的,首先調用Number()將其轉換爲數字類型,而後再檢測
*    Numer("JavaScript") => NaN
*    2. isNaN(NaN) =>true
*/
console.log(isNaN('6')); //=> false
/*
*    1. 要檢測的值是字符串類型的,因此會調用Number()將其轉換爲數字類型,而後再進行檢測
*    Number('6'); => 6
*    2. isNaN(6) => 6是非有效數字嗎?確定不是非有效數字了,因此結果就位false
*/

3.2 將其餘類型轉換爲Number

將字符創轉換爲數字數組

將字符串轉換爲數字,只要遇到任意非有效數字字符(第一個點除外),結果都是NaN,空字符串轉換爲數字,結果是零
console.log(Number('400')); //=> 400
console.log(Number('400px')); //=> NaN 遇到非有效數字字符,結果就爲NaN
console.log(Number('width:400px')); //=> NaN 第一個就是非有效數字字符,因此結果直接是NaN
console.log(Number('66.6')); //=> 66.6 第一個點不會被識別爲非有效數字字符
console.log(Number(Number('66.6.6'))); //=> NaN 只有第一個點不會識別非有效數字,第二個點或者連續的兩個點都會被識別爲非有效數字

將布爾類型轉換爲數字瀏覽器

ture 轉換爲數字是1
false 轉換爲數字是0
console.log(Number(false)); //=> 0
console.log(Number(true)); //=> 1
console.log(isNaN(Number(false))); 
/*
*    Number(false) => 0
*    isNaN(0); => false
*/

將null & undefined轉換爲數字函數

null 轉換爲數字是0
undefined 轉換爲數字是 NaN
console.log(Number(null)); //=>0
console.log(Number(undefined)); //=>NaN

把引用數據類型轉換爲數字(對象和函數)指針

把引用數據類型轉換爲數字,首先要調用toString()這個方法將其轉換爲字符串,而後再把字符串轉換爲數字

普通對象轉換爲字符串結果是'[object Object]';空數組轉換爲字符串結果是空字符串code

console.log(Number({name:'小明'})); //=> NaN
/*
*    {name:'小明'}.toString() =>'[object Object]'
*    Number('[object Object]') => NaN
*/

console.log(Number([])); //=> 0 空數組轉換爲字符串是空字符串,空字符串轉換爲數字是0
console.log(Number([12,23])); //=> NaN [12,23].toString() =>'12,23' =>Number('12,23') =>NaN

4、string字符串類型

字符串:全部用單引號、雙引號、反引號(ES6中的模板字符串)包裹起來的都是字符串

把其它類型轉換爲字符串對象

  • 其它類型轉換字符串,大部分狀況下都是在原來值的基礎上加上雙引號或者是單引號,可是對象轉換爲字符串一個特例,對象轉換爲字符串的結果是'[object Object]'
  • null 和 undefined是禁止直接調用toString()方法的,由於瀏覽器將其保護起來了
let str = 10;
console.log(str.toString()) //=> '10'
console.log(NaN.toString()); //=> 'NaN'
console.log({name:'小明'}.toString()); //=> '[object Object]'

console.log(null.toString()); //=> 報錯 Uncaught TypeError: Cannot read property 'toString' of null
console.log(undefined.toString()); //=> 報錯 Uncaught TypeError: Cannot read property 'toString' of undefined

字符串拼接ip

在+ - * / %中,除了加法之外,其它的都是數學運算,只有加法可能存在字符串拼接(在加法運算中,一旦遇到字符串就再也不是數學運算了,而是變量了字符串拼接)
console.log('1'+1); //=> '11'
console.log('1'-1); //=> 0 把字符換轉換爲數字,而後再進行運算
console.log('5px'-5);
/*
*     '5px'轉換爲數字 => NaN
*     NaN - 5 => NaN
*/

一道關於字符串拼接的騰訊面試題

console.log(100 + true + 21.2 + null + undefined + "Tencent" + [] + null + 9 + false);
/*
*    100 + true => 101
*    101 + 21.2 => 122.2
*    122.2 + null => 122.2
*    122.2 + undefined => NaN
*    NaN + "Tencent" => "NaNTencent"
*    "NaNTencent" + [] => "NaNTencent"
*    "NaNTencent" + null => "NaNTencent"
*    "NaNTencent" + 9 => "NaNTencent9"
*    "NaNTencent9" + false => "NaNTencent9false"
*    */

5、boolean布爾數據類型

  • 布爾類型只有兩個值:true 和 false

將其它類型值轉換爲布爾類型:只有0、NaN、''、null 和 undefined轉換爲布爾類型是false,其它的轉換爲布爾類型都是true;並且沒有特殊狀況。

相關文章
相關標籤/搜索