1. 程式人生 > >2017年11月12日--1(ES的數據類型-應用數據)

2017年11月12日--1(ES的數據類型-應用數據)

例如 bre per 小數位 運行 傳遞 concat 行為 tofixed

ES標準


1引用類型

Boolean 對象是 Boolean 原始類型的引用類型。

要創建 Boolean 對象,只需要傳遞 Boolean 值作為參數:
var oBooleanObject = new Boolean(true);

var oFalseObject = new Boolean(false);
var bResult = oFalseObject && true; //輸出 true

Number 對象
正如你可能想到的,Number 對象是 Number 原始類型的引用類型。要創建 Number 對象,采用下列代碼:
var oNumberObject = new Number(68);

要得到數字對象的 Number 原始值,只需要使用 valueOf() 方法:
var iNumber = oNumberObject.valueOf();

當然,Number 類也有 toString() 方法,

toFixed() 方法
toFixed() 方法返回的是具有指定位數小數的數字的字符串表示。例如:
var oNumberObject = new Number(68);
alert(oNumberObject.toFixed(2)); //輸出 "68.00"

toFixed() 方法
toFixed() 方法返回的是具有指定位數小數的數字的字符串表示。例如:
var oNumberObject = new Number(68);
alert(oNumberObject.toFixed(2)); //輸出 "68.00"

toPrecision() 方法
toPrecision() 方法根據最有意義的形式來返回數字的預定形式或指數形式。它有一個參數,即用於表示數的數字總數(不包括指數)。例如,
var oNumberObject = new Number(68);
alert(oNumberObject.toPrecision(1)); //輸出 "7e+1"
這段代碼的任務是用一位數字表示數字 68,結果為 "7e+1",以另外的形式表示即 70。的確,toPrecision() 方法會對數進行舍入。不過,如果用 2 位數字表示 68,就容易多了:
var oNumberObject = new Number(68);
alert(oNumberObject.toPrecision(2)); //輸出 "68"
當然,輸出的是 "68",因為這正是該數的準確表示。不過,如果指定的位數多於需要的位數又如何呢?
var oNumberObject = new Number(68);
alert(oNumberObject.toPrecision(3)); //輸出 "68.0"
在這種情況下,toPrecision(3) 等價於 toFixed(1),輸出的是 "68.0"。
toFixed()、toExponential() 和 toPrecision() 方法都會進行舍入操作,以便用正確的小數位數正確地表示一個數。


precision精密度


String 對象
String 對象是 String 原始類型的對象表示法,它是以下方式創建的:
var oStringObject = new String("hello world");
String 對象的 valueOf() 方法和 toString() 方法都會返回 String 類型的原始值:
alert(oStringObject.valueOf() == oStringObject.toString()); //輸出 "true"

length 屬性
charAt() 和 charCodeAt() 方法
charAt() 方法返回的是包含指定位置處的字符的字符串:

charCodeAt()如果想得到的不是字符,而是字符代碼,那麽可以調用 charCodeAt() 方法:
var oStringObject = new String("hello world");
alert(oStringObject.charCodeAt(1)); //輸出 "101"
這個例子輸出 "101",即小寫字母 "e" 的字符代碼。

concat() 方法

接下來是 concat() 方法,用於把一個或多個字符串連接到 String 對象的原始值上。該方法返回的是 String 原始值,保持原始的 String 對象不變:
var oStringObject = new String("hello ");
var sResult = oStringObject.concat("world");
alert(sResult); //輸出 "hello world"
alert(oStringObject); //輸出 "hello "

在上面這段代碼中,調用 concat() 方法返回的是 "hello world",而 String 對象存放的仍然是 "hello "。出於這種原因,較常見的是用加號(+)連接字符串,
因為這種形式從邏輯上表明了真正的行為:因為這種形式從邏輯上表明了真正的行為:因為這種形式從邏輯上表明了真正的行為:
var oStringObject = new String("hello ");
var sResult = oStringObject + "world";
alert(sResult); //輸出 "hello world"
alert(oStringObject); //輸出 "hello "

indexOf() 和 lastIndexOf() 方法:


indexOf() 和 lastIndexOf() 方法返回的都是指定的子串在另一個字符串中的位置,如果沒有找不到子串,則返回 -1。
這兩個方法的不同之處在於,indexOf() 方法是從字符串的開頭(位置 0)開始檢索字符串,而 lastIndexOf() 方法則是從字符串的結尾開始檢索子串。例如:
var oStringObject = new String("hello world!");
alert(oStringObject.indexOf("o")); 輸出 "4"
alert(oStringObject.lastIndexOf("o")); 輸出 "7"


localeCompare() 方法
下一個方法是 localeCompare(),對字符串進行排序。該方法有一個參數 - 要進行比較的字符串,返回的是下列三個值之一:
如果 String 對象按照字母順序排在參數中的字符串之前,返回負數。
如果 String 對象等於參數中的字符串,返回 0
如果 String 對象按照字母順序排在參數中的字符串之後,返回正數。
註釋:如果返回負數,那麽最常見的是 -1,不過真正返回的是由實現決定的。如果返回正數,那麽同樣的,最常見的是 1,不過真正返回的是由實現決定的。
示例如下:
var oStringObject = new String("yellow");
alert(oStringObject.localeCompare("brick")); //輸出 "1"
alert(oStringObject.localeCompare("yellow")); //輸出 "0"
alert(oStringObject.localeCompare("zoo")); //輸出 "-1"

slice() 和 substring()
ECMAScript 提供了兩種方法從子串創建字符串值,即 slice() 和 substring()。這兩種方法返回的都是要處理的字符串的子串,都接受一個或兩個參數。
第一個參數是要獲取的子串的起始位置,
\第二個參數(如果使用的話)是要獲取子串終止前的位置(也就是說,獲取終止位置處的字符不包括在返回的值內)。如果省略第二個參數,終止位就默認為字符串的長度。
與 concat() 方法一樣,slice() 和 substring() 方法都不改變 String 對象自身的值。它們只返回原始的 String 值,保持 String 對象不變。
var oStringObject = new String("hello world");
alert(oStringObject.slice("3")); //輸出 "lo world"
alert(oStringObject.substring("3")); //輸出 "lo world"
alert(oStringObject.slice("3", "7")); //輸出 "lo w"
alert(oStringObject.substring("3", "7")); //輸出 "lo w"

為什麽有兩個功能完全相同的方法呢?事實上,這兩個方法並不完全相同,不過只在參數為負數時,它們處理參數的方式才稍有不同。
對於負數參數,slice() 方法會用字符串的長度加上參數,substring() 方法則將其作為 0 處理(也就是說將忽略它)。例如:
var oStringObject = new String("hello 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"

當只有參數 -3 時,slice() 返回 "rld",substring() 則返回 "hello world"。這是因為對於字符串 "hello world",
slice("-3") 將被轉換成 slice("8"),而 substring("-3") 將被轉換成 substring("0")。
同樣,使用參數 3 和 -4 時,差別也很明顯。slice() 將被轉換成 slice(3, 7),與前面的例子相同,返回 "lo w"。而 substring() 方法則將兩個參數解釋為 substring(3, 0),實際上即 substring(0, 3),
因為 substring() 總把較小的數字作為起始位,較大的數字作為終止位。因此,substring("3, -4") 返回的是 "hel"。
這裏的最後一行代碼用來說明如何使用這些方法。

最後一套要討論的方法涉及大小寫轉換。有 4 種方法用於執行大小寫轉換,即
toLowerCase()
toLocaleLowerCase()
toUpperCase()
toLocaleUpperCase()

這段代碼中,toUpperCase() 和 toLocaleUpperCase() 輸出的都是 "HELLO WORLD",toLowerCase() 和 toLocaleLowerCase() 輸出的都是 "hello world"。一般來說,如果不知道在以哪種編碼運行一種語言,則使用區域特定的方法比較安全。
提示:記住,String 對象的所有屬性和方法都可應用於 String 原始值上,因為它們是偽對象。


instanceof 運算符
在使用 typeof 運算符時采用引用類型存儲值會出現一個問題,無論引用的是什麽類型的對象,它都返回 "object"。ECMAScript 引入了另一個 Java 運算符 instanceof 來解決這個問題。
instanceof 運算符與 typeof 運算符相似,用於識別正在處理的對象的類型。與 typeof 方法不同的是,instanceof 方法要求開發者明確地確認對象為某特定類型。例如:
var oStringObject = new String("hello world");
alert(oStringObject instanceof String); //輸出 "true"
這段代碼問的是“變量 oStringObject 是否為 String 對象的實例?”oStringObject 的確是 String 對象的實例,因此結果是 "true"。盡管不像 typeof 方法那樣靈活,但是在 typeof 方法返回 "object" 的情況下,instanceof 方法還是很有用的。

2017年11月12日--1(ES的數據類型-應用數據)