100_js筆記3_js的資料型別 + 資料型別轉換
阿新 • • 發佈:2018-11-30
一,js資料型別
- 值型別(基本型別)
- String 字串(基本資料型別)
- Number 數值(基本資料型別)
- Boolean 布林值(基本資料型別)
- Null 空值(基本資料型別)
- Undefined 未定義(基本資料型別)
- Symbol型別
- 引用資料型別
- Object 物件
- Array陣列
- Function函式
二,檢視資料型別
- 使用格式:typeof 資料,例如 typeof 123; typeof num;
- typeof操作符會將檢查的結果以字串的形式返回給我們
var value= 10; // 此時將value的資料型別number以字串返回給我們, 存入到res變數中 var res = typeof value; // 此時檢查res的資料型別為string, 證明typeof返回給我們的是一個字串 console.log(typeof res); // string
三,String字串型別
- 單引號和雙引號均可以
- 相同引號不能巢狀,不同引號可以巢狀
- 和C語言不同的是, 在C語言中單引號括起來的是字元,而JavaScript中無論單引號還是雙引號括起來的都是字串
四,Number數字型別
- 在JS中所有的數值都是Number型別(整數和小數)
- 由於記憶體的限制,ECMAScript 並不能儲存世界上所有的數值
- 最大值:Number.MAX_VALUE
- console.log(Number.MAX_VALUE); // 1.7976931348623157e+308
- 最小值:Number.MIN_VALUE
- console.log(Number.MIN_VALUE); // 5e-324
- 無窮大:Infinity, 如果超過了最大值就會返回該值
- console.log(Number.MAX_VALUE + Number.MAX_VALUE); // Infinity
- 無窮小:-Infinity, 如果超過了最小值就會返回該值
- console.log(typeof Infinity); // number
- console.log(typeof -Infinity); // number
- NaN 非法數字(Not A Number),JS中當對數值進行計算時沒有結果返回,則返回NaN
- var num3 = NaN;
- console.log(typeof num3); // number
- JS中整數的運算可以保證精確的結果;在JS中浮點數的運算可能得到一個不精確的結果
- 在C語言中整數是int,小數是float或者double;而JavaScript中無論是整數還是小數都是Number
五,Boolean 布林型別
- 布林型只能夠取真(true)和假(false)兩種數值
- 任何非零數值都是true, 包括正負無窮大, 只有0和NaN是false
- 任何非空字串都是true, 只有空字串是false
- 任何物件都是true, 只有null和undefined是false
六,Undefined型別
- Undefined這是一種比較特殊的型別,表示變數未賦值,這種型別只有一種值就是undefined
- undefined是Undefined型別的字面量
- 前者undefined和10, "abc"一樣是一個常量
- 後者Undefined和Number,Boolean一樣是一個數據型別
- 需要注意的是typeof對沒有初始化和沒有宣告的變數都會返回undefined。
七,Null型別
- Null 型別是第二個只有一個值的資料型別,這個特殊的值是 null
- 從語義上看null表示的是一個空的物件。所以使用typeof檢查null會返回一個Object
- undefined值實際上是由null值衍生出來的,所以如果比較undefined和null是否相等,會返回true
八,Symbol型別
Symbol 是 ES6 引入了一種新的原始資料型別,表示獨一無二的值
九,資料型別轉換
- 其它型別轉換為字串
- 呼叫被轉換資料型別的toString()方法
- 該方法不會影響到原變數,它會將轉換的結果返回
- null和undefined這兩個值沒有toString()方法
- 呼叫String()函式
- 對於Number和Boolean實際上就是呼叫的toString()方法
- null和undefined這兩個值有String()方法
- 將被轉換的資料和+""連線到一起
- 任何資料和 +"" 連線到一起都會轉換為字串
-
var num1 = 10; var res1 = String(num1); // 重點 console.log(res1); // 10 console.log(typeof res1); // string
- 呼叫被轉換資料型別的toString()方法
- 其它型別轉換為Number型別
- 將被轉換的資料傳入Number()函式中
- 字串 --> 數字
-
如果是純數字的字串,則直接將其轉換為數字 var str1 = "123"; var res1 = Number(str1); console.log(res1); // 123 console.log(typeof res1); // number 如果字串中有非數字的內容,則轉換為NaN var str2 = "123ab"; var res2 = Number(str2); console.log(res2); // NaN 如果字串是一個空串或者是一個全是空格的字串,則轉換為0 var str3 = ""; var res3 = Number(str3); console.log(res3); // 0 var str4 = " "; var res4 = Number(str4); console.log(res4); // 0
-
- 布林 --> 數字
-
true 轉成 1 false 轉成 0 var bool1 = true; var res5 = Number(bool1); console.log(res5); // 1 var bool2 = false; var res6 = Number(bool2); console.log(res6); // 0 null --> 數字 --> 0 var str5 = null; var res7 = Number(str5); console.log(res7); // 0 undefined --> 數字 --> NaN var str6 = undefined; var res8 = Number(str6); console.log(res8); // NaN
-
- 字串 --> 數字
- 將被轉換的資料傳入parseInt()函式中/parseFloat()函式中
- parseInt()提取字串中的整數
-
從第一位有效數字開始, 直到遇到無效數字 如果第一位不是有效數字, 什麼都提取不到, 會返回NaN 第一個引數是要轉換的字串,第二個引數是要轉換的進位制 var str7 = "300px"; var res9 = parseInt(str7); console.log(res9); // 300 var str8 = "300px250"; var res10 = parseInt(str8); console.log(res10); // 300 console.log(parseInt("abc123")); //返回NaN,如果第一個字元不是數字或者符號就返回NaN console.log(parseInt("")); //空字串返回NaN,Number("")返回0
-
- parseFloat提取字串中的小數
-
會解析第一個. 遇到第二個.或者非數字結束 如果第一位不是有效數字, 什麼都提取不到 不支援第二個引數,只能解析10進位制數 如果解析的內容裡只有整數,解析成整數 var str9 = "20.5px"; var res11 = parseInt(str9); console.log(res11); // 20 var str10 = "20.5.5.5px"; var res12 = parseFloat(str10); console.log(res12); // 20.5
-
- 對非String使用parseInt()或parseFloat(), 會先將其轉換為String然後在操作
-
var str11 = true; var res13 = parseInt(str11); // 這裡相當於parseInt("true"); console.log(res13); // NaN var res14 = Number(str11); console.log(res14); // 1
-
-
parseInt(),parseFloat(),Number()函式的區別
- Number()函式中無論混合字串是否存在有效整數都會返回NaN
- 利用parseInt()/parseFloat()可以提取字串中的有效整數
- parseFloat()會解析第一個. 遇到第二個.或者非數字結束
- 兩者之前的區別是前者只能提取整數,後者可以提取小數
- parseInt()提取字串中的整數
- 利用+ - 運算子
- 新增+號, 不會修改資料的正負性
- 新增-號, 會修改資料的正負性
-
var str1 = "666"; var res1 = +str1; console.log(res1); // 666 console.log(typeof res1); var str2 = "3.14"; var res2 = +str2; console.log(res2); // 3.14 console.log(typeof res2); var str3 = "666px"; var res3 = +str3; console.log(res3); // NaN console.log(typeof res3); var flag = false; var res4 = +flag; console.log(res4); // 0 console.log(typeof res4); var flag = true; var res4 = +flag; console.log(res4); // 1 console.log(typeof res4);
- 將被轉換的資料傳入Number()函式中