數據類型

數據類型分類

  • 基礎類型:string,number,boolean,undefined,null,symbol
  • 對象類型:object

基礎類型爲原始值,其值不能被修改;對象類型爲引用類型,能夠理解爲指針,經過引用類型找到內存中的地址,而後再進行相關操做。數組

// 基本類型
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'

數據的建立

string

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'

number

var num1 = 123;
var num2 = new Number(123);

var num3 = parseInt('12px'); // 12
var num4 = parseFloat('12.22px'); // 12.22
var num5 = Number('123');

boolean

var boo1 = true;
var boo2 = New Boolean(true);

var a = 1;
var boo2 = !!a; // true

undefined

var undef = undefined;
var a; 
a; // undefined

數據類型判斷

  • typeof,獲取值的所屬類型以字符串形式返回
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
  • instanceof,能夠判斷經過 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 左邊 對象的原型是否是在右邊對象的 原型鏈中。
  • toString,經過 Object 原型上的 toString 方法,判斷對象所屬類型
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

String

  • 剪切
方法名 說明
slice(start,end) start和end均可覺得負數,皆表明位置索引,從start往字符串右邊向剪切,end位置若在start左邊,則返回爲空,
substr(start,length) start可爲負,表示定位到剪切的起始位置,length需爲正數,表示從起始位置往右截取的長度。
substring(index1,index2) Index1 和 index2 都爲正數皆表明位置索引,二者無序即老是取二者之間的字符

Number

  • toFixed(length),返回字符串;僅對小數點位後,作特定長度的截取,不夠長度則補0,四捨五入。
var num = 123.5368;
num.toFixed(2); // '123.54'
num.toFixed(1); // '123.5'
num.toFixed(6); // '123.536800'

Array

  • slice 和 splice
方法名 說明
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]
相關文章
相關標籤/搜索