成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

JavaScript引用類型——“基本包裝類型”的注意要點(diǎn)

tianren124 / 2014人閱讀

摘要:引用類型和基本包裝類型的主要區(qū)別就是對象的生存期。自動(dòng)創(chuàng)建的基本包裝類型的對象只存在于一行代碼的執(zhí)行瞬間,隨后就會(huì)被銷毀。另外,構(gòu)造函數(shù)也會(huì)根據(jù)傳入值的類型返回相應(yīng)基本包裝類型的實(shí)例。

基本包裝類型

為了操作的遍歷,ECMAScript 還提供了3 個(gè)特殊的引用類型: Boolean、Number 和String。引用類型和基本包裝類型的主要區(qū)別就是對象的生存期。自動(dòng)創(chuàng)建的基本包裝類型的對象只存在于一行代碼的執(zhí)行瞬間,隨后就會(huì)被銷毀。

另外,Object 構(gòu)造函數(shù)也會(huì)根據(jù)傳入值的類型返回相應(yīng)基本包裝類型的實(shí)例。如:

var str = new Object("text");
document.write(typeof str); //object
document.write(str instanceof String); //true

使用new 調(diào)用基本包裝類型的構(gòu)造函數(shù),與直接調(diào)用同名的轉(zhuǎn)型函數(shù)是不一樣的。如:

var num1 = new Number("321"); //構(gòu)造函數(shù)
document.write(num1 instanceof Number); //true
document.write(typeof num1); //object

var str = "321";
var num2 = Number(str); //轉(zhuǎn)型函數(shù)
document.write(num2 instanceof Number); //false
document.write(typeof num2); //number
Boolean 引用類型

Boolean 引用類型與布爾值對應(yīng)??梢詡魅氩紶栔?,語法如下:

var booleanObject = new Boolean(true);
//或
var booleanObject = new Boolean(false);

該引用類型的實(shí)例會(huì)修改valueOf()toString()方法。前者返回基本類型值true 和false;后者返回字符串"true" 和"false"。

使用Boolean 引用類型會(huì)產(chǎn)生在布爾表達(dá)式中使用Boolean 對象。如:

var booleanObj = new Boolean(false);
var booleanValue = false;

document.write(booleanObj && true); //true
document.write(booleanValue && true); //false

布爾表達(dá)式中的所有對象都會(huì)被轉(zhuǎn)換為true。所以建議永遠(yuǎn)不要使用Boolean 對象。

Number 引用類型

可以調(diào)用Number 構(gòu)造函數(shù)向其傳入相應(yīng)的數(shù)值。如:

var num = new Number(10);

Number 類型也重寫了valueOf()、toLocaleString()toString()方法。重寫后的valueOf()方法返回對象表示的基本類型的數(shù)值。

var num = new Number(10);
document.write(typeof num.valueOf()) //number

其中,toFixed()方法會(huì)按照指定的小數(shù)位返回?cái)?shù)值的字符串表示,如:

var num = new Number(10);
document.write(num.toFixed(2)); //10.00

該方法很適合處理貨幣值。但不同的瀏覽器給這個(gè)方法設(shè)定的舍入規(guī)則有所不同。IE8 以及之前的版本,在給toFixed()傳入0 的情況下,不能正確舍入范圍在{[-0.94,-0.5],[0.5,0.94]}之間的值。IE9 修復(fù)了這個(gè)問題。

var num = new Number(10);
document.write(num.toFixed(21)); //RangeError: toFixed() argument must be between 0 and 20

toFixed()方法可以表示帶有0 到20 個(gè)小數(shù)位的數(shù)值。

另外,toExponential()方法可以返回以指數(shù)表示法(也稱e 表示法)表示的數(shù)值的字符串形式。如:

var num = 143210000000;
document.write(num.toExponential(3)); //1.432e+11

最后,toPrecision()方法可能會(huì)返回固定大小(fixed)格式,也可能返回指數(shù)(exponential)格式;它會(huì)根據(jù)要處理的數(shù)值決定到底是調(diào)用toFixed()還是調(diào)用toExponential()。如:

var num = 123;
document.write(num.toFixed(1)); //123.0
document.write(num.toExponential(2)); //1.23e+2

document.write(num.toPrecision(1)); //1e+2
document.write(num.toPrecision(3)); //123
document.write(num.toPrecision(4)); //123.0

toPrecision()方法可以表現(xiàn)1 到21 位小叔。某些瀏覽器支持的范圍更大。
仍然不建議直接實(shí)例化Number 引用類型,原因與Boolean 對象一樣。如:

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

console.log(num1); //Number
console.log(num2); //10

console.log(typeof num1); //object
console.log(typeof num2); //number

console.log(num1 instanceof Number); //true
console.log(num2 instanceof Number); //false
String 引用類型

String 類型是字符串的對象包裝類型。創(chuàng)建方法如下:

var str = new String("Hello World");

繼承的valueOf()、toLocaleString()toString()方法,都返回對象所表示的基本字符串值。且每個(gè)實(shí)例都有一個(gè)length 屬性。如:

var str = new String("Hello World");
document.write(str.length); //11
String類型的方法

String 類型提供了很多方法,用于輔助完成對ECMAScript 中字符串的解析和操作。

字符方法

主要有兩個(gè)用于訪問字符串中特定字符的方法:charAt()charCodeAt(),和一個(gè)ECMAScript 5 中的方括號(hào)表示法。

charAt()方法

該方法以單字符串的形式返回給定位置的那個(gè)字符(ECMAScript 沒有字符類型)。如:

var num = "Hello world";
console.log(num.charAt(6)); //w
charCodeAt()方法

該方法返回字符編碼。如:

var num = "Hello world";
console.log(num.charCodeAt(6)); //119
方括號(hào)表示法(ECMAScript 5)

如果在IE7 及更早版本中使用這種語法,會(huì)返回undefined 值。如:

var num = "Hello world";
console.log(num[6]); //w
字符串操作方法

拼接、刪除等方法

concat()方法

該方法用于將一個(gè)或多個(gè)字符串拼接起來。如:

var str = "hello";
var newStr = str.concat(" world","!");
document.write(str); //hello
document.write(newStr); //hello world!

實(shí)踐中,這種方法復(fù)雜麻煩不如+ 加號(hào)來的方便。

slice()方法

1 個(gè)或2 個(gè)參數(shù),第一個(gè)參數(shù)是開始的位置,第二個(gè)參數(shù)是結(jié)束的位置。如:

var str = "hello world";
var newStr = str.slice(5,7);

document.write(str + "
" + newStr); //w
substr()方法

1 個(gè)或2 個(gè)參數(shù),第一個(gè)參數(shù)是開始的位置,第二個(gè)參數(shù)是返回的字符的個(gè)數(shù)。如:

var str = "hello world";
var newStr = str.substr(6, 1);

document.write(str + "
" + newStr); //w
substring()方法

1 個(gè)或2 個(gè)參數(shù),第一個(gè)參數(shù)是開始的位置,第二個(gè)參數(shù)是結(jié)束的位置。如:

var str = "hello world";
var newStr = str.substring(6, 7);

document.write(str + "
" + newStr); //w

以上三個(gè)方法在被傳入負(fù)數(shù)的情況下,返回的結(jié)果就不太相同了。

slice()方法會(huì)將兩個(gè)參數(shù)與字符串長度相加;

substr()方法會(huì)將第一個(gè)參數(shù)與字符串長度相加,第二個(gè)參數(shù)轉(zhuǎn)換為0;

substring()方法會(huì)將兩個(gè)參數(shù)都轉(zhuǎn)換為0;

如下:

var str = "hello world";
var newStr = str.slice(-6, -1);
document.write(str + "
" + newStr); //hello world worl var str = "hello world"; var newStr = str.substr(3, -4); document.write(str + "
" + newStr); //" " var str = "hello world"; var newStr = str.substring(3,-4); //實(shí)際上這個(gè)方法會(huì)把-4 轉(zhuǎn)換成0,而該方法會(huì)從兩個(gè)參數(shù)中較小的一個(gè)作為開始位置,所以相當(dāng)于調(diào)用了str.substring(0,3) document.write(str + "
" + newStr); //hello world hel
字符串位置方法

有兩個(gè)方法:indexOf()lastIndexOf();該兩個(gè)方法如果沒有找到該子字符串,則返回-1。

indexOf()方法

indexOf()方法從字符串的開頭向后搜索。如:

var str = "hello world";
document.write(str.indexOf("o")); //4

也可以傳入第二個(gè)參數(shù),即從何處開始。如:

var str = "hello world";
document.write(str.indexOf("o",5)); //7
lastIndexOf()方法

lastIndexOf()方法從字符串的后面開始向前搜索。如:

var str = "hello world";
document.write(str.lastIndexOf("o")); //7

當(dāng)然也有第二個(gè)參數(shù)。如:

var str = "hello world";
document.write(str.lastIndexOf("o",5)); //4

可以循環(huán)調(diào)用上面的方法,來找到所有匹配的字符串。如:

var str = "hello world";
var pos = str.indexOf("o");
var result = [];

while (pos > -1){
    result.push(pos);
    pos = str.indexOf("o",pos + 1);
}

document.write(result.join(" ")); //4 7    
trim()方法

這個(gè)方法會(huì)創(chuàng)建一個(gè)字符串的副本,刪除前置和后綴的所有空格,然后返回結(jié)果。如:

var str = "      hello world     ";
console.log(str); //"      hello world     "
var newStr = str.trim();
console.log(newStr); //"hello world"
字符串大小寫轉(zhuǎn)換方法

主要有四個(gè)方法:toLowerCase()、toUpperCase()toLocaleLowerCase()、toLocaleUpperCase()。其中后面兩種方法是針對特定地區(qū)的實(shí)現(xiàn)。對有些少數(shù)語言地區(qū)會(huì)為Unicode 大小寫轉(zhuǎn)換應(yīng)用特殊的規(guī)則。所以,在不知道自己的代碼將在哪種語言環(huán)境中運(yùn)行的情況下,還是使用后兩種方法比較好。如:

var str = "Apple.Inc";
console.log(str.toUpperCase());
console.log(str.toLowerCase());
console.log(str.toLocaleUpperCase());
console.log(str.toLocaleLowerCase());    
/*
[Log] APPLE.INC (repetition.html, line 16)
[Log] apple.inc (repetition.html, line 17)
[Log] APPLE.INC (repetition.html, line 18)
[Log] apple.inc (repetition.html, line 19)
*/
字符串的模式匹配方法

有四個(gè)方法:match()、search()、replace()、split()

match()方法

本質(zhì)上與調(diào)用RegExp 的exec()方法相同。match()方法接受一個(gè)參數(shù)(正則表達(dá)式或RegExp 對象)如:

var str = "red hed bed led";
var pattern = /.ed/;
var matches = str.match(pattern); //與pattern.exec(str)相同
console.log(matches); //["red"]
search()方法

唯一的參數(shù)與match()方法相同。search()方法返回字符串中第一個(gè)匹配項(xiàng)的索引;如果沒有就返回-1;如:

var str = "red hed bed led";
var pattern = /ed/;
var matched = str.search(pattern);
console.log(matched); //1
replace()方法

接收兩個(gè)參數(shù):第一個(gè)是RegExp 對象或者一個(gè)字符串;第二個(gè)參數(shù)是字符串或者一個(gè)函數(shù)。

如果第一個(gè)參數(shù)是字符串,就會(huì)替換第一個(gè)子字符串。如:

var str = "red hed bed led";
var matched = str.replace("red", "aaa");
console.log(matched); //aaa hed bed led

如果第一個(gè)參數(shù)是正則表達(dá)式且指定了全局g 標(biāo)志,就會(huì)替換所有。如:

var str = "red hed bed led";
var matched = str.replace(/ed/g, "aaa,");
console.log(matched); //raaa, haaa, baaa, laaa,

如果第二個(gè)參數(shù)是字符串,那么可以使用一些特殊的字符序列:

$$ (替換成$)

$&(匹配整個(gè)模式的子字符串)

$` (匹配的子字符串之前的子字符串)

$" (匹配的子字符串之后的子字符串)

$n (匹配第n 個(gè)捕獲組的子字符串)

$nn (匹配第nn 個(gè)捕獲組的子字符串)

如:

var str = "red hed bed led";
var matched = str.replace(/ed/g, "$$-"); //r$- h$- b$- l$-
matched = str.replace(/ed/g, "$&-"); //red- hed- bed- led-
matched = str.replace(/.ed/g, "$`-"); //- red - red hed - red hed bed -
matched = str.replace(/.ed/g, "$"-"); //hed bed led-  bed led-  led- -
matched = str.replace(/(ed)/g, "$1ing"); //reding heding beding leding
console.log(matched);

如果第二個(gè)參數(shù)是一個(gè)函數(shù),這個(gè)函數(shù)會(huì)被傳遞多個(gè)參數(shù):模式的匹配項(xiàng)、第一個(gè)捕獲組的匹配項(xiàng)、第二個(gè)...,最后兩個(gè)參數(shù)是分別是模式的匹配項(xiàng)在字符串中的位置和原始字符串。如:

function inputText(text){
    return text.replace(/[lo]/g, function(match,pos,orignalText){
        switch(match){
            case "l":
            return "1";
            case "o":
            return "0";
        }
    });
}
var output = inputText("hello");
console.log(output); //he110
split()方法

這個(gè)方法可以基于指定的分隔符將一個(gè)字符串分割成多個(gè)字符串,并將結(jié)果放在一個(gè)數(shù)組中。分隔符可以是字符串,也可以是一個(gè)RegExp 對象。第二個(gè)參數(shù)是可選的,用于指定數(shù)組的大小。如:

var str = "Apple.Inc,Baidu.Inc,Alibaba.Inc";
var list = str.split(",");
document.write(list.join(" & ")); //Apple.Inc & Baidu.Inc & Alibaba.Inc
console.log(list); //["Apple.Inc", "Baidu.Inc", "Alibaba.Inc"]
localeCompare()方法

這個(gè)方法是比較兩個(gè)字符串,并返回下列值中的一個(gè):

如果字符串在字母表中應(yīng)該排在字符串參數(shù)之前,則返回一個(gè)負(fù)數(shù)(多數(shù)情況下是-1);

如果字符串在字母表中應(yīng)該排在字符串參數(shù)之后,則返回一個(gè)正數(shù)(多數(shù)情況下是1);

如果字符串等于字符串參數(shù),則返回0;

具體如下:

var strValue = "hello";
console.log(strValue.localeCompare("world")); //-1 字符串hello 在字符串參數(shù)world 之前,返回-1
console.log(strValue.localeCompare("Alice")); //1
console.log(strValue.localeCompare("hello")); //0

因?yàn)榉祷氐臄?shù)值不一定上上面三種,所以最好用下面這個(gè)方法比較:

function compare(x,y){
    var result = x.localeCompare(y);
    if (result > 0){
        document.write(y + "," + x);
    }else if(result < 0){
        document.write(x + "," + y);
    }else{
        document.write("equal");
    }
}

compare("apple","baidu"); //apple,baidu

可以嘗試把string 轉(zhuǎn)換成array 再用數(shù)組重排序的方法:

str = "blue,red,yellow,white";
function compare(str){
    var strArray = str.split(",");
    var newStrArray = strArray.sort(arraySortFunc);
    function arraySortFunc(a,b){
        if (a > b){
            return 1;
        }else if(a < b){
            return -1;
        }else{
            return 0;
        }
    }
    console.log(newStrArray); //["blue", "red", "white", "yellow"]
}
compare(str);
fromCharCode()方法

這是一個(gè)靜態(tài)方法。目的是接收一個(gè)或多個(gè)字符編碼,然后將他們轉(zhuǎn)換成一個(gè)字符串。從本質(zhì)上來看這個(gè)方法與charCodeAt()執(zhí)行的是相反的操作。注意他的語法是String.charCodeAt()如:

function consoleStrCode(str){
    var codeStr = "";
    var codeArray = [];
    for (var i = 0; i < str.length; i ++){
        var codeValue = str.charCodeAt(i);
        codeStr += codeValue + ",";
    }
    codeArray = codeStr.split(",");
    codeArray.pop();
    console.log(codeArray);
}

consoleStrCode("hello"); //["104", "101", "108", "108", "111"]



function consoleCodeStr(codeArray){
    var codeStr = "";
    for (var i = 0;i < codeArray.length;i ++){
        var currentCode = codeArray[i];
        var currentCodeValue = parseInt(currentCode);
        codeStr += String.fromCharCode(currentCodeValue);
    }
    console.log(codeStr);
}

var codeArray = ["104", "101", "108", "108", "111"];
consoleCodeStr(codeArray); //hello

以上代碼就是代碼和字符串互換的函數(shù)。

HTML 方法(避免使用)

該方法的目的是簡化常見的HTML 格式化。因?yàn)樗鼈儎?chuàng)建的標(biāo)記通常無法表達(dá)語義。所以應(yīng)該避免使用。

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/86219.html

相關(guān)文章

  • JavaScript 你不知道基本包裝類型

    摘要:你不知道的基本包裝類型聲明本文的大部分內(nèi)容參考自高級(jí)程序設(shè)計(jì)第三版中文版,中間夾雜一些自己閱讀這部分內(nèi)容時(shí)的思路。而且,上面的步驟同樣適用于類型的類型對應(yīng)的布爾值和數(shù)字值。 JavaScript 你不知道的基本包裝類型 聲明:本文的大部分內(nèi)容參考自《JavaScript 高級(jí)程序設(shè)計(jì)(第三版)》(中文版 P.118),中間夾雜一些自己閱讀這部分內(nèi)容時(shí)的思路。 JavaScript 中共...

    xingpingz 評論0 收藏0
  • JavaScript 闖關(guān)記》之基本包裝類型

    摘要:對基本包裝類型的實(shí)例調(diào)用會(huì)返回,而且所有基本包裝類型的對象都會(huì)被轉(zhuǎn)換為布爾值。構(gòu)造函數(shù)也會(huì)像工廠方法一樣,根據(jù)傳入值的類型返回相應(yīng)基本包裝類型的實(shí)例。要注意的是,使用調(diào)用基本包裝類型的構(gòu)造函數(shù),與直接調(diào)用同名的轉(zhuǎn)型函數(shù)是不一樣的。 為了便于操作基本類型值,JavaScript 還提供了3個(gè)特殊的引用類型:Boolean、Number 和 String。實(shí)際上,每當(dāng)讀取一個(gè)基本類型值的時(shí)...

    xiaolinbang 評論0 收藏0
  • JavaScript學(xué)習(xí)總結(jié)(一)基礎(chǔ)部分

    摘要:前綴規(guī)范每個(gè)局部變量都需要有一個(gè)類型前綴,按照類型可以分為表示字符串。例如,表示以上未涉及到的其他對象,例如,表示全局變量,例如,是一種區(qū)分大小寫的語言。布爾值與字符串相加將布爾值強(qiáng)制轉(zhuǎn)換為字符串。 基本概念 javascript是一門解釋型的語言,瀏覽器充當(dāng)解釋器。js執(zhí)行時(shí),在同一個(gè)作用域內(nèi)是先解釋再執(zhí)行。解釋的時(shí)候會(huì)編譯function和var這兩個(gè)關(guān)鍵詞定義的變量,編譯完成后從...

    AlanKeene 評論0 收藏0
  • 重溫JS基礎(chǔ)--引用類型(三)

    摘要:今天把接下來引用類型中的一些內(nèi)容全部記錄完畢基本包裝類型為了便于操作基本類型值,還提供了種特殊的引用類型。這三種類型具有與各自的基本類型響應(yīng)的特殊行為。重寫后的返回對象表示的數(shù)值類型,另外兩個(gè)方法則返回字符串形式的數(shù)值。 今天把接下來引用類型中的一些內(nèi)容全部記錄完畢~ 基本包裝類型 為了便于操作基本類型值,JavaScript還提供了3種特殊的引用類型:Boolean, Number,...

    kel 評論0 收藏0
  • JavaScript數(shù)據(jù)類型

    摘要:八進(jìn)制字面值的第一位必須是,然后是八進(jìn)制數(shù)字序列。十六進(jìn)制字面量的前兩位必須是,后跟任何十六進(jìn)制數(shù)字以及。而自動(dòng)創(chuàng)建的基本包裝類型的對象,則只存在于一行代碼的執(zhí)行瞬間,然后立即銷毀。 前言 ECMAScript 迄今為止標(biāo)準(zhǔn)定義了 7 種數(shù)據(jù)類型:6 種原始類型-- String、Number、 Boolean、 Undefined、Null 和 Symbol;1 種引用類型-- O...

    szysky 評論0 收藏0

發(fā)表評論

0條評論

最新活動(dòng)
閱讀需要支付1元查看
<