基礎類型爲原始值,其值不能被修改;對象類型爲引用類型,能夠理解爲指針,經過引用類型找到內存中的地址,而後再進行相關操做。數組
// 基本類型 var a = 10; var b = a ; a = 20; console.log(b); // 10 // 對象類型 var c = { name:'hello'}; var d = c ; c.name = 'world'; console.log(d.name); // 'world'
var str1 = 'hello'; var str2 = new String('hello'); var str3 = `${'hello'}abc` // 其餘類型轉換成字符串 ['h','e','l','l','o'].join(''); // 'hello' var num = 123; num += ''; num.toString(); String(num); // '123' String(true); // 'true'
var num1 = 123; var num2 = new Number(123); var num3 = parseInt('12px'); // 12 var num4 = parseFloat('12.22px'); // 12.22 var num5 = Number('123');
var boo1 = true; var boo2 = New Boolean(true); var a = 1; var boo2 = !!a; // true
var undef = undefined; var a; a; // undefined
typeof 'hello'; // 'string' typeof 123; // 'number' typeof true; // 'boolean' typeof undefined; // 'undefined' typeof null; // 'object' (特例1) typeof Symbol('hello'); // 'symbol' typeof {a:1} ; // 'object' typeof function(){}; // 'function' (特例2)
特例1,屬於基礎類型的null
通過typeof
操做符操做後返回的是object
;特例2,函數隸屬於對象,typeof
操做直接返回function
。
new
操做符生成的各類數據類型var str = 'hello'; str instanceof String ; // false new String('hello') instanceof String; // true // number,booelan 同理,(null,undefined,symbol沒有構造函數) 123 instanceof Number; // false new Number(123) instanceof Number ; // true true instanceof Boolean; // false new Boolean(true) instanceof Boolean; // true
instanceof 的實質是,判斷
instanceof
左邊
對象的原型是否是在右邊對象的
原型鏈中。
Object.prototype.toString.call('hello'); // "[object String]" Object.prototype.toString.call(123); // "[object Number]" Object.prototype.toString.call(true); // "[object Boolean]" Object.prototype.toString.call(null); // "[object Null]" Object.prototype.toString.call(undefined); // "[object Undefined]" Object.prototype.toString.call(Symbol('hi')); // "[object Symbol]" Object.prototype.toString.call(function(){}); // "[object Function]" Object.prototype.toString.call([]); // "[object Array]" Object.prototype.toString.call(new Date()); // "[object Date]" Object.prototype.toString.call(/w+/); // "[object RegExp]" Object.prototype.toString.call({}); // "[object Object]"
基本數據類型的全部方法操做都不改變原始值。對象類型的數據,操做過程當中始終留意引用地址的中轉概念,其原型上方法有會改變和不改變原值的兩種類型。函數
// 基本類型 var str = 'hello'; str.toUpperCase(); // 僅返回值爲 'HELLO',並非直接在原值上修改 console.log(str); // 'hello' // 對象類型 // 改變值 var arr1 = [1,2,3]; arr1.push(4); arr1; // [1,2,3,4] // 不改變值 var arr2 = [5,6,7]; arr2.concat(arr1); // 返回 [5,6,7,1,2,3,4] arr2; // [5,6,7] // 引用地址示例 var arr3 = [8,9]; // arr3 實則對應的是內存中 [8,9] 數組的引用地址,好比 x0001 var arr4 = arr3; // arr4 爲 arr3 的值,即爲 x0001 arr4[0]= 10; // 在對地址進行操做和讀值時,則又經過引用找到對應的區域進行讀寫操做 arr3; // [10,9]
引用類型能夠簡單地類比成計算機中的快捷方式。
經常使用又較容易混淆的操做方法:prototype
方法名 | 說明 |
---|---|
slice(start,end) | start和end均可覺得負數,皆表明位置索引,從start往字符串右邊向剪切,end位置若在start左邊,則返回爲空, |
substr(start,length) | start可爲負,表示定位到剪切的起始位置,length需爲正數,表示從起始位置往右截取的長度。 |
substring(index1,index2) | Index1 和 index2 都爲正數皆表明位置索引,二者無序即老是取二者之間的字符 |
var num = 123.5368; num.toFixed(2); // '123.54' num.toFixed(1); // '123.5' num.toFixed(6); // '123.536800'
方法名 | 說明 |
---|---|
slice(start,end) | start和end均可覺得負數,皆表明位置索引,從start元素往數組右邊淺拷貝,不包括end位置元素,end 位置若在 start 左邊,則返回空數組(相似字符串的slice),操做不影響原數組。 |
splice(start,len,…eles) | start表明索引位置,可爲負;len表示要刪除的個數,eles 表示要在刪除的位置中插入的元素,可多個。操做會影響到原數組。返回的爲刪除的元素數組。 |
var arr = [1,2,3,4,5,6,7,8]; // slice arr.slice(-4,-1); // [5,6,7] // splice var data = arr.splice(0,1,99); arr; // [99,2,3,4,5,6,7,8] data; // [1]