一.ECMAScript 原始值和引用值
在 ECMAScript 中税肪,變量可以存在兩種類型的值,即原始值和引用值。
1.原始類型:
ECMAScript 有 5 種原始類型(primitive type),即 Undefined、Null辅肾、Boolean、Number 和 String轮锥。
①.Undefined 類型:
undefined類型只有一個(gè)undefined類型矫钓。聲明未初始化的時(shí)候,變量默認(rèn)就是underfined。
例如:
var abc;
此時(shí)新娜,只申明變量赵辕,未初始化,該變量將被賦予underfined概龄。
②.Boolean類型:
boolean有兩個(gè)值 true 和 false (即兩個(gè) Boolean 字面量)还惠。
③.Null類型:
另一種只有一個(gè)值的類型是 Null,它只有一個(gè)專用值 null私杜,即它的字面量。值 undefined 實(shí)際上是從值 null 派生來(lái)的衰粹,因此 ECMAScript 把它們定義為相等的锣光。
alert(null == undefined);//輸出 "true"
盡管這兩個(gè)值相等,但它們的含義不同铝耻。undefined 是聲明了變量但未對(duì)其初始化時(shí)賦予該變量的值誊爹,null 則用于表示尚未存在的對(duì)象。如果函數(shù)或方法要返回的是對(duì)象瓢捉,那么找不到該對(duì)象時(shí)频丘,返回的通常是 null。
④.Number 類型:
這種類型既可以表示 32 位的整數(shù)泡态,還可以表示 64 位的浮點(diǎn)數(shù)搂漠。直接輸入的(而不是從另一個(gè)變量訪問(wèn)的)任何數(shù)字都被看做 Number 類型的字面量。
⑤.String類型:
String 類型的獨(dú)特之處在于某弦,它是唯一沒(méi)有固定大小的原始類型状答。
字符串字面量是由雙引號(hào)(")或單引號(hào)(')聲明的。
var str1 = "ES6";
var str2 = 'ES6';
都是正確的刀崖。
2.引用類型:
引用類型通常叫做類(class),也就是說(shuō)拍摇,遇到引用值亮钦,所處理的就是對(duì)象。
對(duì)象是由 new 運(yùn)算符加上要實(shí)例化的對(duì)象的名字創(chuàng)建的充活。
var obj = new Objecr();
①.Object對(duì)象:
ES中所有對(duì)象都由這個(gè)對(duì)象繼承而來(lái)蜂莉,Object對(duì)象中所有屬性和方法都會(huì)出現(xiàn)在其他對(duì)象中。
Object對(duì)象具有屬性:
constructor
對(duì)創(chuàng)建對(duì)象的函數(shù)的引用(指針)混卵。對(duì)于 Object 對(duì)象映穗,該指針指向原始的 Object() 函數(shù)。
Prototype
對(duì)該對(duì)象的對(duì)象原型的引用幕随。對(duì)于所有的對(duì)象蚁滋,它默認(rèn)返回 Object 對(duì)象的一個(gè)實(shí)例。
Object 對(duì)象還具有幾個(gè)方法:
--hasOwnProperty(property):
判斷對(duì)象是否有某個(gè)特定的屬性。必須用字符串指定該屬性辕录。(例如睦霎,o.hasOwnProperty("name"))
--IsPrototypeOf(object):
判斷該對(duì)象是否為另一個(gè)對(duì)象的原型。
--PropertyIsEnumerable:
判斷給定的屬性是否可以用 for...in 語(yǔ)句進(jìn)行枚舉走诞。
--ToString():
返回對(duì)象的原始字符串表示副女。對(duì)于 Object 對(duì)象,ECMA-262 沒(méi)有定義這個(gè)值蚣旱,所以不同的 ECMAScript 實(shí)現(xiàn)具有不同的值碑幅。
--ValueOf():
返回最適合該對(duì)象的原始值。對(duì)于許多對(duì)象塞绿,該方法返回的值都與 ToString() 的返回值相同沟涨。
注釋:上面列出的每種屬性和方法都會(huì)被其他對(duì)象覆蓋。
②.Boolean對(duì)象
Boolean 對(duì)象是 Boolean 原始類型的引用類型位隶。
要?jiǎng)?chuàng)建 Boolean 對(duì)象拷窜,只需要傳遞 Boolean 值作為參數(shù):
var oBooleanObject = new Boolean(true);
③.Number 對(duì)象
Number 對(duì)象是 Number 原始類型的引用類型。
valueOf()方法:可以得到數(shù)字對(duì)象的Number原始值涧黄。
toFixed() 方法:可以返回的是具有指定位數(shù)小數(shù)的數(shù)字的字符串表示篮昧。
var numberObj = new Number(15);
alert(numberObj.valueOf() ); ? ? ? ? ? ? ? ? ? ? //輸出15;
alert(numberObj.toFixed(2)); ? ? ? ? ? ? ? ? ? ?//輸出15.00
④.String對(duì)象
String 對(duì)象是 String 原始類型的對(duì)象表示法笋妥。
String 對(duì)象的 valueOf() 方法和 toString() 方法都會(huì)返回 String 類型的原始值懊昨。
String對(duì)象的屬性:
length屬性:字符串的字符個(gè)數(shù)。
String對(duì)象的方法:
charAt() 方法:返回的是包含指定位置處的字符的字符串春宣。
charCodeAt() 方法:返回的是包含指定位置處的字符的字符代碼酵颁。
var str = new String("hello world");
alert(str.charAt(1)); ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?//輸出 "e"
alert(str.charCodeAt(1)); ? ? ? ? ? ? ? ? ? ? //輸出 "101"
concat() 方法:用于把一個(gè)或多個(gè)字符串連接到 String 對(duì)象的原始值上。
var str = new String("hello world");
var str2 = str.concat("123") ;
alert(str2);? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? //輸出“hello world123”
indexOf()方法:從字符串的開(kāi)頭(位置 0)開(kāi)始檢索指定的子串在另一個(gè)字符串中的位置月帝。
lastIndexOf() 方法:從字符串的結(jié)尾開(kāi)始檢索指定的子串在另一個(gè)字符串中的位置躏惋。
var str = new String ("hello world");
alert(str.indexOf("e")); ? ? ? ? ? ? ? ? ? ? ? ?//輸出 "1"
alert(str.lastIndexOf("e")); ? ? ? ? ? ? ? ? ?//輸出 "9"
localeCompare() 方法:對(duì)字符串進(jìn)行排序。
該方法有一個(gè)參數(shù) - 要進(jìn)行比較的字符串嚷辅,返回的是下列三個(gè)值之一:
-如果 String 對(duì)象按照字母順序排在參數(shù)中的字符串之前簿姨,返回負(fù)數(shù)。
-如果 String 對(duì)象等于參數(shù)中的字符串簸搞,返回 0扁位。
-如果 String 對(duì)象按照字母順序排在參數(shù)中的字符串之后,返回正數(shù)趁俊。
var str = new String ("b");
alert(str.localeCompare("a")); ? ? ? ? ? ?//輸出 "1"
alert(str.localeCompare("b"));? ? ? ? ? ? //輸出 "0"
alert(str.localeCompare("c"));? ? ? ? ? ? //輸出 "-1"
slice() 和 substring()方法:字符串截取域仇。這兩種方法返回的都是要處理的字符串的子串,都接受一個(gè)或兩個(gè)參數(shù)寺擂。第一個(gè)參數(shù)是要獲取的子串的起始位置暇务,第二個(gè)參數(shù)(如果使用的話)是要獲取子串終止前的位置(也就是說(shuō)泼掠,獲取終止位置處的字符不包括在返回的值內(nèi))。如果省略第二個(gè)參數(shù)般卑,終止位就默認(rèn)為字符串的長(zhǎng)度武鲁。
不同之處:對(duì)于負(fù)數(shù)參數(shù),slice() 方法會(huì)用字符串的長(zhǎng)度加上參數(shù)蝠检,substring() 方法則將其作為 0 處理(也就是說(shuō)將忽略它)沐鼠。
例如:
var oStringObject = new String("hello world");
alert(oStringObject.slice("3")); ? ? ? ? ? ? ? ? ? ? ? ? ?//輸出 "lo world"
alert(oStringObject.substring("3")); ? ? ? ? ? ? ? ? ? //輸出 "lo world"
alert(oStringObject.slice("-3")); ? ? ? ? ? ? ? ? ? ? ? ? //輸出 "rld"
alert(oStringObject.substring("-3")); ? ? ? ? ? ? ? ? //輸出 "hello world"
alert(oStringObject.slice("3, -4")); ? ? ? ? ? ? ? ? ? ? //輸出 "lo w"
alert(oStringObject.substring("3, -4")); ? ? ? ? ? ? //輸出 "hel"
toLowerCase()、toLocaleLowerCase()叹谁、toUpperCase() 和 toLocaleUpperCase()方法:4 種方法用于執(zhí)行大小寫(xiě)轉(zhuǎn)換饲梭。
從名字上可以看出它們的用途,前兩種方法用于把字符串轉(zhuǎn)換成全小寫(xiě)的焰檩,后兩種方法用于把字符串轉(zhuǎn)換成全大寫(xiě)的憔涉。
toLowerCase() 和 toUpperCase() 方法是原始的,是以 java.lang.String 中相同方法為原型實(shí)現(xiàn)的析苫。
toLocaleLowerCase() 和 toLocaleUpperCase() 方法是基于特定的區(qū)域?qū)崿F(xiàn)的(與 localeCompare() 方法相同)兜叨。在許多區(qū)域中,區(qū)域特定的方法都與通用的方法完全相同衩侥。
一般來(lái)說(shuō)国旷,如果不知道在以哪種編碼運(yùn)行一種語(yǔ)言,則使用區(qū)域特定的方法比較安全茫死。
var oStringObject = new String("Hello World");
alert(oStringObject.toLocaleUpperCase()); ? ? //輸出 "HELLO WORLD"
alert(oStringObject.toUpperCase()); ? ? ? ? ? ? ? ?//輸出 "HELLO WORLD"
alert(oStringObject.toLocaleLowerCase()); ? ?//輸出 "hello world"
alert(oStringObject.toLowerCase()); ? ? ? ? ? ? ? //輸出 "hello world"