(1)值類型:數值、布爾值、null、undefined。
(2)引用類型:對象、數組、函數。
為了方便操作,JavaScript提供了3個特殊的引用類型:Boolean、Number和String。實際上,每當讀取一個基本類型值(boolean、number、string)的時候,后臺就會創(chuàng)建一個對應的基本包裝類型的對象,從而可以調用這些類型的方法來操作數據。
var s1 ="hello javascript";
var s2 = s1.substring(2);
在上面的例子中,s1是一個字符串,是基本類型值。而s1調用了substring()方法,理論上基本類型值不是對象,它們不應該有方法的。其實,為了實現這種操作,后臺已經自動完成了一系列的處理。當第二行代碼訪問s1時,會完成下面一系列操作:
1、創(chuàng)建String類型的一個實例; var s1 = new String("some text");
2、在實例上調用指定的方法; ?var s2 = s1.substring(2);
3、銷毀這個實例 ?s1 = null;
引用類型和基本包裝類型的主要區(qū)別就是對象的生存期。使用new操作符創(chuàng)建的引用類型的實例,在執(zhí)行流離開當前作用域之前都一直保存在內存中。而自動創(chuàng)建的基本包裝類型的對象,則只存在于一行代碼的執(zhí)行瞬間,然后立即被銷毀。
vars1 ="hello";
s1.name ="Jack";
alert(s1.name); ? ?// undefined
對基本包裝類型的實例調用typeof會返回object。
Object構造函數會根據傳入值的類型返回相應的基本包裝類型:
var obj1 =new Object("hello");
var obj2 =new Object(12);
var obj3 =new Object(true);
alert(obj1 instance of String);// true
alert (obj2 instance of Number);// true
alert(obj3 instance of Boolean);// true
注意,使用new調用基本包裝類型的構造函數,與直接調用同名的轉型函數不一樣:
var val ="10";
var num = Number(val); ?// 轉型函數(用于轉換參數類型的函數)
alert (typeof num); ? // 類型是number
var obj =new Number (val); ? // 構造函數
alert (typeof obj);// 類型是object
Boolean類型
Boolean是與boolean(布爾值)相對應的基本包裝類型
在布爾表達式中使用Boolean對象時要特別注意:布爾表達式中的所有對象都會被轉換為true。
var? falseObj = new Boolean (false);? // falseObj變?yōu)榱藅rue
var ?result = falseObj &&true;
alert (result); ? // true
var falseVal =false; ?//直接用的布爾類型值,仍然是false
result = falseVal &&true;
alert(result); ?// false
基本類型與引用類型的布爾值還有兩個區(qū)別:
typeof操作符對基本類型返回“boolean”,而基本包裝類型返回“object”
使用instanceof操作符測試Boolean對象會返回true,而測試基本類型的布爾值則返回false。
alert (typeof falseObj); ?// 基本包裝類型返回object
alert(typeof falseVal); ?// 基本引用類型返回boolean
alert(falseObj? instanceof? Boolean);// 基本包裝類型返回true
alert(falseVal? instanceof? Boolean);// 基本引用類型返回false
Number類型
(1)toFixed()方法會按照指定的小數位返回值得字符串表示。
var ?num1 =11;
alert ?(num1.toFixed(2)); ? // "11.00"
var ?num2 =11.005;
alert ?(num1.toFixed(2)); ?// "11.01"
(2)toExponential()方法用于格式化,返回指數表示法。
var num =11;
alert ?(num.toExponential(1));? ? // “1.0e+1”
(3)toPrecision()方法可能返回固定大小格式,也可能返回指數格式??梢越邮找粋€參數,表示數值的所有數字的位數(不含指數部分)
var num =99;
alert(num.toPrecision(1));? // "1e+2",即100,無法準確表示99
alert(num.toPrecision(2));? // "99"
alert(num.toPrecision(3));? // "99.0"
與Boolean類型相似,使用typeof和instanceof操作基本類型數值和引用類型數值時,得到的結果完全不同。
String類型
1、字符方法
兩個用于訪問字符串中特定字符的方法:charAt()和charCodeAt()。
charAt():以單字符串的形式返回給定位置的那個字符
charCodeAt():返回字符的編碼
var strVal ="hello";
alert(strVal.char(1));? // "e"
alert(strVal.charCodeAt(1));? ? // "101"
2、字符串操作方法
concat()、slice()、substr()、substring()
3、字符串位置方法
indexOf()、lastIndexOf()
4、刪除空格
trim()會創(chuàng)建一個字符串的副本,刪除前置及后綴的所有空格,然后返回結果。
5.字符串大小寫轉換方法
toLocaleUpperCase()、toUpperCase()、toLocaleLowerCase()、strVal.toLowerCase()
6.字符串模式匹配方法
(1)match()
var ?text ="cat, bat, sat, fat";
var ?pattern =/.at/ ?;
var ?matches = text.match(pattern);
alert (matches.index);// 0
alert (matches[0]);// "cat"
alert (pattern.lastIndex);// 0
(2)search()
var ?text ="cat, bat, sat, fat";
var ?pos = text.search(/at/);
alert(pos);// 1
(3)replace()
var ?text ="cat, bat, sat, fat";
var ?result = text.replace("at","ond");
alert(result); ? ? ? // cond, bat, sat, fat
result = text.replace (/at/g,"ond");
alert(result); ? ? ? // cond, bond, sond, fond
(4)split()
7、localeCompare()方法
localeCompare()用于比較兩個字符串,并返回下列結果之一:
如果字符串在字母表中應該排在字符串參數之前,則返回一個負數(多數情況為-1,具體由實現而定)
如果字符串等于字符串的參數,則返回0;
如果字符串在字母表中應該排在字符串參數之后,則返回一個整數(多數情況為1,具體由實現而定)
8.fromCharCode()
String構造函數本身有一個靜態(tài)方法:fromCharCode()。這個方法的任務是接收一或多個字符編碼,然后將它們轉換成一個字符串。
alert (String.fromCharCode(104,101,108,108,111));? ? // "hello"