ECMAScript中資料型別目前有兩種:基本資料型別和參考資料型別,
基本資料型別
基本資料型別也稱作簡單資料型別,為Undefined,Null,Boolean,Number,String,Symbol,
基本資料型別的特點是:在記憶體中有固定大小空間,保存在堆疊中,
1、Undefined型別
Undefined型別只有一個值,即undefined,如果對一個變數僅宣告不進行初始化,那此變數的值就是undefined,
var message; console.log(message); // undefined var example; console.log(example); // undefined
2、Null型別
Null型別只有一個值,即null,null表示一個空物件指標,
只要保存物件的變數還沒有真正的保存物件,就應該讓該變數保存 null 值,這樣可以進一步區分null和undefined,
var obj = null; alert(obj); // null
3、Boolean型別
Boolean只有兩個值:true和false,區分大小寫,True和False都不是Boolean值,
var boo = true; alert(obj); // true var lost = false; alert(lost); // false
Boolean型別與資料型別的轉換規則如下:
| 資料型別 | 轉換為 true 的值 | 轉換為 false 的值 |
| Boolean | true | false |
| Undefined | 不適用 | undefined |
| String | 任何非空的字串 | 空字串( "" ) |
| Number | 任何非0數字值 | 0和NaN |
| Object | 任何物件 | null |
4、String型別
String型別表示字串,可以用單引號( ' )或雙引號( " )表示,
var a = 'a'; // 有效 var b = "a"; // 有效
字串一旦創建,他們的值就不能改變,如若改變字串的值 就要銷毀原來的值,然后用有新值的字串填充該變數,
var lang = "Java"; lang = lang + "Script"; console.log(lang); // JavaScript
可以使用 toString() 轉為字串,
var age = 11; age.toString(); // "11"
注:如果不知轉換的值是 null 還是 undefined ,可以使用String(),String()函式遵循下列轉換規則:
- 如果值有toString()方法,則呼叫該方法回傳相應的結果;
- 如果值是 null ,回傳 "null";
- 如果值是 undefined,回傳 "undefined";
5、Number型別
Number型別分為整數和浮點數,數值可以用十進制、八進制、十六進制表示,
ECMAScript能夠保存的數值范圍可以用 Number.MIN_VALUE 和 Number.MAX_VALUE 來獲取,
5.1、浮點數值
var floatNum = 1.1; var floatNum1 = 0.1; var floatNum2 = .1; // 有效,但不推薦 var floatNum3 = 1.; // 決議為1 var floatNum4 = 3.145e7; // 決議為 31450000, e的含義為3.145 * (10的7次方)
5.2、Number、parseInt、parseFloat數值轉換
parseInt 可以將數值轉為整數,parseFloat 可以將數值轉為浮點數,
var num1 = parseInt("11.5"); // 11 var num2 = parseFloat("2.5"); // 2.5
5.3、數值范圍
數值范圍可用 Number.MIN_VALUE 和 Number.MAX_VALUE 表示;
5.4、NaN
NaN即非數值,是一個特殊的值,表示一個本來要數值的操作書未回傳數值的情況, NaN與任何值都不想等,包括NaN本身,
alert(NaN == NaN); // false
isNaN() 會判斷這個數是不是數值,在接到一個引數后,會把這個值轉為數值,不能轉為數值的則回傳true,
alert(isNaN(NaN)); // true alert(isNaN(10)); // false,10是一個數值 alert(isNaN("10")); // false,可以被轉為數值10 alert(isNaN("blue")); // true,不能轉為數值 alert(isNaN(true)); // false,被轉為數值1
6、Symbol
ES5中的物件屬性名都是字串,很容易造成屬性名沖突,如果有保證屬性名是獨一無二的機制,因此在ES6中引入了Symbol,
Symbol為ES6中新增的一種原始基本資料型別,表示獨一無二的值,Symbol值是通過Symbol函式生成,不能作為建構式使用,
const symbol1 = Symbol(); const symbol2 = Symbol(42); const symbol3 = Symbol('foo'); console.log(typeof symbol1);// "symbol" console.log(symbol2 === 42);// false console.log(Symbol('foo') === Symbol('foo'));// false
參考資料型別
在ECMAScript中,參考資料型別是一種資料結構,將資料和功能組織在一起,
1、Object型別
到目前為止,大多數參考型別值都是 Object型別 的實體,
// 1、使用new 后跟Object建構式 var person = new Object(); person.name = "Tom"; // 2、物件字面量表示法 var person = { name: "Tom", age:12 } console.log(person.name); // Tom console.log(person.age); // 12 var person1 = {}; person1.name = "Tom"; console.log(person1.name); // Tom console.log(person1.age); // undefined
2、Array型別
陣列型別是最常用的參考型別之一,
a) 檢測數值元素方法: forEach some every map filter
b) 改變陣列長度方法: pop和push(堆疊方法) , unshift 和 shift(佇列方法), slice splice concat
var a = [1, 2, 3]; var b = a.pop(); //b=3,a=[1,2],pop()回傳陣列的最后一項,所以b的值是陣列a的最后一項 var c = a.push(4); //c=3, [1,2,4],c是a.length var d = a.unshift("red"); //d=4, ["red",1,2,4],d為a.length var e = a.shift(); //e="red",a=[1,2,4],e為移除的陣列第一項并回傳該項,陣列a的長度要減1 var sliceA = a.slice(1, 2); //sliceA=2,4, a=[1,2,4] var spliceA = a.splice(0, 1);//spliceA=1, a=[2,4]
c) 元素查找: findIndex lastFindIndex , indexOf 和 lastIndexOf(位置方法), filter includes
var a = [1, 2, 3, 2]; alert(a.indexOf(2)); // 1 alert(a.lastIndexOf(2)); // 3
d) 排序 : sort reverse
var a = [2, 1, 3, 5, 4]; a.sort(); // 1,2,3,4,5 b.reverse(); // 5,4,3,2,1
e)型別轉換或檢測: join toString isArray
var a = [1, 2, 3, 2]; Array.isArray(a); // true a instanceof Array //true,instanceof非陣列方法 a.toString(); //'1,2,3,2',a=[1, 2, 3, 2] a.join(); //'1,2,3,2',a=[1, 2, 3, 2]
f) 歸并方法:reduce reduceRight
這兩個方法都會迭代所有項,回傳最終值,這兩個方法功能一樣,只是方向不同而已,
reduce()從第一項開始遍歷到最后,reduceRight()從最后開始遍歷到第一項,
var a = [1, 2, 3, 2]; var b = a.reduce((x, y) => { return x + y });//b=8; var c = a.reduceRight((x, y) => { return x + y });//c=8;
3、Date型別
列舉一些獲取時間的常用方法:
| getDate() | 回傳月中的第幾天(從 1 到 31), |
| getDay() | 回傳星期幾(0-6), |
| getFullYear() | 回傳年份, |
| getHours() | 回傳小時(0-23), |
| getMinutes() | 回傳分鐘( 0-59), |
| getMonth() | 回傳月份(0-11), |
| getSeconds() | 回傳秒數(0-59), |
| getTime() | 回傳自 1970 年 1 月 1 日午夜以來與指定日期的毫秒數, |
| now() | 回傳呼叫這個方法時的日期和時間的毫秒數 |
4、RegExp型別
|
|
一個在字串中執行查找匹配的RegExp方法,它回傳一個陣列(未匹配到則回傳 null), |
|
|
一個在字串中測驗是否匹配的RegExp方法,它回傳 true 或 false, |
|
|
一個在字串中執行查找匹配的String方法,它回傳一個陣列,在未匹配到時會回傳 null, |
|
|
一個在字串中執行查找所有匹配的String方法,它回傳一個迭代器(iterator), |
|
|
一個在字串中測驗匹配的String方法,它回傳匹配到的位置索引,或者在失敗時回傳-1, |
|
|
一個在字串中執行查找匹配的String方法,并且使用替換字串替換掉匹配到的子字串, |
|
|
一個使用正則運算式或者一個固定字串分隔一個字串,并將分隔后的子字串存盤到陣列中的 String 方法, |
查看常用 正則運算式,
5、Function型別
請查看 此文章,
6、Map型別
Map類似物件,也是鍵值對的集合,但鍵不只是字串,各種型別的值都可以當鍵,Map結構提供了“值--值”的對應,如果需要鍵值對結構,Map比Object更合適,
屬性:
Map.prototype.size:回傳Map實體的總數;
方法:
set(key,value):設定key對應的值;
var m = new Map(); m.set(1, "a"); m.set(2,"b");// 0: {1 => "a"} 1: {2 => "b"}
get(key):獲得key對應的值;
var m = new Map(); m.set(1, "a"); m.set(2, "b");// 0: {1 => "a"} 1: {2 => "b"} m.get(1); // "a"
has(key):判斷是否有某成員;
var m = new Map(); m.set(1, "a"); m.set(2, "b");// 0: {1 => "a"} 1: {2 => "b"} m.has(1); // true m.has(3); // false
delete(key):洗掉某鍵,回傳true;洗掉失敗回傳false;
var m = new Map(); m.set(1, "a"); m.set(2, "b");// 0: {1 => "a"} 1: {2 => "b"} m.delete(1); m.has(1); // false
clear():清除所有成員值,沒有回傳值,
var m = new Map(); m.set(1, "a"); m.set(2, "b");// 0: {1 => "a"} 1: {2 => "b"} m.clear(); m.has(1); // falsekeys():回傳鍵名遍歷器;
var m = new Map(); m.set(1, "a"); m.set(2, "b");// 0: {1 => "a"} 1: {2 => "b"} for (let key of m.keys()) { console.log("key:%s", key); } // key:1 // key:2
values():回傳鍵值遍歷器;
var m = new Map(); m.set(1, "a"); m.set(2, "b");// 0: {1 => "a"} 1: {2 => "b"} for (let value of m.values()) { console.log("value:%s", value); } // value:a // value:b
entries():回傳鍵值對;
var m = new Map(); m.set(1, "a"); m.set(2, "b");// 0: {1 => "a"} 1: {2 => "b"} for (let [key,value] of m.entries()) { console.log("key:%s,value:%s", key, value); } // key:1,value:a // key:2,value:b
forEach():遍歷,沒有回傳值;
var m = new Map(); m.set(1, "a"); m.set(2, "b");// 0: {1 => "a"} 1: {2 => "b"} m.forEach((value, key, map) => { console.log("key:%s,value:%s",key,value); }); // key:1,value:a // key:2,value:b
6.1、WeakMap
WeakMap與Map有兩個區別:
1、WeakMap的成員只能是物件,不是其他型別的值;
2、WeakMap的鍵名所指向的物件不計入垃圾回識訓制,鍵名參考的物件是弱參考,一旦不需要,WeakMap鍵名和鍵值會自動消失,不動手動洗掉,
屬性與方法與Map一樣,
7、Set型別
Set類似陣列,但是成員值都是唯一的,沒有重復的,
var s = new Set([1, 1, 2, 2, 3]); [...s]; // [1,2,3]
屬性:
Set.prototype.constructor:建構式,默認是Set函式;
Set.prototype.size:回傳Set實體的總數;
方法:
add(value):添加值;var s = new Set(); s.add("red");has(value):判斷是否有某成員;
var s = new Set(); s.add("red"); // "red" s.has("red"); // truedelete (value):洗掉值;
var s = new Set(); s.add("red"); s.has("red"); // true s.delete("red"); s.has("red"); // falseclear(value):清除所有成員;
var s = new Set(); s.add("red"); s.clear(); s.has("red"); // falsekeys():回傳鍵名遍歷器 values():回傳鍵值遍歷器 Set結構沒有鍵名,只有鍵值,所以keys方法和values方法一致,
var s = new Set(['red', 'blue', 'green']); for (let item of s.keys()) { console.log(item) } // 'red'entries():回傳鍵值對; forEach():遍歷,沒有回傳值;
// 'blue'
// 'green for (let item of s.values()) { console.log(item) } // 'red'
// 'blue'
// 'green'
var s = new Set(['red', 'blue', 'green']); s.forEach((x) => console.log(x)); // 'red'
// 'blue'
// 'green'
7.1、WeakSet
WeakSet與Set有兩個區別:
1、WeakSet的成員只能是物件,不是其他型別的值;
2、WeakSet中的物件都是弱參考,即垃圾回識訓制不考慮WeakSet對該物件的參考,垃圾回識訓制自動回收該物件所占用的記憶體,
屬性與方法與Set一樣,
8、基本包裝型別
Boolean型別(建議不使用):
使用方式為 new Boolean();
區別看下方,因new Boolean()屬于布爾型別的實體,為物件,因此回傳true,
var a = new Boolean(false); // 不推薦使用 alert(a); // true var b = false; alert(a); // false
String型別
使用方式為 new String();
var a = new String("hello"); // "hello"
Number型別
使用方式為 new Number();
var a = new Number(1); // 不推薦使用 var b = 1; alert(typeof a); // "object",Number物件是Number型別的實體,所以回傳"object" alert(typeof b); // "number",b為基本型別,所以回傳"number" alert( a instanceof Number); // true alert( b instanceof Number); // false
9、單體內置物件
9.1、Global 物件
URI編碼方法
encodeURI() 和 encodeURIComponent() 方法可以對 URI 進行編碼(用特殊的UTF8編碼替換所有的無效字符),以便發送給瀏覽器,便于瀏覽器理解,
| encodeURI() | 編碼 | 主要用于整個URI,但不會對本身屬于URI的特殊字符進行編碼, |
| decodeURI() | 解碼 | 解碼經過encodeURI()編碼的URI |
| encodeURIComponent() | 編碼 | 主要用于對URI中的某一段,對發現的任何非標準字符進行編碼, |
| decodeURIComponent() | 解碼 | 解碼經過decodeURIComponent()編碼的URI |
示例:

eval()方法
eval()方法像ES的決議器,只接受一個引數,
eval("var ms = 'hello world';")
alert(ms); // "hello world"
window物件

9.2、Math物件
Math物件提供計算功能,列舉一些常用方法:
| floor(x) | 對 x 進行下舍入, |
| max(x,y,z,...,n) | 回傳 x,y,z,...,n 中的最高值, |
| min(x,y,z,...,n) | 回傳 x,y,z,...,n中的最低值, |
| random() | 回傳 0 ~ 1 之間的亂數, |
| round(x) | 四舍五入, |
參考文章:
https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Guide/Regular_Expressions
好好做人,認真生活,轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/413092.html
標籤:其他
